

 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.

# Référence SQL
<a name="cm_chap_SQLCommandRef"></a>

Amazon Redshift vous permet de tirer parti du SQL pour interroger et analyser efficacement de grandes quantités de données stockées dans votre entrepôt de données. La référence SQL couvre la syntaxe et l’utilisation des commandes SQL, des types de données, des fonctions, des opérateurs, etc., vous permettant d’extraire des informations et de prendre des décisions basées sur les données. Vous pouvez consulter cette référence pour écrire des requêtes optimisées, créer et gérer des objets de base de données et effectuer des transformations de données complexes. La référence suivante fournit des informations complètes sur l’utilisation de SQL dans l’environnement Amazon Redshift pour répondre à vos exigences en matière d’analyse de données.

**Topics**
+ [Amazon Redshift SQL](c_redshift-sql.md)
+ [Utilisation de SQL](c_SQL_reference.md)
+ [Commandes SQL](c_SQL_commands.md)
+ [Référence sur les fonctions SQL](c_SQL_functions.md)
+ [Mots réservés](r_pg_keywords.md)

# Amazon Redshift SQL
<a name="c_redshift-sql"></a>

**Topics**
+ [Fonctions SQL prises en charge sur le nœud principal](c_sql-functions-leader-node.md)
+ [Amazon Redshift et PostgreSQL](c_redshift-and-postgres-sql.md)

Amazon Redshift repose sur le langage SQL standard, avec des fonctionnalités supplémentaires permettant de gérer de très grands ensembles de données et de prendre en charge des analyses et des rapports performants sur ces données.

**Note**  
La taille maximale d’une instruction SQL Amazon Redshift est de 16 Mo.

# Fonctions SQL prises en charge sur le nœud principal
<a name="c_sql-functions-leader-node"></a>

Certaines requêtes Amazon Redshift sont distribuées et exécutées sur les nœuds de calcul, et d’autres requêtes s’exécutent exclusivement sur le nœud principal.

Le nœud principal répartit SQL sur les nœuds de calcul chaque fois qu’une requête fait référence à des tables créées par l’utilisateur ou à des tables système (tables avec le préfixe STL ou STV, et vues système avec le préfixe SVL ou SVV). Une requête qui ne fait référence qu’aux tables catalogue (tables avec le préfixe PG, comme PG\$1TABLE\$1DEF, résidant sur le nœud principal) ou qui ne fait référence à aucune table, s’exécute exclusivement sur le nœud principal.

Certaines fonctions SQL d’Amazon Redshift sont prises en charge uniquement sur le nœud principal et ne le sont pas sur les nœuds de calcul. Une requête qui utilise une fonction de nœud principal doit être exécutée exclusivement sur celui-ci, et non sur les nœuds de calcul, sinon elle renverra une erreur.

La documentation de chaque fonction qui doit s’exécuter exclusivement sur le nœud principal comprend une note indiquant que la fonction renverra une erreur si elle fait référence à des tables définies par l’utilisateur ou à des tables du système Amazon Redshift. Consultez [Fonctions exécutées uniquement sur le nœud principal](c_SQL_functions_leader_node_only.md) pour obtenir la liste des fonctions qui s’exécutent exclusivement sur le nœud principal.

## Exemples
<a name="c_sql-functions-leader-node-examples"></a>

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations sur l’exemple de base de données, consultez [Exemple de base de données](c_sampledb.md).

**CURRENT\$1SCHEMA**

La fonction CURRENT\$1SCHEMA est une fonction de nœud principal uniquement. Dans cet exemple, comme la requête ne fait pas référence à une table, la fonction s’exécute exclusivement sur le nœud principal.

```
select current_schema();
            
current_schema
---------------
public
```

Dans l’exemple suivant, comme la requête fait référence à une table catalogue système, la fonction s’exécute exclusivement sur le nœud principal.

```
select * from pg_table_def
where schemaname = current_schema() limit 1;

 schemaname | tablename | column |   type   | encoding | distkey | sortkey | notnull
------------+-----------+--------+----------+----------+---------+---------+---------
 public     | category  | catid  | smallint | none     | t       |       1 | t
```

Dans l’exemple suivant, la requête fait référence à une table système Amazon Redshift qui réside sur les nœuds de calcul, et renvoie donc une erreur.

```
select current_schema(), userid from users;

INFO:  Function "current_schema()" not supported.
ERROR:  Specified types or functions (one per INFO message) not supported on Amazon Redshift tables.
```

**SUBSTR**

SUBSTR est également une fonction réservée aux nœuds principaux. Dans l’exemple suivant, la requête s’exécute exclusivement sur le nœud principal, car elle ne fait pas référence à une table.

```
SELECT SUBSTR('amazon', 5);
            
+--------+
| substr |
+--------+
| on     |
+--------+
```

Dans l’exemple suivant, la requête fait référence à une table qui réside sur les nœuds de calcul. Cela entraîne une erreur.

```
SELECT SUBSTR(catdesc, 1) FROM category LIMIT 1;
            
ERROR: SUBSTR() function is not supported (Hint: use SUBSTRING instead)
```

Pour exécuter correctement la requête précédente, utilisez [SUBSTRING](https://docs.aws.amazon.com/redshift/latest/dg/r_SUBSTRING.html).

```
SELECT SUBSTRING(catdesc, 1) FROM category LIMIT 1;
            
+---------------------------------+
|            substring            |
+---------------------------------+
| National Basketball Association |
+---------------------------------+
```

**FACTORIAL()**

FACTORIAL() est une fonction qui s’exécute uniquement sur le nœud principal. Dans l’exemple suivant, la requête s’exécute exclusivement sur le nœud principal, car elle ne fait pas référence à une table.

```
SELECT FACTORIAL(5);           

 factorial 
-------------
 120
```

Dans l’exemple suivant, la requête fait référence à une table qui réside sur les nœuds de calcul. Cela entraîne une erreur lors de l’exécution à l’aide de l’éditeur de requête v2.

```
create table t(a int);
insert into t values (5);
select factorial(a) from t;           

ERROR: Specified types or functions (one per INFO message) not supported on Redshift tables.
Info: Function "factorial(bigint)" not supported.
```

# Amazon Redshift et PostgreSQL
<a name="c_redshift-and-postgres-sql"></a>

**Topics**
+ [JDBC et ODBC Amazon Redshift et PostgreSQL](c_redshift-postgres-jdbc.md)
+ [Fonctions mises en œuvre différemment](c_redshift-sql-implementated-differently.md)
+ [Fonctions PostgreSQL non prises en charge](c_unsupported-postgresql-features.md)
+ [Types de données PostgreSQL non pris en charge](c_unsupported-postgresql-datatypes.md)
+ [Fonctions PostgreSQL non prises en charge](c_unsupported-postgresql-functions.md)

Amazon Redshift est basé sur PostgreSQL. Amazon Redshift et PostgreSQL présentent un certain nombre de différences très importantes dont vous devez être conscient lorsque vous concevez et développez vos applications d’entrepôt des données.

Amazon Redshift est spécifiquement conçu pour les applications de traitement analytique en ligne (OLAP) et de Business Intelligence (BI), qui nécessitent des requêtes complexes sur de grands ensembles de données. Parce qu’il répond à des exigences très différentes, le schéma de stockage de données spécialisé et le moteur d’exécution de requêtes qu’Amazon Redshift utilise sont complètement différents de l’implémentation PostgreSQL. Par exemple, là où les applications de traitement des transactions en ligne (OLTP) stockent généralement les données dans des lignes, Amazon Redshift stocke les données dans des colonnes, à l’aide d’encodages de compression de données spécialisés pour une utilisation optimale de la mémoire et des I/O disque. Certaines fonctions PostgreSQL adaptées au traitement OLTP à plus petite échelle, telles que les index secondaires et les opérations efficaces de manipulation de données sur une seule ligne, ont été omises pour améliorer les performances.

Consultez [Architecture Amazon Redshift](c_redshift_system_overview.md) pour une explication détaillée de l’architecture du système d’entrepôt des données Amazon Redshift.

PostgreSQL 9.x comprend certaines fonctionnalités qui ne sont pas prises en charge par Amazon Redshift. En outre, il existe des différences importantes entre Amazon Redshift SQL et PostgreSQL dont vous devez être conscient. Cette section souligne les différences entre Amazon Redshift et PostgreSQL et fournit des conseils pour développer un entrepôt des données qui tire pleinement parti de l’implémentation SQL d’Amazon Redshift.

# JDBC et ODBC Amazon Redshift et PostgreSQL
<a name="c_redshift-postgres-jdbc"></a>

 Amazon Redshift étant basé sur PostgreSQL, nous avons précédemment recommandé d'utiliser les pilotes PostgreSQL version 8.4.703 et JDBC4 PSQLodBC version 9.x. Si vous utilisez actuellement ces pilotes, nous vous recommandons de passer aux nouveaux pilotes spécifiques à Amazon Redshift. Pour plus d’informations sur les pilotes et la configuration des connexions, consultez [Pilotes JDBC et ODBC pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/configuring-connections.html#connecting-drivers) dans le *Guide de gestion Amazon Redshift*.

Pour éviter les out-of-memory erreurs côté client lors de la récupération de grands ensembles de données à l'aide de JDBC, vous pouvez permettre à votre client de récupérer des données par lots en définissant le paramètre de taille d'extraction JDBC. Pour de plus amples informations, veuillez consulter [Définition du paramètre de taille d’extraction JDBC](set-the-JDBC-fetch-size-parameter.md).

Amazon Redshift ne reconnaît pas le paramètre JDBC maxRows. Spécifiez à la place une clause [LIMIT](r_ORDER_BY_clause.md#order-by-clause-limit) afin de limiter le jeu de résultats. Vous pouvez aussi utiliser une clause [OFFSET](r_ORDER_BY_clause.md#order-by-clause-offset) pour accéder directement à un point de départ spécifique du jeu de résultats.

# Fonctions mises en œuvre différemment
<a name="c_redshift-sql-implementated-differently"></a>

De nombreux éléments du langage SQL d’Amazon Redshift ont des caractéristiques de performance différentes et utilisent une syntaxe et une sémantique très différentes de l’implémentation PostgreSQL équivalente.

**Important**  
Ne présumez pas que la sémantique des éléments que Amazon Redshift et PostgreSQL ont en commun est identique. Veillez à consulter la rubrique [Commandes SQL](c_SQL_commands.md) du *Guide du développeur Amazon Redshift* pour comprendre les différences, souvent subtiles.

Un exemple en particulier est celui de la commande [VACUUM](r_VACUUM_command.md), qui permet de nettoyer et de réorganiser les tables. VACUUM fonctionne différemment que dans la version PostgreSQL et utilise un autre jeu de paramètres. Consultez [Exécution de l’opération VACUUM sur les tables](t_Reclaiming_storage_space202.md) pour plus d’informations sur l’utilisation de VACUUM dans Amazon Redshift.

Souvent, les outils et les fonctions de gestion et d’administration de base de données sont également différents. Par exemple, Amazon Redshift maintient un ensemble de tables et de vues système qui fournissent des informations sur le fonctionnement du système. Pour plus d’informatons, consultez [Vues de surveillance SYS](serverless_views-monitoring.md).

La liste suivante comprend quelques exemples de fonctionnalités SQL qui sont implémentées différemment dans Amazon Redshift.
+  [CREATE TABLE](r_CREATE_TABLE_NEW.md) 

  Amazon Redshift ne prend pas en charge les espaces de table, le partitionnement de table et l’héritage, ainsi que certaines contraintes. L’implémentation Amazon Redshift de CREATE TABLE vous permet de définir les algorithmes de tri et de distribution pour les tables afin d’optimiser le traitement parallèle.

  Amazon Redshift Spectrum prend en charge le partitionnement des tables à l’aide de la commande [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md).
+  [ALTER TABLE](r_ALTER_TABLE.md) 

  Seul un sous-ensemble des actions ALTER COLUMN est pris en charge.

  ADD COLUMN ne prend en charge que l’ajout d’une seule colonne dans chaque instruction ALTER TABLE.
+  [COPY](r_COPY.md) 

  La commande Amazon Redshift COPY est hautement spécialisée pour permettre le chargement de données à partir de compartiments Amazon S3 et de tables Amazon DynamoDB et pour faciliter la compression automatique. Consultez la section [Chargement de données dans Amazon Redshift](t_Loading_data.md) et la référence sur la commande COPY pour plus de détails.
+  [VACUUM](r_VACUUM_command.md) 

  Les paramètres de VACUUM sont entièrement différents. Par exemple, dans PostgreSQL, l’opération VACUUM par défaut récupère simplement de l’espace et le rend disponible en vue de sa réutilisation ; cependant, l’opération VACUUM par défaut dans Amazon Redshift correspond à VACUUM FULL, qui récupère de l’espace disque et retrie toutes les lignes.
+ Les espaces de fin des valeurs VARCHAR sont ignorés lorsque les valeurs de chaîne sont comparées. Pour plus d’informations, consultez [Signification des blancs de fin](r_Character_types.md#r_Character_types-significance-of-trailing-blanks).

# Fonctions PostgreSQL non prises en charge
<a name="c_unsupported-postgresql-features"></a>

Ces fonctionnalités PostgreSQL ne sont pas prises en charge par Amazon Redshift.

**Important**  
Ne présumez pas que la sémantique des éléments que Amazon Redshift et PostgreSQL ont en commun est identique. Veillez à consulter la rubrique [Commandes SQL](c_SQL_commands.md) du *Guide du développeur Amazon Redshift* pour comprendre les différences, souvent subtiles.
+ L’outil de requête *psql* n’est pas pris en charge. Le client [Amazon Redshift RSQL](https://docs.aws.amazon.com/redshift/latest/mgmt/rsql-query-tool.html) est pris en charge.
+ Partitionnement de table (partitionnement par plage et par liste)
+ Espaces de table
+ Constaintes
  + Unique
  + Clé étrangère
  + Clé primaire
  + Contraintes de validation
  + Contraintes d’exclusion

  Les contraintes d’unicité, de clé primaire et de clé étrangère sont autorisées, mais ne le sont qu’à titre informatif. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur de requête.
+ Héritage
+ Colonnes système PostgreSQL

  Amazon Redshift SQL ne définit pas implicitement les colonnes système. Cependant, les noms de colonne système PostgreSQL suivants ne peuvent pas être utilisés en tant que noms de colonne définis par l’utilisateur : `oid`, `tableoid`, `xmin`, `cmin`, `xmax`, `cmax` et `ctid`. Pour de plus amples informations, veuillez consulter [https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html](https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html).
+ Index
+ Clause NULL dans les fonctions de fenêtrage
+ Classements

  Amazon Redshift ne prend pas en charge les séquences de classement spécifiques à une région ou définies par l’utilisateur. Consultez [Séquences de classement](c_collation_sequences.md).
+ Expressions de valeur
  + Expressions indicées
  + Constructeurs de tableau
  + Constructeurs de ligne
+ Triggers
+ Gestion des données externes (SQL/MED)
+ Fonctions de table
+ Liste VALUES utilisée en tant que tables de constantes
+ Séquences
+ Recherche en texte intégral
+ Les autorisations RULE et TRIGGER.

  Amazon Redshift accorde ou révoque ces autorisations lorsque vous exécutez GRANT ALL ou REVOKE ALL, mais la présence ou l’absence des autorisations RULE et TRIGGER n’affecte en rien les autorisations d’accès du bénéficiaire.

# Types de données PostgreSQL non pris en charge
<a name="c_unsupported-postgresql-datatypes"></a>

En règle générale, si une requête essaie d’utiliser un type de données non pris en charge, y compris les conversions explicites ou implicites, elle retourne une erreur. Cependant, certaines requêtes qui utilisent les types de données non pris en charge s’exécutent sur le nœud principal, mais pas sur les nœuds de calcul. Consultez [Fonctions SQL prises en charge sur le nœud principal](c_sql-functions-leader-node.md).

 Pour afficher la liste des types de données pris en charge, consultez [Types de données](c_Supported_data_types.md).

Ces types de données PostgreSQL ne sont pas pris en charge par Amazon Redshift.
+ Arrays (tableaux)
+ BIT, BIT VARYING
+ BYTEA
+ Types composites
+ Types énumérés
+ Types géométriques (l’implémentation des types géométriques par Amazon Redshift est différente de celle de PostgreSQL)
+ HSTORE
+ JSON
+ Types d’adresse réseau
+ Types numériques
  + SERIAL, BIGSERIAL, SMALLSERIAL
  + MONEY
+ Types d’identifiant d’objet
+ Pseudo-types
+ Types de plage
+ Types de caractère spécial
  + "char" – Un type interne à un octet (où le type de données nommé char est placé entre guillemets).
  + name – Un type interne pour les noms d’objets.

  Pour plus d’informations sur ces types, consultez [Special Character Types](https://www.postgresql.org/docs/8.0/datatype-character.html) dans la documentation PostgreSQL. 
+ Types de recherche de texte
+ TXID\$1SNAPSHOT
+ UUID
+ xml

# Fonctions PostgreSQL non prises en charge
<a name="c_unsupported-postgresql-functions"></a>

La plupart des fonctions qui ne sont pas exclues ont une sémantique ou utilisation différente. Par exemple, certaines fonctions prises en charge ne s’exécutent que sur le nœud principal. De même, certaines fonctions non prises en charge pas ne renvoient pas une erreur lorsqu’elles s’exécutent sur le nœud principal. Le fait que ces fonctions ne renvoient pas d’erreur dans certains cas ne doit pas être considéré comme une indication que la fonction est prise en charge par Amazon Redshift. 

**Important**  
Ne présumez pas que la sémantique des éléments que Amazon Redshift et PostgreSQL ont en commun est identique. Veillez à consulter la rubrique [Commandes SQL](c_SQL_commands.md) du *Guide du développeur de bases de données Amazon Redshift* pour comprendre les différences, souvent subtiles.

 Pour plus d’informations, consultez [Fonctions SQL prises en charge sur le nœud principal](c_sql-functions-leader-node.md).

Ces fonctions PostgreSQL ne sont pas prises en charge dans Amazon Redshift.
+ Fonctions de demande de privilège d’accès
+ Fonctions de verrou consultatif
+ Fonctions d’agrégation
  + STRING\$1AGG()
  + ARRAY\$1AGG()
  + EVERY()
  + XML\$1AGG()
  + CORR()
  + COVAR\$1POP()
  + COVAR\$1SAMP()
  + REGR\$1AVGX(), REGR\$1AVGY()
  + REGR\$1COUNT()
  + REGR\$1INTERCEPT()
  + REGR\$1R2()
  + REGR\$1SLOPE()
  + REGR\$1SXX(), REGR\$1SXY(), REGR\$1SYY()
+ Opérateurs et fonctions de tableau
+ Fonctions de contrôle de sauvegarde
+ Fonctions d’informations de commentaire
+ Fonctions d’emplacement d’objet de base de données
+ Fonctions de taille d’objet de base de données
+ Fonctions et opérateurs Date/Time
  + CLOCK\$1TIMESTAMP()
  + JUSTIFY\$1DAYS(), JUSTIFY\$1HOURS(), JUSTIFY\$1INTERVAL()
  + PG\$1SLEEP()
  + TRANSACTION\$1TIMESTAMP()
+ Fonctions de prise en charge d’ENUM
+ Fonctions géométriques et opérateurs
+ Fonctions d’accès fichier générique
+ IS DISTINCT FROM
+ Fonctions d’adresse réseau et opérateurs
+ Fonctions mathématiques
  + DIV()
  + SETSEED()
  + WIDTH\$1BUCKET()
+ Fonctions de retour d’ensembles
  + GENERATE\$1SERIES()
  + GENERATE\$1SUBSCRIPTS()
+ Fonctions de plage et opérateurs
+ Fonctions de contrôle de récupération
+ Fonctions d’informations de récupération
+ Fonction ROLLBACK TO SAVEPOINT
+ Fonctions de demande de visibilité de schéma
+ Fonctions de signalisation de serveur
+ Fonctions de synchronisation d’instantané
+ Fonctions de manipulation de séquence
+ Fonctions de chaîne
  + BIT\$1LENGTH()
  + OVERLAY()
  + CONVERT(), CONVERT\$1FROM(), CONVERT\$1TO()
  + ENCODE()
  + FORMAT()
  + QUOTE\$1NULLABLE()
  + REGEXP\$1MATCHES()
  + REGEXP\$1SPLIT\$1TO\$1ARRAY()
  + REGEXP\$1SPLIT\$1TO\$1TABLE()
+ Fonctions d’informations de catalogue système
+ Fonctions d’informations système
  + CURRENT\$1CATALOG CURRENT\$1QUERY()
  + INET\$1CLIENT\$1ADDR()
  + INET\$1CLIENT\$1PORT()
  + INET\$1SERVER\$1ADDR() INET\$1SERVER\$1PORT()
  + PG\$1CONF\$1LOAD\$1TIME()
  + PG\$1IS\$1OTHER\$1TEMP\$1SCHEMA()
  + PG\$1LISTENING\$1CHANNELS()
  + PG\$1MY\$1TEMP\$1SCHEMA()
  + PG\$1POSTMASTER\$1START\$1TIME()
  + PG\$1TRIGGER\$1DEPTH()
  + SHOW VERSION()
+ Fonctions de recherche de texte et opérateurs
+ Fonctions de transaction IDs et d'instantanés
+ Fonctions déclencheur
+ Fonctions XML

# Utilisation de SQL
<a name="c_SQL_reference"></a>

**Topics**
+ [Conventions du guide de référence SQL](c_SQL_reference_conventions.md)
+ [Éléments de base](c_Basic_elements.md)
+ [Expressions](r_expressions.md)
+ [Conditions](r_conditions.md)

Le langage SQL se compose de commandes et de fonctions que vous utilisez pour travailler avec les bases de données et les objets de base de données. Il applique également les règles concernant l’utilisation des types de données, les expressions et les littéraux.

# Conventions du guide de référence SQL
<a name="c_SQL_reference_conventions"></a>

Cette section explique les conventions utilisées pour écrire la syntaxe des expressions, commandes et fonctions SQL décrites dans la section de référence SQL. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/c_SQL_reference_conventions.html)

# Éléments de base
<a name="c_Basic_elements"></a>

**Topics**
+ [Noms et identificateurs](r_names.md)
+ [Littéraux](r_Literals.md)
+ [Valeurs null](r_Nulls.md)
+ [Types de données](c_Supported_data_types.md)
+ [Séquences de classement](c_collation_sequences.md)

Cette section concerne les règles d’utilisation des noms d’objet de base de données, des littéraux, des valeurs null et des types de données. 

# Noms et identificateurs
<a name="r_names"></a>

Les noms identifient les objets de base de données, y compris les tables et les colonnes, ainsi que les utilisateurs et les mots de passe. Les termes *nom* et *identificateur* peuvent être utilisés indifféremment. Il existe deux types d’identificateurs, les identificateurs standard et les identificateurs entre guillemets ou délimités. Les identificateurs doivent comporter uniquement des caractères imprimables UTF-8. Les lettres ASCII des identificateurs standard et délimités sont insensibles à la casse et sont converties en minuscules dans la base de données. Dans les résultats des requêtes, les noms de colonne sont retournés en minuscules par défaut. Pour retourner les noms de colonne en majuscules, définissez le paramètre de configuration [describe\$1field\$1name\$1in\$1uppercase](r_describe_field_name_in_uppercase.md) sur la valeur **true**.

## Identificateurs standard
<a name="r_names-standard-identifiers"></a>

Les identificateurs SQL standard se conforment à un ensemble de règles et doivent : 
+ Commencer par un caractère alphabétique ou de soulignement ASCII codé sur un octet, ou un caractère multioctet UTF-8 d’une longueur de deux ou quatre octets.
+ Les caractères suivants peuvent être des caractères alphanumériques ou de soulignement ASCII codés sur un octet, des symboles dollar, ou des caractères multioctets UTF-8 d’une longueur de deux ou quatre octets.
+ Avoir une longueur comprise entre 1 et 127 octets, sans les guillemets pour les identifiants délimités. 
+ Ne contenir ni guillemets ni espaces. 
+ Ne pas être un mot réservé SQL.

## Identificateurs délimités
<a name="r_names-delimited-identifiers"></a>

Les identificateurs délimités (aussi appelés identificateurs entre guillemets) commencent et se terminent par des guillemets ("). Si vous utilisez un identificateur délimité, vous devez utiliser les guillemets pour chaque référence à cet objet. L’identifiant peut contenir tous les caractères imprimables UTF-8 standard autres que les guillemets droits eux-mêmes. Par conséquent, vous pouvez créer des noms de colonne ou de table qui incluent tout caractère autre que les caractères illégaux, tels que les espaces ou le symbole pourcentage (%).

Les lettres ASCII des identificateurs délimités sont insensibles à la casse et sont converties en minuscules. Pour utiliser des guillemets droits dans une chaîne de caractères, vous devez les faire précéder d’un autre caractère de guillemets droits. 

## Identifiants sensibles à la casse
<a name="r_names-case-sensitive-identifiers"></a>

Les identifiants sensibles à la casse (également appelés identifiants en casse mixte) peuvent contenir des lettres majuscules et minuscules. Pour utiliser des identifiants sensibles à la casse, vous pouvez définir la configuration `enable_case_sensitive_identifier` sur `true`. Vous pouvez définir cette configuration pour le cluster ou une session. Pour plus d’informations, consultez [Valeurs des paramètres par défaut](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html#default-param-group-values) dans le *Guide de gestion Amazon Redshift* et [enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md). 

## Nom des colonnes système
<a name="r_names-system-column-names"></a>

Les noms de colonnes système PostgreSQL suivants ne peuvent pas être utilisés en tant que noms de colonne définis par l’utilisateur. Pour de plus amples informations, veuillez consulter [https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html](https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html).
+ `oid`
+ `tableoid`
+ `xmin`
+ `cmin`
+ `xmax`
+ `cmax`
+ `ctid`

## Exemples
<a name="r_names-examples"></a>

Ce tableau présente des exemples d’identificateurs délimités, le résultat obtenu et une explication : 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_names.html)

Pour créer un groupe nommé table avec une colonne nommée this "is it" : 

```
create table "group" (
"This ""IS IT""" char(10));
```

Les requêtes suivantes retournent le même résultat : 

```
select "This ""IS IT"""
from "group";

this "is it"
--------------
(0 rows)
```

```
select "this ""is it"""
from "group";

this "is it"
--------------
(0 rows)
```

La syntaxe complète suivante `table.column` renvoie aussi le même résultat : 

```
select "group"."this ""is it"""
from "group";

this "is it"
--------------
(0 rows)
```

La commande CREATE TABLE suivante crée une table avec une barre oblique dans un nom de colonne : 

```
create table if not exists city_slash_id(
                  "city/id" integer not null,
                  state char(2) not null);
```

# Littéraux
<a name="r_Literals"></a>

Un littéral ou une constante est une valeur de données fixe, composée d’une séquence de caractères ou d’une constante numérique. Amazon Redshift prend en charge plusieurs types de littéraux, notamment :
+ Les littéraux numériques pour les entiers, les décimaux et les nombres à virgule flottante. Pour plus d’informations, consultez [Littéraux entiers et à virgule flottante](r_numeric_literals201.md).
+ Les littéraux caractère, également appelés chaînes, chaînes de caractères ou constantes caractère
+ Les littéraux de type datetime et interval utilisés avec les types de données datetime. Pour plus d’informations, consultez [Littéraux de type date, heure et horodatage](r_Date_and_time_literals.md) et [Types de données et littéraux interval](r_interval_data_types.md).

# Valeurs null
<a name="r_Nulls"></a>

Si une colonne d’une ligne est manquante, inconnue ou non applicable, sa valeur est null ou est dite contenir une valeur null. Les valeurs null peuvent apparaître dans les champs de n’importe quel type de données qui n’est pas limité par les contraintes de clé primaire ou NOT NULL. Une valeur null n’est pas équivalente à la valeur zéro ou à une chaîne vide.

Toute expression arithmétique contenant une valeur null est toujours analysée comme null. Tous les opérateurs retournent une valeur null en cas d’argument ou d’opérande null.

Pour tester les valeurs null, utilisez les conditions de comparaison IS NULL et IS NOT NULL. Comme null représente une absence de données, une valeur null n’est pas égale à une autre valeur, null ou pas.

# Types de données
<a name="c_Supported_data_types"></a>

**Topics**
+ [Caractères multioctets](#c_Supported_data_types-multi-byte-characters)
+ [Types numériques](r_Numeric_types201.md)
+ [Types caractères](r_Character_types.md)
+ [Types datetime](r_Datetime_types.md)
+ [Type Boolean](r_Boolean_type.md)
+ [Type HLLSKETCH](r_HLLSKTECH_type.md)
+ [Type SUPER](r_SUPER_type.md)
+ [Type VARBYTE](r_VARBYTE_type.md)
+ [Compatibilité et conversion de types](#r_Type_conversion)

Chaque valeur qu’Amazon Redshift stocke ou extrait possède un type de données avec un ensemble fixe de propriétés associées. Les types de données sont déclarés lorsque les tables sont créées. Un type de données contraint l’ensemble des valeurs qu’une colonne ou un argument peut contenir. 

Le tableau suivant répertorie les types de données que vous pouvez utiliser dans les tables Amazon Redshift. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/c_Supported_data_types.html)

**Note**  
Pour plus d’informations sur les types de données non pris en charge, tels que "char" (notez que char est placé entre guillemets), consultez [Types de données PostgreSQL non pris en charge](c_unsupported-postgresql-datatypes.md).

## Caractères multioctets
<a name="c_Supported_data_types-multi-byte-characters"></a>

Le type de données VARCHAR prend en charge les caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Les caractères de cinq octets ou plus ne sont pas pris en charge. Pour calculer la taille d’une colonne VARCHAR qui contient des caractères multioctets, multipliez le nombre de caractères par le nombre d’octets par caractère. Par exemple, si une chaîne possède quatre caractères chinois et que chaque caractère est long de trois octets, vous avez besoin d’une colonne VARCHAR(12) pour stocker la chaîne.

Le type de données VARCHAR ne prend pas en charge les points de code UTF-8 non valides suivants : 

`0xD800 – 0xDFFF` (Séquences d’octets :`ED A0 80` – `ED BF BF`)

Le type de données CHAR ne prend pas en charge les caractères multioctets.

# Types numériques
<a name="r_Numeric_types201"></a>

**Topics**
+ [Types d’entier](#r_Numeric_types201-integer-types)
+ [Type DECIMAL ou NUMERIC](#r_Numeric_types201-decimal-or-numeric-type)
+ [Notes sur l’utilisation des colonnes DECIMAL ou NUMERIC 128 bits](#r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns)
+ [Types à virgule flottante](#r_Numeric_types201-floating-point-types)
+ [Calculs avec les valeurs numériques](r_numeric_computations201.md)
+ [Littéraux entiers et à virgule flottante](r_numeric_literals201.md)
+ [Exemples avec les types numériques](r_Examples_with_numeric_types201.md)

Les types de données numériques incluent les entiers, les décimaux et les nombres à virgule flottante. 

## Types d’entier
<a name="r_Numeric_types201-integer-types"></a>

Utilisez les types de données SMALLINT, INTEGER et BIGINTpour stocker les nombres entiers de différentes plages. Vous ne pouvez pas stocker de valeurs en dehors de la plage autorisée pour chaque type. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Numeric_types201.html)

## Type DECIMAL ou NUMERIC
<a name="r_Numeric_types201-decimal-or-numeric-type"></a>

Utilisez le type de données DECIMAL ou NUMERIC pour stocker les valeurs avec une *précision définie par l’utilisateur*. Les mots clés DECIMAL et NUMERIC sont interchangeables. Dans ce document, *decimal* est le terme privilégié pour ce type de données. Le terme *numeric* (numérique) est utilisé de façon générique pour faire référence aux types de données integer, decimal et floating-point (entier, décimal et virgule flottante). 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Numeric_types201.html)

Définissez une colonne DECIMAL dans une table en spécifiant une *precision (précision)* et une *scale (échelle)* : 

```
decimal(precision, scale)
```

 *precision*   
Le nombre total de chiffres significatifs dans la valeur entière : le nombre de chiffres de chaque côté de la virgule. Par exemple, le nombre `48.2891` a une précision de 6 et une échelle de 4. La précision par défaut, si elle n’est pas spécifiée, est de 18. La précision maximale est de 38.  
 Si le nombre de chiffres à gauche de la virgule dans une valeur d’entrée dépasse la précision de la colonne moins son échelle, la valeur ne peut pas être copiée dans la colonne (ou insérée ou mise à jour). Cette règle s’applique à toute valeur qui se trouve en dehors de la plage de la définition de la colonne. Par exemple, la plage autorisée de valeurs pour une colonne `numeric(5,2)` s’étend de `-999.99` à `999.99`. 

 *échelle*   
Le nombre de chiffres décimaux de la partie fractionnaire de la valeur, à droite de la virgule. Les entiers possèdent une échelle égale à zéro. Dans une spécification de colonne, la valeur de l’échelle doit être inférieure ou égale à la valeur de la précision. L’échelle par défaut, si elle n’est pas spécifiée, est de 0. L’échelle maximale est de 37.  
Si l’échelle d’une valeur d’entrée chargée dans une table est supérieure à l’échelle de la colonne, la valeur est arrondie à l’échelle spécifiée. Par exemple, la colonne PRICEPAID de la table SALES est une colonne DECIMAL(8,2). Si une valeur DECIMAL(8,4) est insérée dans la colonne PRICEPAID, la valeur est arrondie à une échelle de 2.   

```
insert into sales
values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null);

select pricepaid, salesid from sales where salesid=0;

pricepaid | salesid
-----------+---------
4323.90 |       0
(1 row)
```
 Cependant, les résultats de conversions explicites de valeurs sélectionnées dans les tables ne sont pas arrondis.

**Note**  
La valeur positive maximale que vous pouvez insérer dans une colonne DECIMAL(19,0) est `9223372036854775807` (263 -1). La valeur négative maximale est `-9223372036854775808`. Par exemple, une tentative d’insérer la valeur `9999999999999999999` (19 fois le chiffre neuf) entraîne une erreur de dépassement de capacité. Quelque soit le placement de la virgule décimale, la plus grande chaîne qu’Amazon Redshift puisse représenter comme nombre DECIMAL est `9223372036854775807`. Par exemple, la plus grande valeur que vous puissiez charger dans une colonne DECIMAL(19,18) est `9.223372036854775807`.  
Ces règles sont dues au fait que les valeurs de type DECIMAL d’une précision de 19 chiffres significatifs ou moins sont stockées en interne sous forme d’entiers de 8 octets, tandis que celles de type DECIMAL d’une précision de 20 à 38 chiffres significatifs sont stockées sous forme d’entiers de 16 octets. 

## Notes sur l’utilisation des colonnes DECIMAL ou NUMERIC 128 bits
<a name="r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

N’attribuez pas de façon arbitraire une précision maximale aux colonnes DECIMAL, sauf si vous avez la certitude que votre application a besoin de cette précision. Les valeurs 128 bits utilisent deux fois plus d’espace disque que les valeurs 64 bits et peuvent ralentir le temps d’exécution des requêtes. 

## Types à virgule flottante
<a name="r_Numeric_types201-floating-point-types"></a>

Utilisez les types de données REAL et DOUBLE PRECISION pour stocker les valeurs numériques avec une *précision variable*. Ces types sont des types *inexacts*, ce qui signifie que certaines valeurs sont stockées comme approximations, de telle sorte que le stockage et le retour d’une valeur spécifique peuvent se traduire par de légers écarts. Si vous avez besoin d’un stockage et d’un calcul exacts (pour des montants monétaires, par exemple), utilisez le type de données DECIMAL.

REAL représente le format à virgule flottante simple précision, conformément à la norme IEEE 754 pour l’arithmétique binaire à virgule flottante. Il a une précision d’environ 6 chiffres et une plage d’environ 1E-37 à 1E\$137. Vous pouvez également spécifier ce type de données sous la forme FLOAT4.

DOUBLE PRECISION représente le format de virgule flottante en double précision, conformément à la norme IEEE 754 pour l’arithmétique binaire en virgule flottante. Il a une précision d’environ 15 chiffres et une plage d’environ 1E-307 à 1E\$1308. Vous pouvez également spécifier ce type de données comme FLOAT ou FLOAT8.

Outre les valeurs numériques ordinaires, les types à virgule flottante possèdent plusieurs valeurs spéciales. Quand vous utilisez ces valeurs dans SQL, entourez-les de guillemets simples :
+ `NaN` – not-a-number
+ `Infinity` : infini
+ `-Infinity` : infini négatif

Par exemple, pour insérer not-a-number dans une colonne `day_charge` de table, `customer_activity` exécutez le code SQL suivant :

```
insert into customer_activity(day_charge) values('NaN');
```

# Calculs avec les valeurs numériques
<a name="r_numeric_computations201"></a>

Dans ce contexte, le terme *calcul* fait référence aux opérations mathématiques binaires : addition, soustraction, multiplication et division. Cette section décrit les types de retour attendus pour ces opérations, ainsi que la formule spécifique appliquée pour déterminer la précision et l’échelle lorsque les types de données DECIMAL sont impliqués. 

Lorsque des valeurs numériques sont calculées pendant le traitement des requêtes, vous pouvez rencontrer des cas où le calcul est impossible et où la requête renvoie une erreur de dépassement de capacité numérique. Vous pouvez également rencontrer des cas où l’échelle des valeurs calculées varie ou est inattendue. Pour certaines opérations, vous pouvez utiliser un transtypage explicite (promotion de type) ou des paramètres de configuration Amazon Redshift pour contourner ces problèmes. 

Pour plus d’informations sur les résultats de calculs similaires avec les fonctions SQL, consultez [Fonctions d’agrégation](c_Aggregate_Functions.md). 

## Types de retour pour les calculs
<a name="r_numeric_computations201-return-types-for-computations"></a>

Compte tenu de l’ensemble des types de données numériques pris en charge par Amazon Redshift, le tableau suivant présente les types de retour attendus pour les opérations d’addition, de soustraction, de multiplication et de division. La première colonne sur la gauche du tableau représente le premier opérande dans le calcul et la ligne du haut le second opérande. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_numeric_computations201.html)

## Précision et échelle des résultats DECIMAL calculés
<a name="r_numeric_computations201-precision-and-scale-of-computed-decimal-results"></a>

Le tableau suivant résume les règles de calcul de la précision et de l’échelle obtenues lorsque les opérations mathématiques retournent des résultats DECIMAL. Dans cette table, `p1` et `s1` représentent la précision et l’échelle du première opérande d’un calcul, tandis que `p2` et `s2` représentent la précision et l’échelle du second opérande. (Quels que soient les calculs, la précision maximale du résultat est de 38 et l’échelle maximale du résultat de 38 également.) 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_numeric_computations201.html)

Par exemple, les colonnes PRICEPAID et COMMISSION de la table SALES sont toutes deux des colonnes DECIMAL(8,2). Si vous divisez PRICEPAID par COMMISSION (ou inversement), la formule est appliquée comme suit : 

```
Precision = 8-2 + 2 + max(4,2+8-2+1)
= 6 + 2 + 9 = 17

Scale = max(4,2+8-2+1) = 9

Result = DECIMAL(17,9)
```

Le calcul suivant constitue la règle générale pour le calcul de la précision et de l’échelle obtenues dans le cas des opérations effectuées sur les valeurs DECIMAL avec les opérateurs définis tels que UNION, INTERSECT et EXCEPT, ou les fonctions comme COALESCE et DECODE : 

```
Scale = max(s1,s2)
Precision = min(max(p1-s1,p2-s2)+scale,19)
```

Par exemple, une DEC1 table avec une colonne DECIMAL (7,2) est jointe à une DEC2 table avec une colonne DECIMAL (15,3) pour créer une table. DEC3 Le schéma de DEC3 montre que la colonne devient une colonne NUMERIC (15,3). 

```
create table dec3 as select * from dec1 union select * from dec2;
```

Résultat 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'dec3';

column |     type      | encoding | distkey | sortkey 
-------+---------------+----------+---------+---------
c1     | numeric(15,3) | none     | f       | 0
```

Dans l’exemple ci-dessus, la formule est appliquée comme suit : 

```
Precision = min(max(7-2,15-3) + max(2,3), 19)
= 12 + 3 = 15

Scale = max(2,3) = 3

Result = DECIMAL(15,3)
```

## Remarques sur les opérations de division
<a name="r_numeric_computations201-notes-on-division-operations"></a>

Pour les opérations de division, divide-by-zero les conditions renvoient des erreurs. 

La limite d’échelle de 100 est appliquée après le calcul de la précision et de l’échelle. Si l’échelle de résultat calculée est supérieure à 100, les résultats de la division sont mis à l’échelle comme suit :
+ Précision = ` precision - (scale - max_scale)` 
+ Évolutivité = ` max_scale ` 

Si la précision calculée est supérieure à la précision maximale (38), la précision est réduite à 38, et l’échelle devient le résultat de : `max((38 + scale - precision), min(4, 100))` 

## Conditions de dépassement de capacité
<a name="r_numeric_computations201-overflow-conditions"></a>

Le dépassement de capacité est contrôlé pour tous les calculs numériques. Les données DECIMAL avec une précision de 19 ou moins sont stockées en tant qu’entiers 64 bits. Les données DECIMAL avec une précision supérieure à 19 sont stockées sous forme d’entiers 128 bits. La précision maximale de toutes les valeurs DECIMAL est 38 et l’échelle maximale 37. Les erreurs de dépassement de capacité se produisent quand une valeur dépasse ces limites, qui s’appliquent aux jeux de résultats intermédiaires et finaux : 
+ Le transtypage explicite se traduit par des erreurs de dépassement de capacité à l’exécution lorsque les valeurs de données spécifiques ne correspondent pas à la précision ou à l’échelle spécifiée par la fonction cast. Par exemple, vous ne pouvez pas effectuer une conversion de type de toutes les valeurs de la colonne PRICEPAID de la table SALES (une colonne DECIMAL(8,2)) et retourner un résultat DECIMAL(7,3) : 

  ```
  select pricepaid::decimal(7,3) from sales;
  ERROR:  Numeric data overflow (result precision)
  ```

  Cette erreur se produit, parce que *certaines* des valeurs les plus grandes de la colonne PRICEPAID ne peuvent pas être converties.
+ Les opérations de multiplication produisent des résultats dans lesquels l’échelle du résultat est la somme des échelles de chaque opérande. Si les deux opérandes ont une échelle de 4, par exemple, l’échelle du résultat est 8, ce qui ne laisse que 10 chiffres à gauche de la virgule. Par conséquent, il est relativement facile de se trouver en situation de dépassement de capacité lors de la multiplication de deux grands nombres ayant une échelle significative.

  L’exemple suivant entraîne une erreur de dépassement de capacité.

  ```
  SELECT CAST(1 AS DECIMAL(38, 20)) * CAST(10 AS DECIMAL(38, 20));
  ERROR: 128 bit numeric data overflow (multiplication)
  ```

  Vous pouvez contourner l’erreur de dépassement de capacité en utilisant la division au lieu de la multiplication. Utilisez l’exemple suivant pour diviser par 1 divisé par le diviseur d’origine.

  ```
  SELECT CAST(1 AS DECIMAL(38, 20)) / (1 / CAST(10 AS DECIMAL(38, 20)));
  +----------+
  | ?column? |
  +----------+
  | 10       |
  +----------+
  ```

## Calculs numériques avec les types INTEGER et DECIMAL
<a name="r_numeric_computations201-numeric-calculations-with-integer-and-decimal-types"></a>

Lorsqu’un des opérandes d’un calcul est de type de données INTEGER et que l’autre opérande est DECIMAL, l’opérande INTEGER est implicitement converti en DECIMAL : 
+ INT2 (SMALLINT) est converti en DECIMAL (5,0) 
+ INT4 (INTEGER) est converti en DECIMAL (10,0) 
+ INT8 (BIGINT) est converti en DECIMAL (19,0) 

Par exemple, si vous multipliez SALES.COMMISSION, colonne DECIMAL(8,2) et SALES.QTYSOLD, colonne SMALLINT, le calcul est converti comme suit : 

```
DECIMAL(8,2) * DECIMAL(5,0)
```

# Littéraux entiers et à virgule flottante
<a name="r_numeric_literals201"></a>

Les littéraux ou constantes qui représentent des nombres peuvent être des entiers ou à virgule flottante.

## Littéraux entiers
<a name="r_numeric_literals201-integer-literals"></a>

Une constante entière est une séquence des chiffres 0-9, avec un signe positif (\$1) ou négatif (-) facultatif devant les chiffres.

## Syntaxe
<a name="r_numeric_literals201-synopsis"></a>

```
[ + | - ] digit ...
```

## Exemples
<a name="r_numeric_literals201-examples"></a>

Les entiers valides incluent les éléments suivants :

```
23
-555
+17
```

## Littéraux à virgule flottante
<a name="r_numeric_literals201-floating-point-literals"></a>

Les littéraux à virgule flottante (également appelés littéraux décimaux, numériques ou fractionnaires) sont des séquences de chiffres qui peuvent inclure une virgule décimale et, le cas échéant, le symbole exposant (e).

## Syntaxe
<a name="r_numeric_literals201-synopsis2"></a>

```
[ + | - ] digit ... [ . ] [ digit ...]
[ e | E [ + | - ] digit ... ]
```

## Arguments
<a name="r_numeric_literals201-arguments"></a>

e \$1 E  
e ou E indique que le nombre est spécifié en notation scientifique.

## Exemples
<a name="r_numeric_literals201-examples2"></a>

Les littéraux à virgule flottante incluent les éléments suivants :

```
3.14159
-37.
2.0e19
-2E-19
```

# Exemples avec les types numériques
<a name="r_Examples_with_numeric_types201"></a>



## Instruction CREATE TABLE
<a name="r_Examples_with_numeric_types201-create-table-statement"></a>

L’instruction CREATE TABLE suivante illustre la déclaration de différents types de données numériques :

```
create table film (
film_id integer,
language_id smallint,
original_language_id smallint,
rental_duration smallint default 3,
rental_rate numeric(4,2) default 4.99,
length smallint,
replacement_cost real default 25.00);
```

## Tentative d’insérer un entier qui est hors de portée
<a name="r_Examples_with_numeric_types201-attempt-to-insert-an-integer-that-is-out-of-range"></a>

L’exemple suivant tente d’insérer la valeur 33 000 dans une colonne SMALLINT.

```
insert into film(language_id) values(33000);
```

La plage valide pour SMALLINT étant -32768 à \$132767, Amazon Redshift retourne une erreur.

```
An error occurred when executing the SQL command:
insert into film(language_id) values(33000)

ERROR: smallint out of range [SQL State=22003]
```

## Insérer une valeur décimale dans une colonne de type entier
<a name="r_Examples_with_numeric_types201-insert-a-decimal-value-into-an-integer-column"></a>

L’exemple suivant insère la valeur décimale a dans une colonne INT.

```
insert into film(language_id) values(1.5);
```

Cette valeur est insérée, mais arrondie à la valeur entière 2.

## Insertion réussie d’une valeur décimale parce que son échelle est arrondie
<a name="r_Examples_with_numeric_types201-insert-a-decimal-that-succeeds-because-its-scale-is-rounded"></a>

L’exemple suivant insère une valeur décimale ayant une plus grande précision que la colonne.

```
insert into film(rental_rate) values(35.512);
```

Dans ce cas, la valeur `35.51` est insérée dans la colonne.

## Tentative d’insertion d’une valeur décimale qui est hors de portée
<a name="r_Examples_with_numeric_types201-attempt-to-insert-a-decimal-value-that-is-out-of-range"></a>

Dans ce cas, la valeur `350.10` est hors de portée. Le nombre de chiffres pour les valeurs de colonnes DECIMAL est égal à la précision de la colonne moins son échelle (4 moins 2 pour la colonne RENTAL\$1RATE). Autrement dit, la plage autorisée pour une colonne `DECIMAL(4,2)` s’étend de `-99.99` à `99.99`.

```
insert into film(rental_rate) values (350.10);
ERROR:  numeric field overflow
DETAIL:  The absolute value is greater than or equal to 10^2 for field with precision 4, scale 2.
```

## Insérer des valeurs de précision variable dans une colonne REAL
<a name="r_Examples_with_numeric_types201-insert-variable-precision-values-into-a-real-column"></a>

L’exemple suivant insère des valeurs de précision variable dans une colonne REAL.

```
insert into film(replacement_cost) values(1999999.99);

insert into film(replacement_cost) values(1999.99);

select replacement_cost from film;

+------------------+
| replacement_cost |
+------------------+
| 2000000          |
| 1999.99          |
+------------------+
```

La valeur `1999999.99` est convertie en `2000000` pour satisfaire aux exigences de précision pour la colonne `REAL`. La valeur `1999.99` est chargée en l’état.

# Types caractères
<a name="r_Character_types"></a>

**Topics**
+ [Stockage et plages](#r_Character_types-storage-and-ranges)
+ [CHAR ou CHARACTER](#r_Character_types-char-or-character)
+ [VARCHAR ou CHARACTER VARYING](#r_Character_types-varchar-or-character-varying)
+ [Types NCHAR et NVARCHAR](#r_Character_types-nchar-and-nvarchar-types)
+ [Types TEXT et BPCHAR](#r_Character_types-text-and-bpchar-types)
+ [Signification des blancs de fin](#r_Character_types-significance-of-trailing-blanks)
+ [Exemples avec les types caractères](r_Examples_with_character_types.md)

Les types de données caractères incluent CHAR (caractère) et VARCHAR (caractère variable). 

## Stockage et plages
<a name="r_Character_types-storage-and-ranges"></a>

Les types de données CHAR et VARCHAR sont définis en termes d’octets, pas de caractères. Comme une colonne CHAR ne peut contenir que des caractères d’un octet, une colonne CHAR(10) peut contenir une chaîne d’une longueur maximale de 10 octets. Une donnée VARCHAR peut contenir des caractères multioctets, jusqu’à un maximum de quatre octets par caractère. Par exemple, une colonne VARCHAR(12) peut contenir 12 caractères codés sur un octet, 6 caractères codés sur deux octets, 4 caractères codés sur trois octets ou 3 caractères codés sur quatre octets. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Character_types.html)

**Note**  
La syntaxe CREATE TABLE prend en charge le mot clé MAX pour les types de données character. Par exemple :  

```
create table test(col1 varchar(max));
```
Pour CHAR, MAX définit la largeur de colonne comme étant de 4 096 octets.  
Pour VARCHAR, MAX définit la largeur de colonne à 65 535 octets dans les instructions CREATE TABLE. Pour les opérations en mémoire, VARCHAR (MAX) prend en charge jusqu'à 16 000 000 octets.

## CHAR ou CHARACTER
<a name="r_Character_types-char-or-character"></a>

Utilisez une colonne CHAR ou CHARACTER pour stocker les chaînes de longueur fixe. Ces chaînes étant remplies de blancs, une colonne CHAR(10) occupe toujours 10 octets de stockage. 

```
char(10)
```

 Une colonne CHAR sans spécification de longueur se traduit par une colonne CHAR(1). 

## VARCHAR ou CHARACTER VARYING
<a name="r_Character_types-varchar-or-character-varying"></a>

Utilisez une colonne VARCHAR ou CHARACTER VARYING pour stocker des chaînes de longueur variable avec une limite fixe. Comme ces chaînes ne sont pas remplies avec des blancs, une colonne VARCHAR(120) se compose d’un maximum de 120 caractères codés sur un octet, de 60 caractères codés sur deux octets, de 40 caractères codés sur trois octets ou de 30 caractères codés sur quatre octets.

```
varchar(120)
```

Si vous utilisez le type de données VARCHAR sans spécification de la longueur dans une instruction CREATE TABLE, la longueur par défaut est 256.

[Fonctions de chaîne](String_functions_header.md)supporte désormais jusqu'à 16 000 000 octets. Par exemple, la sortie de la fonction CONCAT était auparavant limitée à 65 535 octets, mais prend désormais en charge jusqu'à 16 000 000 octets.

```
SELECT LEN(CONCAT(REPEAT('A', 5000000), REPEAT('B', 5000000))) AS total_length;

 total_length
--------------
     10000000
```

## Types NCHAR et NVARCHAR
<a name="r_Character_types-nchar-and-nvarchar-types"></a>

Vous pouvez créer des colonnes avec les types NCHAR et NVARCHAR (aussi appelés types NATIONAL CHARACTER et NATIONAL CHARACTER VARYING). Ces types sont convertis en types CHAR et VARCHAR, respectivement, et sont stockés dans le nombre d’octets spécifié. 

Une colonne NCHAR sans spécification de longueur est convertie en colonne CHAR(1). 

Une colonne NVARCHAR sans spécification de longueur est convertie en colonne VARCHAR(256). 

## Types TEXT et BPCHAR
<a name="r_Character_types-text-and-bpchar-types"></a>

Vous pouvez créer une table Amazon Redshift avec une colonne TEXT, mais celle-ci est convertie en une colonne VARCHAR(256) qui accepte des valeurs de longueur variable avec un maximum de 256 caractères. 

Vous pouvez créer une colonne Amazon Redshift avec un type BPCHAR (blank-padded character), qu’Amazon Redshift convertit en une colonne CHAR(256) de longueur fixe. 

## Signification des blancs de fin
<a name="r_Character_types-significance-of-trailing-blanks"></a>

Les types de données CHAR et VARCHAR stockent les chaînes de longueur maximale de *n* octets. Une tentative de stocker une chaîne plus longue en une colonne de l’un de ces types entraîne une erreur, sauf si les caractères supplémentaires sont tous des espaces (des blancs), auquel cas la chaîne est tronquée à la longueur maximale. Si la chaîne est plus courte que la longueur maximale, les valeurs CHAR sont remplies de blancs, mais les valeurs VARCHAR stockent la chaîne sans blancs.

Les blancs de fin des valeurs CHAR sont toujours insignifiants sur le plan sémantique. Ils sont ignorés lorsque vous comparez deux valeurs CHAR, ne sont pas inclus dans les calculs LENGTH et sont supprimés lorsque vous convertissez une valeur CHAR en un autre type de chaîne. 

Les espaces de fin des valeurs VARCHAR et CHAR sont traités comme sans importance du point de vue sémantique lorsque les valeurs sont comparées.

Les longueurs de calcul retournent la longueur des chaînes de caractères VARCHAR avec les espaces de fin inclus dans la longueur. Les blancs de fin ne comptent pas dans la longueur des chaînes de caractères de longueur fixe.

# Exemples avec les types caractères
<a name="r_Examples_with_character_types"></a>

## Instruction CREATE TABLE
<a name="r_Examples_with_character_types-create-table-statement"></a>

L’instruction CREATE TABLE suivante illustre l’utilisation de types de données VARCHAR et CHAR : 

```
create table address(
address_id integer,
address1 varchar(100),
address2 varchar(50),
district varchar(20),
city_name char(20),
state char(2),
postal_code char(5)
);
```

Les exemples suivants s’appuient sur cette table. 

## Blancs de fin dans les chaînes de caractères de longueur variable
<a name="r_Examples_with_character_types-trailing-blanks-in-variable-length-character-strings"></a>

Comme il ADDRESS1 s'agit d'une colonne VARCHAR, les derniers blancs de la deuxième adresse insérée sont sémantiquement insignifiants. En d’autres termes, les deux adresses insérées *correspondent*. 

```
insert into address(address1) values('9516 Magnolia Boulevard');

insert into address(address1) values('9516 Magnolia Boulevard  ');
```

```
select count(*) from address
where address1='9516 Magnolia Boulevard';

count
-------
2
(1 row)
```

Si la ADDRESS1 colonne était une colonne CHAR et que les mêmes valeurs étaient insérées, la requête COUNT (\$1) reconnaîtrait les chaînes de caractères comme étant identiques et renverrait les résultats`2`.

## Résultats de la fonction LENGTH
<a name="r_Examples_with_character_types-results-of-the-length-function"></a>

La fonction LENGTH reconnaît les espaces de fin dans les colonnes VARCHAR : 

```
select length(address1) from address;

length
--------
23
25
(2 rows)
```

La valeur `Augusta` dans la colonne CITY\$1NAME, qui est une colonne CHAR, renvoie toujours une longueur de 7 caractères, indépendamment des espaces de fin de la chaîne en entrée. 

## Valeurs qui dépassent la longueur de la colonne
<a name="r_Examples_with_character_types-values-that-exceed-the-length-of-the-column"></a>

Les chaînes de caractères ne sont pas tronquées pour s’adapter à la largeur déclarée de la colonne : 

```
insert into address(city_name) values('City of South San Francisco');
ERROR: value too long for type character(20)
```

Une solution pour contourner ce problème consiste à convertir la valeur en la taille de la colonne : 

```
insert into address(city_name)
values('City of South San Francisco'::char(20));
```

Dans ce cas, les 20 premiers caractères de la chaîne (`City of South San Fr`) sont chargés dans la colonne. 

# Types datetime
<a name="r_Datetime_types"></a>

**Topics**
+ [Stockage et plages](#r_Datetime_types-storage-and-ranges)
+ [DATE](#r_Datetime_types-date)
+ [TIME](#r_Datetime_types-time)
+ [TIMETZ](#r_Datetime_types-timetz)
+ [TIMESTAMP](#r_Datetime_types-timestamp)
+ [TIMESTAMPTZ](#r_Datetime_types-timestamptz)
+ [Exemples avec les types datetime](r_Examples_with_datetime_types.md)
+ [Littéraux de type date, heure et horodatage](r_Date_and_time_literals.md)
+ [Types de données et littéraux interval](r_interval_data_types.md)

Les types de données datetime incluent DATE, TIMESTAMP et TIMESTAMPTZ.

## Stockage et plages
<a name="r_Datetime_types-storage-and-ranges"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Datetime_types.html)

## DATE
<a name="r_Datetime_types-date"></a>

Utilisez le type de données DATE pour stocker les dates calendaires simples sans horodatage.

## TIME
<a name="r_Datetime_types-time"></a>

TIME est un alias de TIME WITHOUT TIME ZONE.

Utilisez le type de données TIME pour stocker l’heure de la journée. 

Les colonnes TIME stockent des valeurs avec un maximum de six digits de précision pour les secondes fractionnées.

Par défaut, les valeurs TIME sont en temps universel coordonné (UTC) dans les tables utilisateur et les tables système Amazon Redshift. 

## TIMETZ
<a name="r_Datetime_types-timetz"></a>

TIMETZ est un alias de TIMES WITH TIME ZONE.

Utilisez le type de données TIMETZ pour stocker l’heure de la journée avec un fuseau horaire. 

Les colonnes TIMETZ stockent des valeurs avec un maximum de six digits de précision pour les secondes fractionnées.

Par défaut, les valeurs TIPZ sont UTC dans les tables utilisateur et dans les tables système Amazon Redshift. 

## TIMESTAMP
<a name="r_Datetime_types-timestamp"></a>

TIMESTAMP est un alias de TIMESTAMP WITHOUT TIME ZONE.

Utilisez le type de données TIMESTAMP pour stocker des valeurs d’horodatage complètes incluant la date et l’heure de la journée. 

Les colonnes TIMESTAMP stockent des valeurs avec un maximum de six digits de précision pour les secondes fractionnées.

Les colonnes TIMESTAMP stockent des valeurs avec un maximum de six digits de précision pour les secondes fractionnées. Cette valeur d’horodatage complète a des valeurs par défaut (00) pour les heures, minutes et secondes manquantes. Les valeurs de fuseau horaire dans les chaînes d’entrée sont ignorées.

Par défaut, les valeurs TIMESTAMP sont UTC dans les tables utilisateur et dans les tables système Amazon Redshift. 

## TIMESTAMPTZ
<a name="r_Datetime_types-timestamptz"></a>

TIMESTAMPTZ est un alias de TIMESTAMP WITH TIME ZONE.

Utilisez le type de données TIMESTAMPTZ pour saisir des valeurs d’horodatage complètes incluant la date, l’heure de la journée et un fuseau horaire. Lorsqu’une valeur d’entrée comprend un fuseau horaire, Amazon Redshift utilise le fuseau horaire pour convertir la valeur en UTC et stocke la valeur UTC.

Pour afficher la liste des noms de fuseaux horaires pris en charge, exécutez la commande suivante. 

```
select pg_timezone_names();
```

 Pour afficher la liste des abréviations de fuseaux horaires prises en charge, exécutez la commande suivante. 

```
select pg_timezone_abbrevs();
```

Vous pouvez également trouver des informations sur les fuseaux horaires dans la [base de données des fuseaux horaires IANA](https://www.iana.org/time-zones).

Le tableau suivant présente des exemples de formats de fuseaux horaires. 


| Format | Exemple | 
| --- | --- | 
|  jj lun hh:mi:ss aaaa tz  |  17 déc 07:37:16 1997 PST   | 
|  mm/dd/yyyyhh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 PST  | 
|  mm/dd/yyyyhh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 États-Unis/Pacifique  | 
|  yyyy-mm-dd hh : mi : ss\$1/-tz  |  1997-12-17 07:37:16-08   | 
| jj.mm.aaaa hh:mi:ss tz |  17.12.1997 07:37:16.00 PST  | 

Les colonnes TIMESTAMPTZ stockent des valeurs avec un maximum de six digits de précision pour les secondes fractionnées.

Si vous insérez une date dans une colonne TIMESTAMPTZ, ou une date avec un horodatage partiel, la valeur est implicitement convertie en une valeur d’horodatage complète. Cette valeur d’horodatage complète a des valeurs par défaut (00) pour les heures, minutes et secondes manquantes.

Les valeurs TIMESTAMPTZ sont au format UTC dans les tables utilisateur.

# Exemples avec les types datetime
<a name="r_Examples_with_datetime_types"></a>

Vous trouverez ci-dessous des exemples d’utilisation des types datetime pris en charge par Amazon Redshift.

## Exemples de date
<a name="r_Examples_with_datetime_types-date-examples"></a>

Les exemples suivants insèrent des dates qui ont des formats différents et affichent le résultat. 

```
create table datetable (start_date date, end_date date);
```

```
insert into datetable values ('2008-06-01','2008-12-31');

insert into datetable values ('Jun 1,2008','20081231');
```

```
select * from datetable order by 1;

start_date |  end_date
-----------------------
2008-06-01 | 2008-12-31
2008-06-01 | 2008-12-31
```

Si vous insérez une valeur d’horodatage dans une colonne DATE, la partie temps est ignorée et seule la date est chargée.

## Exemples d’heure
<a name="r_Examples_with_datetime_types-time-examples"></a>

Les exemples suivants insèrent des valeurs TIME et TIMETZ qui n’ont pas le même format et affichent la sortie.

```
create table timetable (start_time time, end_time timetz);
```

```
insert into timetable values ('19:11:19','20:41:19 UTC');
insert into timetable values ('191119', '204119 UTC');
```

```
select * from timetable order by 1;
start_time |  end_time
------------------------
 19:11:19  | 20:41:19+00
 19:11:19  | 20:41:19+00
```

## Exemples d’horodatages
<a name="r_Examples_with_datetime_types-timestamp-examples"></a>

Si vous insérez une date dans une colonne TIMESTAMP ou TIMESTAMPTZ, l’heure par défaut est minuit. Par exemple, si vous insérez le littéral `20081231`, la valeur stockée est `2008-12-31 00:00:00`. 

Pour modifier le fuseau horaire de la session en cours, utilisez la commande [SET](r_SET.md) pour définir le paramètre de configuration [timezone](r_timezone_config.md).

L’exemple suivant insère des horodatages qui ont des formats différents et affiche le tableau qui en résulte. 

```
create table tstamp(timeofday timestamp, timeofdaytz timestamptz);

insert into tstamp values('Jun 1,2008  09:59:59', 'Jun 1,2008 09:59:59 EST' );
insert into tstamp values('Dec 31,2008 18:20','Dec 31,2008 18:20');
insert into tstamp values('Jun 1,2008  09:59:59 EST', 'Jun 1,2008 09:59:59');

SELECT * FROM tstamp;

+---------------------+------------------------+
|      timeofday      |      timeofdaytz       |
+---------------------+------------------------+
| 2008-06-01 09:59:59 | 2008-06-01 14:59:59+00 |
| 2008-12-31 18:20:00 | 2008-12-31 18:20:00+00 |
| 2008-06-01 09:59:59 | 2008-06-01 09:59:59+00 |
+---------------------+------------------------+
```

# Littéraux de type date, heure et horodatage
<a name="r_Date_and_time_literals"></a>

Vous trouverez ci-dessous les règles d’utilisation des littéraux de type date, heure et horodatage pris en charge par Amazon Redshift. 

## Dates
<a name="r_Date_and_time_literals-dates"></a>

Les dates en entrée suivantes sont toutes des exemples valides de valeurs de dates littérales pour le type de données DATE que vous pouvez charger dans des tables Amazon Redshift. La valeur `MDY DateStyle` par défaut est supposée être en vigueur. Ce mode signifie que la valeur month précède la valeur day dans les chaînes telles que `1999-01-08` et `01/02/00`. 

**Note**  
Une date ou un horodatage littéral doit être placé entre guillemets lorsque vous le chargez dans une table.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Date_and_time_literals.html)

## Times
<a name="r_Date_and_time_literals-times"></a>

Les horodatages en entrée suivants sont tous des exemples valides de valeurs d’heure littérales pour les types de données TIME et TIMETZ que vous pouvez charger dans les tables Amazon Redshift. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Date_and_time_literals.html)

## Horodatages
<a name="r_Date_and_time_literals-timestamps"></a>

Les horodatages en entrée suivants sont tous des exemples valides de valeurs d’heure littérales pour les types de données TIMESTAMP et TIMESTAMPTZ que vous pouvez charger dans les tables Amazon Redshift. Tous les littéraux de date valides peuvent être combinés avec les littéraux d’heure suivants. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Date_and_time_literals.html)

## Valeurs datetime spéciales
<a name="r_Date_and_time_literals-special-datetime-values"></a>

Les valeurs spéciales suivantes peuvent être utilisées comme littéraux datetime et comme arguments des fonctions date. Elles requièrent des apostrophes droites et sont converties en valeurs timestamp régulières lors du traitement de la requête. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Date_and_time_literals.html)

Les exemples suivants illustrent comment `now` et `today` fonctionnent avec la fonction DATEADD.

```
select dateadd(day,1,'today');

date_add
---------------------
2009-11-17 00:00:00
(1 row)

select dateadd(day,1,'now');

date_add
----------------------------
2009-11-17 10:45:32.021394
(1 row)
```

# Types de données et littéraux interval
<a name="r_interval_data_types"></a>

Vous pouvez utiliser un type de données interval pour stocker les durées dans des unités telles que `seconds`, `minutes`, `hours`, `days`, `months` et `years`. Les types de données et les littéraux interval peuvent être utilisés dans les calculs de date/heure, tels que l’ajout d’intervalles aux dates et aux horodatages, la somme des intervalles et la soustraction d’un intervalle d’une date ou d’un horodatage. Les littéraux interval peuvent être utilisés comme valeurs d’entrée pour intercaler les colonnes de type de données d’une table. 

## Syntaxe du type de données interval
<a name="r_interval_data_types-syntax"></a>

Pour spécifier un type de données interval afin de stocker une durée en années et en mois :

```
INTERVAL year_to_month_qualifier
```

Pour spécifier un type de données interval afin de stocker une durée en jours, heures, minutes et secondes :

```
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
```

## Syntaxe du littéral interval
<a name="r_interval_data_types-syntax-literal"></a>

Pour spécifier un littéral interval afin de définir une durée en années et en mois :

```
INTERVAL quoted-string year_to_month_qualifier
```

Pour spécifier un littéral interval afin de définir une durée en jours, heures, minutes et secondes :

```
INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]
```

## Arguments
<a name="r_interval_data_types-arguments"></a>

 *quoted-string*   
Spécifie une valeur numérique positive ou négative spécifiant une quantité et l’unité date/heure en tant que chaîne d’entrée. Si *quoted-string* ne contient qu’un chiffre, Amazon Redshift détermine les unités à partir de *year\$1to\$1month\$1qualifier* ou *day\$1to\$1second\$1qualifier*. Par exemple, `'23' MONTH` représente `1 year 11 months`, `'-2' DAY` représente `-2 days 0 hours 0 minutes 0.0 seconds`, `'1-2' MONTH` représente `1 year 2 months` et `'13 day 1 hour 1 minute 1.123 seconds' SECOND` représente `13 days 1 hour 1 minute 1.123 seconds`. Pour plus d’informations sur les formats de sortie d’un intervalle, consultez [Styles d’intervalle](#r_interval_data_types-interval-styles).

 *year\$1to\$1month\$1qualifier*   
Spécifie la plage de l’intervalle. Si vous utilisez un qualificatif et que vous créez un intervalle dont les unités de temps sont inférieures au qualificatif, Amazon Redshift tronque et supprime les plus petites parties de l’intervalle. Les valeurs valides pour *year\$1to\$1month\$1qualifier* sont les suivantes :  
+ `YEAR`
+ `MONTH`
+ `YEAR TO MONTH`

 *day\$1to\$1second\$1qualifier*   
Spécifie la plage de l’intervalle. Si vous utilisez un qualificatif et que vous créez un intervalle dont les unités de temps sont inférieures au qualificatif, Amazon Redshift tronque et supprime les plus petites parties de l’intervalle. Les valeurs valides pour *day\$1to\$1second\$1qualifier* sont les suivantes :  
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `DAY TO HOUR`
+ `DAY TO MINUTE`
+ `DAY TO SECOND`
+ `HOUR TO MINUTE`
+ `HOUR TO SECOND`
+ `MINUTE TO SECOND`
La sortie du littéral INTERVAL est tronquée au plus petit composant INTERVAL spécifié. Par exemple, lorsque vous utilisez un qualificateur MINUTE, Amazon Redshift supprime les unités de temps inférieures à MINUTE.  

```
select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE
```
La valeur résultante est tronquée à `'1 day 01:01:00'`.

 *fractional\$1precision*   
Paramètre facultatif qui spécifie le nombre de chiffres fractionnaires autorisés dans l’intervalle. L’argument *fractional\$1precision* ne doit être spécifié que si votre intervalle contient SECOND. Par exemple, `SECOND(3)` crée un intervalle qui n’autorise que trois chiffres fractionnaires, tels que 1,234 seconde. Le nombre maximum de chiffres fractionnaires est de six.

La configuration de session `interval_forbid_composite_literals` détermine si une erreur est renvoyée lorsqu’un intervalle est spécifié avec les parties YEAR TO MONTH et DAY TO SECOND. Pour plus d’informations, consultez [interval\$1forbid\$1composite\$1literals](r_interval_forbid_composite_literals.md).

## Arithmétique des intervalles
<a name="r_interval_data_types-arithmetic"></a>

Vous pouvez utiliser des valeurs interval avec d’autres valeurs datetime pour effectuer des opérations arithmétiques. Les tableaux suivants décrivent les opérations disponibles et le type de données résultant de chaque opération. 

**Note**  
 Les opérations qui peuvent produire les résultats `date` et `timestamp` le font en fonction de la plus petite unité de temps impliquée dans l’équation. Par exemple, lorsque vous ajoutez un `interval` à une `date`, le résultat est une `date`, s’il s’agit d’un intervalle YEAR TO MONTH, et un horodatage s’il s’agit d’un intervalle DAY TO SECOND. 

Les opérations où le premier opérande est un `interval` produisent les résultats suivants pour le second opérande donné :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_interval_data_types.html)

Les opérations où le premier opérande est une `date` produisent les résultats suivants pour le second opérande donné :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_interval_data_types.html)

Les opérations où le premier opérande est une `timestamp` produisent les résultats suivants pour le second opérande donné :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_interval_data_types.html)

## Styles d’intervalle
<a name="r_interval_data_types-interval-styles"></a>

Vous pouvez utiliser la commande SQL [SET](r_SET.md) pour modifier le format d’affichage de sortie de vos valeurs interval. Lorsque vous utilisez le type de données interval dans SQL, convertissez-le en texte pour voir le style d’intervalle attendu, par exemple, `YEAR TO MONTH::text`. Les valeurs disponibles pour effectuer SET sur la valeur `IntervalStyle` sont les suivantes :
+ `postgres` : suit le style PostgreSQL. Il s’agit de l’option par défaut.
+ `postgres_verbose` : suit le style détaillé PostgreSQL.
+ `sql_standard` : suit le style des littéraux interval SQL standard.

La commande suivante définit le style d’intervalle sur `sql_standard`.

```
SET IntervalStyle to 'sql_standard';
```

**format de sortie postgres**

Le format de sortie pour le style d’intervalle `postgres` est le suivant. Chaque valeur numérique peut être négative.

```
'<numeric> <unit> [, <numeric> <unit> ...]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
---------------
1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
------------------
1 day 02:03:04.5678
```

**format de sortie postgres\$1verbose**

La syntaxe postgres\$1verbose est similaire à postgres, mais les sorties postgres\$1verbose contiennent également l’unité de temps.

```
'[@] <numeric> <unit> [, <numeric> <unit> ...] [direction]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
-----------------
@ 1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
---------------------------
@ 1 day 2 hours 3 mins 4.56 secs
```

**format de sortie sql\$1standard**

Les valeurs interval year to month sont formatées comme suit. La spécification d’un signe négatif avant l’intervalle indique que l’intervalle est une valeur négative et s’applique à l’ensemble de l’intervalle.

```
'[-]yy-mm'
```

Les valeurs interval day to second sont formatées comme suit.

```
'[-]dd hh:mm:ss.ffffff'
```

```
SELECT INTERVAL '1-2' YEAR TO MONTH::text 
  
varchar   
-------
1-2
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text 

varchar
---------------
1 2:03:04.5678
```

## Exemples de type de données interval
<a name="r_interval_data_types-examples"></a>

Les exemples suivants montrent comment utiliser les types de données INTERVAL avec des tables.

```
create table sample_intervals (y2m interval month, h2m interval hour to minute);
insert into sample_intervals values (interval '20' month, interval '2 days 1:1:1.123456' day to second);
select y2m::text, h2m::text from sample_intervals;


      y2m      |       h2m      
---------------+-----------------
 1 year 8 mons | 2 days 01:01:00
```

```
update sample_intervals set y2m = interval '2' year where y2m = interval '1-8' year to month;
select * from sample_intervals;

   y2m   |       h2m       
---------+-----------------
 2 years | 2 days 01:01:00
```

```
delete from sample_intervals where h2m = interval '2 1:1:0' day to second;
select * from sample_intervals;

 y2m | h2m 
-----+-----
```

## Exemples de littéraux interval
<a name="r_interval_data_types_literals-examples"></a>

Les exemples suivants sont exécutés avec le style d’intervalle défini sur `postgres`.

L’exemple suivant montre comment créer un littéral INTERVAL de 1 an.

```
select INTERVAL '1' YEAR 

intervaly2m
---------------
1 years 0 mons
```

Si vous spécifiez une *quoted-string* qui dépasse le qualificatif, les unités de temps restantes sont tronquées par rapport à l’intervalle. Dans l’exemple suivant, un intervalle de 13 mois devient 1 an et 1 mois, mais le mois restant est omis en raison du qualificatif YEAR.

```
select INTERVAL '13 months' YEAR

intervaly2m
---------------
1 years 0 mons
```

Si vous utilisez un qualificatif inférieur à votre chaîne d’intervalle, les unités restantes sont incluses.

```
select INTERVAL '13 months' MONTH

intervaly2m
---------------
1 years 1 mons
```

Si vous spécifiez une précision dans votre intervalle, le nombre de chiffres fractionnaires est tronqué à la précision spécifiée.

```
select INTERVAL '1.234567' SECOND (3)

intervald2s
--------------------------------
0 days 0 hours 0 mins 1.235 secs
```

Si vous ne spécifiez aucune précision, Amazon Redshift utilise la précision maximale de 6.

```
select INTERVAL '1.23456789' SECOND

intervald2s
-----------------------------------
0 days 0 hours 0 mins 1.234567 secs
```

L’exemple suivant montre comment créer un intervalle par plage.

```
select INTERVAL '2:2' MINUTE TO SECOND

intervald2s
------------------------------
0 days 0 hours 2 mins 2.0 secs
```

Les qualificatifs dictent les unités que vous spécifiez. Par exemple, même si l’exemple suivant utilise la même *quoted-string* de « 2:2 » que l’exemple précédent, Amazon Redshift reconnaît qu’il utilise des unités de temps différentes en raison du qualificatif.

```
select INTERVAL '2:2' HOUR TO MINUTE

intervald2s
------------------------------
0 days 2 hours 2 mins 0.0 secs
```

Les abréviations et les pluriels de chaque unité sont également pris en charge. Par exemple, `5s`, `5 second` et `5 seconds` sont des intervalles équivalents. Les unités prises en charge sont les années, les mois, les heures, les minutes et les secondes.

```
select INTERVAL '5s' SECOND

intervald2s
------------------------------
0 days 0 hours 0 mins 5.0 secs
```

```
select INTERVAL '5 HOURS' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

```
select INTERVAL '5 h' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

# Exemples de littéraux interval sans syntaxe de qualificatif
<a name="r_interval_literals"></a>

**Note**  
Les exemples suivants illustrent l’utilisation d’un littéral interval sans qualificatif `YEAR TO MONTH` ou `DAY TO SECOND`. Pour plus d’informations sur l’utilisation du littéral interval recommandé avec un qualificatif, consultez [Types de données et littéraux interval](r_interval_data_types.md).

Utilisez un littéral de type interval pour identifier les périodes spécifiques, comme `12 hours` ou `6 months`. Vous pouvez utiliser ces littéraux de type interval dans les cas et les calculs qui impliquent des expressions de type datetime. 

 Un littéral interval est exprimé comme la combinaison du mot clé INTERVAL avec une quantité numérique et d’une partie date prise en charge ; par exemple : `INTERVAL '7 days'` ou `INTERVAL '59 minutes'`. Plusieurs quantités et unités peuvent être associées pour former un intervalle plus précis ; par exemple : `INTERVAL '7 days, 3 hours, 59 minutes'`. Les abréviations et les pluriels de chaque unité sont également pris en charge ; par exemple : `5 s`, `5 second` et `5 seconds` sont des intervalles équivalents.

Si vous ne spécifiez pas une partie date, la valeur de l’intervalle correspond à des secondes. Vous pouvez spécifier la valeur de la quantité sous forme de fraction (par exemple : `0.5 days`).

Les exemples suivants illustrent une série de calculs avec différentes valeurs d’intervalle.

Ce qui suit ajoute 1 seconde à la date spécifiée.

```
select caldate + interval '1 second' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:00:01
(1 row)
```

Ce qui suit ajoute 1 minute à la date spécifiée.

```
select caldate + interval '1 minute' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:01:00
(1 row)
```

Ce qui suit ajoute 3 heures et 35 minutes à la date spécifiée.

```
select caldate + interval '3 hours, 35 minutes' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 03:35:00
(1 row)
```

Ce qui suit ajoute 52 semaines à la date spécifiée.

```
select caldate + interval '52 weeks' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-12-30 00:00:00
(1 row)
```

Ce qui suit ajoute 1 semaine, 1 heure, 1 minute, et 1 seconde à la date spécifiée.

```
select caldate + interval '1w, 1h, 1m, 1s' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-01-07 01:01:01
(1 row)
```

Ce qui suit ajoute 12 heures (la moitié d’une journée) à la date spécifiée.

```
select caldate + interval '0.5 days' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 12:00:00
(1 row)
```

Ce qui suit soustrait 4 mois à compter du 15 février 2023 et le résultat est le 15 octobre 2022.

```
select date '2023-02-15' - interval '4 months';

?column?
---------------------
2022-10-15 00:00:00
```

Ce qui suit soustrait 4 mois à compter du 31 mars 2023 et le résultat est le 30 novembre 2022. Le calcul prend en compte le nombre de jours dans un mois.

```
select date '2023-03-31' - interval '4 months';

?column?
---------------------
2022-11-30 00:00:00
```

# Type Boolean
<a name="r_Boolean_type"></a>

Utilisez le type de données BOOLEAN pour stocker les valeurs true et false dans une colonne codée sur un octet. Le tableau suivant décrit les trois états possibles pour une valeur booléenne et les valeurs littérales qui entraînent cet état. Quelle que soit la chaîne en entrée, une colonne booléenne stocke et émet « t » pour true et « f » pour false. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Boolean_type.html)

Vous pouvez utiliser une comparaison IS pour vérifier une valeur booléenne uniquement sous la forme d’un prédicat dans la clause WHERE. Vous ne pouvez pas utiliser la comparaison IS avec une valeur booléenne dans la liste SELECT.

## Exemples
<a name="r_Boolean_type-examples"></a>

Vous pouvez utiliser une colonne de type BOOLEAN pour stocker un état « Actif/Inactif » pour chaque client dans une table CUSTOMER.

```
create table customer(
custid int,
active_flag boolean default true);
```

```
insert into customer values(100, default);
```

```
select * from customer;
custid | active_flag
-------+--------------
   100 | t
```

Si aucune valeur par défaut (`true` ou `false`) n’est spécifiée dans l’instruction CREATE TABLE, l’insertion d’une valeur par défaut signifie l’insertion d’une valeur null. 

Dans cet exemple, la requête sélectionne les utilisateurs de la table USERS qui aiment le sport, mais n’aiment pas le théâtre : 

```
select firstname, lastname, likesports, liketheatre
from users
where likesports is true and liketheatre is false
order by userid limit 10;

firstname |  lastname  | likesports | liketheatre
----------+------------+------------+-------------
Lars      | Ratliff    | t          | f
Mufutau   | Watkins    | t          | f
Scarlett  | Mayer      | t          | f
Shafira   | Glenn      | t          | f
Winifred  | Cherry     | t          | f
Chase     | Lamb       | t          | f
Liberty   | Ellison    | t          | f
Aladdin   | Haney      | t          | f
Tashya    | Michael    | t          | f
Lucian    | Montgomery | t          | f
(10 rows)
```

L’exemple suivant sélectionne les utilisateurs de la table USERS pour lesquels on ignore s’ils aiment la musique rock.

```
select firstname, lastname, likerock
from users
where likerock is unknown
order by userid limit 10;

firstname | lastname | likerock
----------+----------+----------
Rafael    | Taylor   |
Vladimir  | Humphrey |
Barry     | Roy      |
Tamekah   | Juarez   |
Mufutau   | Watkins  |
Naida     | Calderon |
Anika     | Huff     |
Bruce     | Beck     |
Mallory   | Farrell  |
Scarlett  | Mayer    |
(10 rows)
```

L’exemple suivant renvoie une erreur parce qu’il utilise une comparaison IS dans la liste SELECT.

```
select firstname, lastname, likerock is true as "check"
from users
order by userid limit 10;

[Amazon](500310) Invalid operation: Not implemented
```

L’exemple suivant réussit parce qu’il utilise une comparaison d’égalité ( = ) dans la liste SELECT à la place de la comparaison IS.

```
select firstname, lastname, likerock = true as "check"
from users
order by userid limit 10;

firstname | lastname  | check
----------+-----------+------
Rafael    | Taylor    |      
Vladimir  | Humphrey  |      
Lars      | Ratliff   | true 
Barry     | Roy       |      
Reagan    | Hodge     | true 
Victor    | Hernandez | true 
Tamekah   | Juarez    |      
Colton    | Roy       | false
Mufutau   | Watkins   |      
Naida     | Calderon  |
```

# Type HLLSKETCH
<a name="r_HLLSKTECH_type"></a>

Utilisez le type de données HLLSKETCH pour HyperLogLog les esquisses. Amazon Redshift prend en charge les représentations d' HyperLogLog esquisse éparses ou denses. Les esquisses sont d’abord fragmentées, puis deviennent denses lorsque le format dense est plus efficace pour minimiser l’empreinte mémoire utilisée.

 Amazon Redshift effectue automatiquement la transition d'une HyperLogLog esquisse fragmentée lors de l'importation, de l'exportation ou de l'impression d'esquisses au format JSON suivant.

```
{"logm":15,"sparse":{"indices":[4878,9559,14523],"values":[1,2,1]}}
```

Amazon Redshift utilise une représentation sous forme de chaîne au format Base64 pour représenter une esquisse dense. HyperLogLog 

Amazon Redshift utilise la représentation sous forme de chaîne suivante au format Base64 pour représenter une esquisse dense. HyperLogLog 

```
"ABAABA..."
```

La taille maximale d’un objet HLLSKETCH est de 24 580 octets lorsqu’il est utilisé dans la compression brute.

# Type SUPER
<a name="r_SUPER_type"></a>

Utilisez le type de données SUPER pour stocker des données semi-structurées ou des documents en tant que valeurs. Amazon Redshift est capable de stocker de telles valeurs à l’aide de VARCHAR, mais nous vous recommandons d’utiliser plutôt le type de données SUPER.

Les données semi-structurées ne sont pas conformes à la structure rigide et tabulaire du modèle de données relationnelles utilisé dans les bases de données SQL. Elles contiennent des balises qui font référence à des entités distinctes dans les données. Elles peuvent contenir des valeurs complexes telles que des tableaux, des structures imbriquées et d’autres structures complexes associées à des formats de sérialisation, tels que JSON. Le type de données SUPER est un ensemble de valeurs de tableau et de structure sans schéma qui englobent tous les autres types scalaires d’Amazon Redshift.

Le type de données SUPER prend en charge un maximum de 16 Mo de données pour un objet SUPER individuel. Pour plus d’informations sur le type de données SUPER, y compris des exemples d’implémentation dans une table, consultez [Données semi-structurées dans Amazon Redshift](super-overview.md). 

Amazon Redshift fournit un support intégré pour ingérer les formats de données semi-structurés suivants à l’aide de la commande COPY :
+  JSON 
+  ARRAY 
+  TEXT 
+  CSV 

Les objets SUPER de plus de 1 Mo ne peuvent être ingérés qu’à partir des formats de fichier suivants :
+  Parquet 
+  JSON 
+  TEXT 
+  CSV 

Le type de données SUPER a les propriétés suivantes :
+ Une valeur scalaire Amazon Redshift :
  + Un null
  + Une valeur booléenne
  + Un nombre, par exemple, smallint, entier, bigint, décimal ou virgule flottante (tel que float4 ou float8)
  + Une valeur de chaîne, telle que varchar ou char
+ Une valeur complexe :
  + Un tableau de valeurs, y compris scalaire ou complexe
  + Structure, également appelée tuple ou objet, qui est une carte de noms et de valeurs d’attribut (scalaire ou complexe)

Chacun des deux types de valeurs complexes contient ses propres scalaires ou valeurs complexes sans aucune restriction de régularité.

L’encodage de la compression par défaut pour le type de données SUPER est ZSTD. Pour plus d’informations sur l’encodage de la compression, consultez [encodages de compression](c_Compression_encodings.md).

Le type de données SUPER prend en charge la persistance des données semi-structurées sous une forme sans schéma. Bien que le modèle de données hiérarchique puisse changer, les anciennes versions de données peuvent coexister dans la même colonne SUPER. 

Amazon Redshift utilise PartiQL pour activer la navigation dans les tableaux et les structures. Amazon Redshift utilise aussi la syntaxe PartiQL pour itérer dans les tableaux SUPER. Pour plus d’informations, consultez [PartiQL : un langage de requête compatible SQL pour Amazon Redshift](super-partiql.md).

Amazon Redshift utilise le typage dynamique pour traiter les données SUPER sans schéma sans avoir à déclarer les types de données avant qu’elles ne soient utilisées dans votre requête. Pour plus d’informations, consultez [Typage dynamique](query-super.md#dynamic-typing-lax-processing).

Vous pouvez appliquer des politiques de masquage dynamique des données aux valeurs scalaires figurant sur les chemins des colonnes de type SUPER. Pour plus d’informations sur le masquage dynamique des données, consultez [Masquage dynamique des données](t_ddm.md). Pour en savoir plus sur l’utilisation du masquage dynamique des données avec le type de données SUPER, consultez [Utilisation du masquage dynamique des données avec des chemins de type de données SUPER](t_ddm-super.md).

Nous vous recommandons de définir l’option de configuration `r_enable_case_sensitive_super_attribute` sur true lorsque vous utilisez des données SUPER. Pour plus d’informations, consultez [enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md). 

# Type VARBYTE
<a name="r_VARBYTE_type"></a>

Utilisez une colonne VARBYTE, VARBINARY ou BINARY VARYING pour stocker une valeur binaire de longueur variable avec une limite fixe. 

```
varbyte [ (n) ]
```

Le nombre maximal d’octets (*n*) peut aller de 1 à 16 777 216. La valeur par défaut est 64 000. 

Voici quelques exemples dans lesquels vous souhaiterez peut-être utiliser un type de données VARBYTE :
+ Joindre des tables sur des colonnes VARBYTE.
+ Création de vues matérialisées contenant des colonnes VARBYTE. L’actualisation progressive des vues matérialisées contenant des colonnes VARBYTE est prise en charge. Toutefois, les fonctions d’agrégation autres que COUNT, MIN et MAX et GROUP BY sur les colonnes VARBYTE ne prennent pas en charge l’actualisation progressive.

Pour garantir que tous les octets sont des caractères imprimables, Amazon Redshift utilise le format hexadécimal pour imprimer des valeurs VARBYTE. Par exemple, le code SQL suivant convertit la chaîne hexadécimale `6162` en une valeur binaire. Même si la valeur renvoyée est une valeur binaire, les résultats sont imprimés en hexadécimal `6162`.

```
select from_hex('6162');
                      
 from_hex
----------
 6162
```

Amazon Redshift prend en charge la conversion entre le type de données VARBYTE et les types de données suivants :
+ CHAR
+ VARCHAR
+ SMALLINT
+ INTEGER
+ BIGINT

Lors de la conversion CHAR et VARCHAR, le format UTF-8 est utilisé. Pour plus d’informations sur le format UTF-8, consultez [TO\$1VARBYTE](r_TO_VARBYTE.md). Lors de la conversion à partir de SMALLINT, INTEGER et BIGINT, le nombre d’octets du type de données d’origine est conservé. Il s’agit de deux octets pour SMALLINT, de quatre octets pour INTEGER et de huit octets pour BIGINT.

L’instruction SQL suivante convertit une chaîne VARCHAR en VARBYTE. Même si la valeur renvoyée est une valeur binaire, les résultats sont imprimés en hexadécimal `616263`.

```
select 'abc'::varbyte;
                      
 varbyte
---------
 616263
```

L’instruction SQL suivante convertit une valeur CHAR dans une colonne en VARBYTE. Cet exemple montre comment créer une table avec une colonne (c) CHAR(10) et insérer des valeurs de caractères inférieures à 10. La conversion résultante bloque le résultat avec des caractères d’espace (hex’20’) à la taille de colonne définie. Même si la valeur renvoyée est une valeur binaire, les résultats sont imprimés en hexadécimal.

```
create table t (c char(10));
insert into t values ('aa'), ('abc');                 
select c::varbyte from t;
          c
----------------------
 61612020202020202020
 61626320202020202020
```

L’instruction SQL suivante convertit une chaîne SMALLINT en VARBYTE. Même si la valeur renvoyée est une valeur binaire, les résultats sont imprimés en hexadécimal `0005`, soit deux octets ou quatre caractères hexadécimaux.

```
select 5::smallint::varbyte;
                  
 varbyte
---------
 0005
```

L’instruction SQL suivante convertit un INTEGER en VARBYTE. Même si la valeur renvoyée est une valeur binaire, les résultats sont imprimés en hexadécimal `00000005`, soit quatre octets ou huit caractères hexadécimaux.

```
select 5::int::varbyte;
                  
 varbyte
----------
 00000005
```

L’instruction SQL suivante convertit un BIGINT en VARBYTE. Même si la valeur renvoyée est une valeur binaire, les résultats sont imprimés en hexadécimal `0000000000000005`, soit 8 octets ou 16 caractères hexadécimaux.

```
select 5::bigint::varbyte;
                  
     varbyte
------------------
 0000000000000005
```

Les fonctions Amazon Redshift prenant en charge le type de données VARBYTE sont les suivantes :
+ [Opérateurs VARBYTE](r_VARBYTE_OPERATORS.md)
+ [CONCAT](r_CONCAT.md)
+ [LEN](r_LEN.md)
+ [Fonction LENGTH](r_LENGTH.md)
+ [OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [Fonction SUBSTRING](r_SUBSTRING.md)
+ [FROM\$1HEX](r_FROM_HEX.md)
+ [TO\$1HEX](r_TO_HEX.md)
+ [FROM\$1VARBYTE](r_FROM_VARBYTE.md)
+ [TO\$1VARBYTE](r_TO_VARBYTE.md)
+ [GETBIT](r_GETBIT.md)
+ [Chargement d’une colonne avec le type de données VARBYTE](copy-usage-varbyte.md)
+ [Déchargement d’une colonne avec le type de données VARBYTE](r_UNLOAD.md#unload-usage-notes)

## Limites lors de l’utilisation du type de données VARBYTE avec Amazon Redshift
<a name="varbyte-limitations"></a>

Les limites suivantes se présentent lors de l’utilisation du type de données VARBYTE avec Amazon Redshift : 
+ Amazon Redshift Spectrum prend en charge le type de données VARBYTE uniquement pour les fichiers Parquet et ORC.
+ L’éditeur de requêtes Amazon Redshift et Amazon Redshift Query Editor V2 ne prennent pas encore entièrement en charge le type de données VARBYTE. Par conséquent, utilisez un client SQL différent lorsque vous utilisez des expressions VARBYTE. 

  Pour contourner le problème d'utilisation de l'éditeur de requêtes, si la longueur de vos données est égale ou inférieure à 16 000 000 octets et que le contenu est un UTF-8 valide, vous pouvez convertir les valeurs VARBYTE en VARCHAR, par exemple :

  ```
  select to_varbyte('6162', 'hex')::varchar;
  ```
+ Vous ne pouvez pas utiliser les types de données VARBYTE avec des fonctions définies par l'utilisateur Python ou Lambda (). UDFs 
+ Vous ne pouvez pas créer de colonne HLLSKETCH à partir d’une colonne VARBYTE ou utiliser APPROXIMATIVE COUNT DISTINCT sur une colonne VARBYTE. 
+ Les valeurs VARBYTE de plus de 1 Mo ne peuvent être ingérés qu’à partir des formats de fichier suivants :
  + Parquet
  + Texte
  + Valeurs séparées par des virgules (CSV)

## Compatibilité et conversion de types
<a name="r_Type_conversion"></a>

Vous trouverez ci-dessous une discussion sur la façon dont les règles de conversion de type et la compatibilité des types de données fonctionnent dans Amazon Redshift.

### Compatibilité
<a name="r_Type_conversion-compatibility"></a>

 La correspondance des types de données et la correspondance des valeurs littérales et des constantes avec les types de données se produisent lors de différentes opérations de base de données, dont les suivantes : 
+ Opérations DML (Data Manipulation Language) sur les tables 
+ Requêtes UNION, INTERSECT et EXCEPT 
+ Expressions CASE 
+ Evaluation de prédicats, tels que LIKE et IN 
+ Evaluation de fonctions SQL qui effectuent des comparaisons ou des extractions de données 
+ Comparaisons avec les opérateurs mathématiques 

Les résultats de ces opérations dépendent des règles de conversion de types et de la compatibilité des types de données. La *compatibilité* implique que la mise en one-to-one correspondance d'une certaine valeur et d'un certain type de données n'est pas toujours requise. Comme certains types de données sont *compatibles*, une conversion implicite ou *forçage de type*, est possible (pour plus d’informations, consultez [Types de conversion implicite](#implicit-conversion-types)). Lorsque les types de données sont incompatibles, vous pouvez parfois convertir une valeur d’un type de données en un autre à l’aide d’une fonction de conversion explicite. 

### Compatibilité générale et règles de conversion
<a name="r_Type_conversion-general-compatibility-and-conversion-rules"></a>

Notez les règles de compatibilité et de conversion suivantes : 
+ En général, les types de données qui appartiennent à la même catégorie (comme les différents types de données numériques) sont compatibles et peuvent être convertis implicitement. 

  Par exemple, avec une conversion implicite, vous pouvez insérer une valeur décimale dans une colonne de type entier. La partie décimale est arrondie pour produire un nombre entier. Ou vous pouvez extraire une valeur numérique, telle que `2008`, d’une date et insérer cette valeur dans une colonne de type entier. 
+ Les types de données numériques renforcent les conditions de débordement qui se produisent lorsque vous tentez d'insérer out-of-range des valeurs. Par exemple, une valeur décimale avec une précision de 5 ne peut contenir dans une colonne décimale dont la précision est 4. Un nombre entier ou la partie entière d’un nombre décimal ne sont jamais tronqués ; toutefois, la partie fractionnaire d’un nombre décimal peut être arrondie vers le haut ou vers le bas, selon le cas. Cependant, les résultats de conversions explicites de valeurs sélectionnées dans les tables ne sont pas arrondis.
+ Différents types de chaînes de caractères sont compatibles ; les chaînes de colonnes VARCHAR contenant des données codées sur un seul octet et les chaînes de colonne CHAR sont comparables et implicitement convertibles. Les chaînes VARCHAR qui contiennent des données codées sur plusieurs octets ne sont pas comparables. Vous pouvez également convertir une chaîne de caractères en une date, une heure, un horodatage ou une valeur numérique si la chaîne est une valeur littérale appropriée ; les espaces de début ou de fin sont ignorés. Inversement, vous pouvez convertir une date, une heure, un horodatage ou une valeur numérique en une chaîne de caractères de longueur fixe ou variable.
**Note**  
Une chaîne de caractères que vous voulez convertir en type numérique doit comporter la représentation en caractères d’un nombre. Par exemple, vous pouvez convertir les chaînes `'1.0'` ou `'5.9'` en valeurs décimales, mais vous ne pouvez pas convertir la chaîne `'ABC'` en un type numérique.
+ Si vous comparez des valeurs DECIMAL avec des chaînes de caractères, Amazon Redshift tente de convertir la chaîne de caractères en valeur DECIMAL. Lors de la comparaison de toutes les autres valeurs numériques avec des chaînes de caractères, les valeurs numériques sont converties en chaînes de caractères. Pour effectuer la conversion inverse (par exemple, convertir des chaînes de caractères en entiers ou convertir des valeurs DECIMALES en chaînes de caractères), utilisez une fonction explicite, telle que [CAST](r_CAST_function.md). 
+ Pour convertir les valeurs DECIMAL ou NUMERIC 64 bits en une plus grande précision, vous devez utiliser une fonction de conversion explicite telle que les fonctions CAST ou CONVERT. 
+ Lors de la conversion de DATE ou TIMESTAMP en TIMESTAMPTZ, ou de la conversion de TIME en TIMESTAMP, le fuseau horaire de la session en cours. Le fuseau horaire de session est UTC par défaut. Pour plus d’informations sur le réglage du fuseau horaire de la session, consultez [timezone](r_timezone_config.md). 
+ De même, TIMESTAMPTZ est converti en DATE, TIME ou TIMESTAMP en fonction du fuseau horaire de la session en cours. Le fuseau horaire de session est UTC par défaut. Après la conversion, les informations sur les fuseaux horaires sont abandonnées.
+ Les chaînes de caractères qui représentent un horodatage avec un fuseau horaire spécifié sont converties en TIMESTAMPTZ en utilisant le fuseau horaire de la session actuelle, qui est UTC par défaut. De même, les chaînes de caractères qui représentent un fuseau horaire spécifié sont converties en TIPZ à l’aide du fuseau horaire de la session en cours, UTC par défaut.

### Types de conversion implicite
<a name="implicit-conversion-types"></a>

Il existe deux types de conversion implicite : 
+ Conversions implicites d’affectations, telles que la définition de valeurs dans les commandes INSERT ou UPDATE.
+ Conversions implicites d’expressions, comme l’exécution de comparaisons dans la clause WHERE.

Le tableau suivant répertorie les types de données qui peuvent être convertis implicitement dans les affectations ou les expressions. Vous pouvez également utiliser une fonction de conversion explicite pour exécuter ces conversions. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/c_Supported_data_types.html)

**Note**  
Les conversions implicites entre TIMESTAMPTZ, TIMESTAMP, DATE, TIME, TIMETZ ou les chaînes de caractères utilisent le fuseau horaire actuel de la session. Pour plus d’informations sur la définition du fuseau horaire en cours, consultez [timezone](r_timezone_config.md).  
Les types de données GEOMETRY et GEOGRAPHY ne peuvent pas être convertis de façon implicite dans un autre type de données, excepté l’un dans l’autre. Pour plus d’informations, consultez [Fonction CAST](r_CAST_function.md).   
Le type de données VARBYTE ne peut pas être converti de façon implicite dans un autre type de données. Pour plus d’informations, consultez [Fonction CAST](r_CAST_function.md). 

### Utilisation du typage dynamique pour le type de données SUPER
<a name="r_dynamic_typing_SUPER"></a>

Amazon Redshift utilise le typage dynamique pour traiter des données SUPER sans schéma sans avoir à déclarer les types de données avant de les utiliser dans votre requête. Le typage dynamique utilise les résultats de la navigation dans les colonnes de données SUPER sans devoir les convertir explicitement en types Amazon Redshift. Pour plus d’informations sur l’utilisation du typage dynamique pour le type de données SUPER, consultez [Typage dynamique](query-super.md#dynamic-typing-lax-processing).

Vous pouvez lancer des valeurs SUPER depuis et vers d’autres types de données, à quelques exceptions près. Pour plus d’informations, consultez [Limitations](limitations-super.md).

# Séquences de classement
<a name="c_collation_sequences"></a>

Amazon Redshift ne prend pas en charge les séquences de classement spécifiques à une région ou définies par l’utilisateur. En général, les résultats d’un prédicat dans quelque contexte que ce soit peuvent être affectés par l’absence de règles spécifiques aux paramètres régionaux en matière de tri et de comparaison des valeurs de données. Par exemple, les expressions et fonctions ORDER BY telles que MIN, MAX et RANK renvoient des résultats basés sur un UTF8 ordre binaire des données qui ne prend pas en compte les caractères spécifiques aux paramètres régionaux.

# Expressions
<a name="r_expressions"></a>

**Topics**
+ [Expressions simples](#r_expressions-simple-expressions)
+ [Expressions composées](r_compound_expressions.md)
+ [Listes d’expressions](r_expression_lists.md)
+ [Sous-requêtes scalaires](r_scalar_subqueries.md)
+ [Expressions de fonction](r_function_expressions.md)

Une expression est une combinaison d’un(e) ou de plusieurs valeurs, opérateurs ou fonctions qui correspondent à une valeur. Le type de données d’une expression est généralement celui de ses composants. 

## Expressions simples
<a name="r_expressions-simple-expressions"></a>

Une expression simple est l’une des expressions suivantes : 
+ Une constante ou une valeur littérale 
+ Un nom de colonne ou une référence de colonne 
+ Une fonction scalaire 
+ Une fonction d’agrégation (ensemble) 
+ Une fonction de fenêtre 
+ Une sous-requête scalaire 

Exemples d’expressions simples : 

```
5+12
dateid
sales.qtysold * 100
sqrt (4)
max (qtysold)
(select max (qtysold) from sales)
```

# Expressions composées
<a name="r_compound_expressions"></a>

Une expression composée est une série d’expressions simples jointes par des opérateurs arithmétiques. Une expression simple utilisée dans une expression composée doit retourner une valeur numérique.

## Syntaxe
<a name="r_compound_expressions-synopsis"></a>

```
expression 
operator 
expression | (compound_expression)
```

## Arguments
<a name="r_compound_expressions-arguments"></a>

 *expression*   
Une expression simple qui correspond à une valeur.

 *opérateur*   
 Une expression arithmétique composée peut être construite à l’aide des opérateurs suivants, en respectant l’ordre de priorité :  
+ () : parenthèses pour contrôler l’ordre de l’évaluation
+ \$1,- : signe/opérateur positif et négatif
+  ^ , \$1/ , \$1\$1 / : élévation à la puissance, racine carrée, racine cubique
+ \$1, /, % : multiplication, division et opérateurs modulo
+  @ : valeur absolue
+ \$1,- : addition et soustraction
+ & , \$1, \$1, \$1, <<, >> : AND, OR, NOT, opérateurs au niveau du bit de décalage gauche, décalage droit
+ \$1\$1 : concaténation

 *(expression\$1composée)*   
Les expressions composées peuvent être imbriquées à l’aide de parenthèses.

## Exemples
<a name="r_compound_expressions-examples"></a>

Voici quelques exemples d’expressions composées.

```
('SMITH' || 'JONES')
sum(x) / y
sqrt(256) * avg(column)
rank() over (order by qtysold) / 100
(select (pricepaid - commission) from sales where dateid = 1882) * (qtysold)
```

Certaines fonctions peuvent également être imbriquées dans d’autres fonctions. Par exemple, une fonction scalaire peut être imbriquée dans une autre fonction scalaire. L’exemple suivant retourne la somme des valeurs absolues d’un ensemble de nombres :

```
sum(abs(qtysold))
```

Les fonctions de fenêtrage ne peuvent pas être utilisées comme arguments pour les fonctions d’agrégation ou d’autres fonctions de fenêtrage. L’expression suivante retourne une erreur :

```
avg(rank() over (order by qtysold))
```

Les fonctions de fenêtrage peuvent avoir une fonction d’agrégation imbriquée. L’expression suivante additionne des ensembles de valeurs, puis les classe :

```
rank() over (order by sum(qtysold))
```

# Listes d’expressions
<a name="r_expression_lists"></a>

Une liste d’expressions est une combinaison d’expressions et peut apparaître dans les conditions d’appartenance et de comparaison (clauses WHERE) et dans les clauses GROUP BY.

## Syntaxe
<a name="r_expression_lists-synopsis"></a>

```
expression , expression , ... | (expression, expression, ...)
```

## Arguments
<a name="r_expression_lists-arguments"></a>

 *expression*   
Une expression simple qui correspond à une valeur. Une liste d’expressions peut contenir une ou plusieurs expressions séparées par des virgules, ou un ou plusieurs ensembles d’expressions séparés par des virgules. Lorsqu’il existe plusieurs ensembles d’expressions, chaque ensemble doit comporter le même nombre d’expressions et être séparée par des parenthèses. Le nombre d’expressions de chaque ensemble doit correspondre au nombre d’expressions avant l’opérateur de la condition.

## Exemples
<a name="r_expression_lists-examples"></a>

Exemples de listes d’expressions dans des conditions :

```
(1, 5, 10)
('THESE', 'ARE', 'STRINGS')
(('one', 'two', 'three'), ('blue', 'yellow', 'green'))
```

Le nombre d’expressions de chaque ensemble doit correspondre au nombre dans la première partie de l’instruction :

```
select * from venue
where (venuecity, venuestate) in (('Miami', 'FL'), ('Tampa', 'FL'))
order by venueid;

venueid |        venuename        | venuecity | venuestate | venueseats
---------+-------------------------+-----------+------------+------------
28 | American Airlines Arena | Miami     | FL         |          0
54 | St. Pete Times Forum    | Tampa     | FL         |          0
91 | Raymond James Stadium   | Tampa     | FL         |      65647
(3 rows)
```

# Sous-requêtes scalaires
<a name="r_scalar_subqueries"></a>

Une sous-requête scalaire est une requête SELECT régulière entre parenthèses qui renvoie exactement une valeur : une seule ligne avec une colonne. La requête est exécutée et la valeur retournée est utilisée dans la requête externe. Si la sous-requête ne renvoie aucune ligne, l’expression de la sous-requête a la valeur null. Si elle renvoie plusieurs lignes, Amazon Redshift renvoie une erreur. La sous-requête peut faire référence aux variables de la requête parente, qui serviront de constantes lors d’une invocation de la sous-requête.

Vous pouvez utiliser des sous-requêtes scalaires dans la plupart des instructions qui appellent une expression. Les sous-requêtes scalaires ne sont pas des expressions valides dans les cas suivants :
+ Comme valeurs par défaut pour les expressions
+ Dans les clauses GROUP BY et HAVING

## Exemple
<a name="r_scalar_subqueries-example"></a>

La sous-requête suivante calcule le prix moyen payé par vente sur toute l’année 2008, puis la requête externe utilise cette valeur dans la sortie pour la comparer au prix moyen par vente par trimestre :

```
select qtr, avg(pricepaid) as avg_saleprice_per_qtr,
(select avg(pricepaid)
from sales join date on sales.dateid=date.dateid
where year = 2008) as avg_saleprice_yearly
from sales join date on sales.dateid=date.dateid
where year = 2008
group by qtr
order by qtr;
qtr  | avg_saleprice_per_qtr | avg_saleprice_yearly
-------+-----------------------+----------------------
1     |                647.64 |               642.28
2     |                646.86 |               642.28
3     |                636.79 |               642.28
4     |                638.26 |               642.28
(4 rows)
```

# Expressions de fonction
<a name="r_function_expressions"></a>

## Syntaxe
<a name="r_function_expressions-syntax"></a>

Toute fonction intégrée peut être utilisée en tant qu’expression. La syntaxe d’un appel de fonction est le nom d’une fonction suivi de sa liste d’arguments entre parenthèses. 

```
function ( [expression [, expression...]] )
```

## Arguments
<a name="r_function_expressions-arguments"></a>

 *fonction*   
Toute fonction intégrée. Pour des exemples de fonctions, consultez [Référence sur les fonctions SQL](c_SQL_functions.md).

 *expression*   
Toute expression correspondant au type de données et au nombre de paramètres attendu par la fonction. 

## Exemples
<a name="r_function_expressions-examples"></a>

```
abs (variable)
select avg (qtysold + 3) from sales;
select dateadd (day,30,caldate) as plus30days from date;
```

# Conditions
<a name="r_conditions"></a>

**Topics**
+ [Syntaxe](#r_conditions-synopsis)
+ [Condition de comparaison](r_comparison_condition.md)
+ [Conditions logiques](r_logical_condition.md)
+ [Conditions de correspondance de modèles](pattern-matching-conditions.md)
+ [Condition de plage BETWEEN](r_range_condition.md)
+ [Condition null](r_null_condition.md)
+ [Condition EXISTS](r_exists_condition.md)
+ [Condition IN](r_in_condition.md)

 Une condition est une instruction d’un(e) ou plusieurs expressions et opérateurs logiques qui ont la valeur true, false ou unknown. Les conditions sont également appelées parfois prédicats.

**Note**  
Toutes les comparaisons de chaîne et correspondances du modèle LIKE sont sensibles à la casse. Par exemple, « A » et « a » ne correspondent pas. Cependant, vous pouvez effectuer une correspondance de modèle non sensible à la casse à l’aide du prédicat ILIKE.

## Syntaxe
<a name="r_conditions-synopsis"></a>

```
comparison_condition
| logical_condition
| range_condition
| pattern_matching_condition
| null_condition
| EXISTS_condition
| IN_condition
```

# Condition de comparaison
<a name="r_comparison_condition"></a>

Les conditions de comparaison établissent des relations logiques entre deux valeurs. Toutes les conditions de comparaison sont des opérateurs binaires avec un type de retour booléen. Amazon Redshift prend en charge les opérateurs de comparaison décrits dans le tableau suivant :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_comparison_condition.html)

## Notes d’utilisation
<a name="r_comparison_condition_usage_notes"></a>

= ANY \$1 SOME   
Les mots-clés ANY et SOME sont synonymes de la condition *IN*, et renvoient true (vrai) si la comparaison est vraie pour au moins une valeur renvoyée par une sous-requête qui renvoie une ou plusieurs valeurs. Amazon Redshift prend en charge uniquement la condition = (égal) pour ANY et SOME. Les conditions d’inégalité ne sont pas prises en charge.  
Le prédicat ALL n’est pas pris en charge.

<> ALL  
Le mot-clé ALL est synonyme de NOT IN (voir condition [Condition IN](r_in_condition.md)) et renvoie true (vrai) si l’expression n’est pas incluse dans les résultats de la sous-requête. Amazon Redshift prend en charge uniquement la condition <> ou \$1= (non égal) pour ALL. Les autres conditions de comparaison ne sont pas prises en charge.

EST TRUE/FALSE/UNKNOWN  
Les valeurs différentes de zéro correspondent à TRUE, 0 correspond à FALSE et null équivaut à UNKNOWN. Consultez le type de données [Type BooleanType HLLSKETCH](r_Boolean_type.md).

## Exemples
<a name="r_comparison_condition-examples"></a>

Voici quelques exemples simples de conditions de comparaison : 

```
a = 5
a < b
min(x) >= 5
qtysold = any (select qtysold from sales where dateid = 1882
```

La requête suivante retourne les sites de plus de 10 000 places à partir de la table VENUE : 

```
select venueid, venuename, venueseats from venue
where venueseats > 10000
order by venueseats desc;

venueid |           venuename            | venueseats
---------+--------------------------------+------------
83 | FedExField                     |      91704
 6 | New York Giants Stadium        |      80242
79 | Arrowhead Stadium              |      79451
78 | INVESCO Field                  |      76125
69 | Dolphin Stadium                |      74916
67 | Ralph Wilson Stadium           |      73967
76 | Jacksonville Municipal Stadium |      73800
89 | Bank of America Stadium        |      73298
72 | Cleveland Browns Stadium       |      73200
86 | Lambeau Field                  |      72922
...
(57 rows)
```

Cet exemple sélectionne les utilisateurs (USERID) de la table USERS qui aiment la musique rock :

```
select userid from users where likerock = 't' order by 1 limit 5;

userid
--------
3
5
6
13
16
(5 rows)
```

Cet exemple sélectionne les utilisateurs (USERID) de la table USERS pour lesquels on ignore s’ils aiment la musique rock :

```
select firstname, lastname, likerock
from users
where likerock is unknown
order by userid limit 10;

firstname | lastname | likerock
----------+----------+----------
Rafael    | Taylor   |
Vladimir  | Humphrey |
Barry     | Roy      |
Tamekah   | Juarez   |
Mufutau   | Watkins  |
Naida     | Calderon |
Anika     | Huff     |
Bruce     | Beck     |
Mallory   | Farrell  |
Scarlett  | Mayer    |
(10 rows
```

## Exemples avec une colonne TIME
<a name="r_comparison_condition-examples-time"></a>

La table d'exemple TIME\$1TEST suivante comporte une colonne TIME\$1VAL (type TIME) dans laquelle trois valeurs ont été insérées. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

L'exemple suivant extrait les heures de chaque timetz\$1val.

```
select time_val from time_test where time_val < '3:00';
   time_val
---------------
 00:00:00.5550
 00:58:00
```

L’exemple suivant compare deux littéraux de type heure. 

```
select time '18:25:33.123456' = time '18:25:33.123456';
 ?column?
----------
 t
```

## Exemples avec une colonne TIMETZ
<a name="r_comparison_condition-examples-timetz"></a>

L'exemple de tableau TIMETZ\$1TEST suivant comporte une colonne TIMETZ\$1VAL (type TIMETZ) dans laquelle trois valeurs ont été insérées.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

L’exemple suivant sélectionne uniquement les valeurs TIMETZ inférieures à `3:00:00 UTC`. La comparaison est effectuée après la conversion de la valeur en UTC.

```
select timetz_val from timetz_test where timetz_val < '3:00:00 UTC';
                  
   timetz_val
---------------
 00:00:00.5550+00
```

L’exemple suivant compare deux littéraux TIMETZ. Le fuseau horaire n’est pas pris en compte pour la comparaison. 

```
select time '18:25:33.123456 PST' < time '19:25:33.123456 EST';
                  
 ?column?
----------
 t
```

# Conditions logiques
<a name="r_logical_condition"></a>

Les conditions logiques combinent le résultat de deux conditions pour produire un résultat unique. Toutes les conditions logiques sont des opérateurs binaires avec un type de retour booléen. 

## Syntaxe
<a name="r_logical_condition-synopsis"></a>

```
expression
{ AND | OR }
expression
NOT expression
```

Les conditions logiques utilisent une logique booléenne à trois valeurs où la valeur nulle représente une relation inconnue. Le tableau suivant décrit les résultats des conditions logiques, où `E1` et `E2` représentent des expressions :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_logical_condition.html)

L’opérateur NOT est analysé avant AND et l’opérateur AND est évalué avant l’opérateur OR. Les parenthèses utilisées peuvent remplacer cet ordre d’évaluation par défaut. 

### Exemples
<a name="r_logical_condition-examples"></a>

L’exemple suivant retourne USERID et USERNAME de la table USERS où l’utilisateur aime à la fois Las Vegas et les sports : 

```
select userid, username from users
where likevegas = 1 and likesports = 1
order by userid;

userid | username
--------+----------
1 | JSG99FHE
67 | TWU10MZT
87 | DUF19VXU
92 | HYP36WEQ
109 | FPL38HZK
120 | DMJ24GUZ
123 | QZR22XGQ
130 | ZQC82ALK
133 | LBN45WCH
144 | UCX04JKN
165 | TEY68OEB
169 | AYQ83HGO
184 | TVX65AZX
...
(2128 rows)
```

L’exemple suivant retourne USERID et USERNAME de la table USERS où l’utilisateur aime Las Vegas, ou les sports, ou les deux. Cette requête renvoie toutes les données de sortie de l’exemple précédent, plus les utilisateurs qui aiment uniquement Las Vegas ou le sport. 

```
select userid, username from users
where likevegas = 1 or likesports = 1
order by userid;

userid | username
--------+----------
1 | JSG99FHE
2 | PGL08LJI
3 | IFT66TXU
5 | AEB55QTM
6 | NDQ15VBM
9 | MSD36KVR
10 | WKW41AIW
13 | QTF33MCG
15 | OWU78MTR
16 | ZMG93CDD
22 | RHT62AGI
27 | KOY02CVE
29 | HUH27PKK
...
(18968 rows)
```

La requête suivante utilise des parenthèses autour de la condition `OR` pour trouver les salles de New York ou de Californie où Macbeth a été joué : 

```
select distinct venuename, venuecity
from venue join event on venue.venueid=event.venueid
where (venuestate = 'NY' or venuestate = 'CA') and eventname='Macbeth'
order by 2,1;

venuename                |   venuecity
----------------------------------------+---------------
Geffen Playhouse                       | Los Angeles
Greek Theatre                          | Los Angeles
Royce Hall                             | Los Angeles
American Airlines Theatre              | New York City
August Wilson Theatre                  | New York City
Belasco Theatre                        | New York City
Bernard B. Jacobs Theatre              | New York City
...
```

La suppression des parenthèses de cet exemple modifie la logique et les résultats de la requête. 

Les exemples suivants utilisent l’opérateur `NOT` : 

```
select * from category
where not catid=1
order by 1;

catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
2 | Sports   | NHL       | National Hockey League
3 | Sports   | NFL       | National Football League
4 | Sports   | NBA       | National Basketball Association
5 | Sports   | MLS       | Major League Soccer
...
```

L’exemple suivant utilise une condition `NOT` suivie d’une condition `AND` : 

```
select * from category
where (not catid=1) and catgroup='Sports'
order by catid;

catid | catgroup | catname |             catdesc
-------+----------+---------+---------------------------------
2 | Sports   | NHL     | National Hockey League
3 | Sports   | NFL     | National Football League
4 | Sports   | NBA     | National Basketball Association
5 | Sports   | MLS     | Major League Soccer
(4 rows)
```

# Conditions de correspondance de modèles
<a name="pattern-matching-conditions"></a>

**Topics**
+ [LIKE](r_patternmatching_condition_like.md)
+ [SIMILAR TO](pattern-matching-conditions-similar-to.md)
+ [Opérateurs POSIX](pattern-matching-conditions-posix.md)

Un opérateur de correspondance de modèle recherche une chaîne d’un modèle spécifié dans l’expression conditionnelle et retourne true ou false selon qu’il a trouvé ou non une correspondance. Amazon Redshift utilise trois méthodes pour la correspondance des modèles : 
+ Expressions LIKE

  L’opérateur LIKE compare une expression de chaîne, comme un nom de colonne, avec un modèle qui utilise les caractères génériques `%` (pourcentage) et `_` (soulignement). La correspondance de modèle LIKE couvre toute la chaîne. LIKE effectue une correspondance sensible à la casse et ILIKE effectue une correspondance non sensible à la casse. 
+ Expressions régulières SIMILAR TO

  L’opérateur SIMILAR TO correspond à une expression de chaîne avec un modèle d’expression régulière SQL standard, ce qui peut inclure un ensemble de métacaractères de correspondance de modèle incluant les deux pris en charge par l’opérateur LIKE. SIMILAR TO correspond à la totalité de la chaîne et effectue une correspondance sensible à la casse.
+ Expressions régulières POSIX 

  Les expressions régulières POSIX fournissent un moyen plus puissant pour la correspondance de modèles que les opérateurs LIKE et SIMILAR TO. Les modèles d’expressions régulières POSIX peuvent correspondre à n’importe quelle partie de la chaîne et effectuent une correspondance sensible à la casse.

La correspondance d’expressions régulières, à l’aide des opérateurs SIMILAR TO ou POSIX, est coûteuse en termes de calcul. Nous vous conseillons d’utiliser LIKE autant que possible, notamment lors du traitement d’un très grand nombre de lignes. Par exemple, les requêtes suivantes sont fonctionnellement identiques, mais la requête qui utilise LIKE s’exécute infiniment plus vite que la requête qui utilise une expression régulière :

```
select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

# LIKE
<a name="r_patternmatching_condition_like"></a>

L’opérateur LIKE compare une expression de chaîne, comme un nom de colonne, avec un modèle qui utilise les caractères génériques % (pourcentage) et \$1 (soulignement). La correspondance de modèle LIKE couvre toute la chaîne. Pour faire correspondre une séquence à n’importe quel emplacement au sein d’une chaîne, le modèle doit commencer et finir par un signe %. 

LIKE est sensible à la casse, ILIKE ne l’est pas.

## Syntaxe
<a name="r_patternmatching_condition_like-synopsis"></a>

```
expression [ NOT ] LIKE | ILIKE pattern [ ESCAPE 'escape_char' ]
```

## Arguments
<a name="r_patternmatching_condition_like-arguments"></a>

 *expression*   
Expression de caractère UTF-8 valide, comme un nom de colonne. 

LIKE \$1 ILIKE   
LIKE effectue une correspondance sensible à la casse. ILIKE effectue une correspondance de modèle non sensible à la casse pour les caractères UTF-8 (ASCII) codés sur un octet. Pour effectuer une correspondance de modèle non sensible à la casse pour les caractères codés sur plusieurs octets, utilisez la fonction [LOWER](r_LOWER.md) sur *expression* et *pattern* avec une condition LIKE.  
Contrairement aux prédicats de comparaison, tels que = et <>, les prédicats LIKE et ILIKE n’ignorent pas implicitement les espaces de fin. Pour ignorer les espaces de fin, utilisez RTRIM ou convertissez explicitement une colonne CHAR en VARCHAR.  
L’opérateur `~~` est équivalent à LIKE et `~~*` est équivalent à ILIKE. Les opérateurs `!~~` et `!~~*` sont également équivalents à NOT LIKE et NOT ILIKE.

 *pattern*   
Expression de caractère UTF-8 valide avec le modèle à mettre en correspondance. 

 *escape\$1char*   
Expression de caractère qui utilise une séquence d’échappement pour les méta-caractères du modèle. La valeur par défaut est deux barres obliques inverses (’\$1\$1 »). 

Si *pattern* ne contient pas de méta-caractères, le modèle représente uniquement la chaîne elle-même ; dans ce cas, LIKE agit de même que l’opérateur d’égalité.

Les expressions de caractère peuvent avoir CHAR ou VARCHAR comme type de données. En cas de différence, Amazon Redshift convertit *pattern* au type de données de l’*expression*. 

LIKE prend en charge les méta-caractères de correspondance de modèle suivants : 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_patternmatching_condition_like.html)

## Exemples
<a name="r_patternmatching_condition_like-examples"></a>

Le tableau suivant montre des exemples de correspondance de modèle avec LIKE :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_patternmatching_condition_like.html)

L’exemple suivant recherche toutes les villes dont le nom commence par « E » : 

```
select distinct city from users
where city like 'E%' order by city;
city
---------------
East Hartford
East Lansing
East Rutherford
East St. Louis
Easthampton
Easton
Eatontown
Eau Claire
...
```

L’exemple suivant recherche les utilisateurs dont le nom contient « ten » :

```
select distinct lastname from users
where lastname like '%ten%' order by lastname;
lastname
-------------
Christensen
Wooten
...
```

L’exemple suivant montre comment associer plusieurs modèles.

```
select distinct lastname from tickit.users
where lastname like 'Chris%' or lastname like '%Wooten' order by lastname;
lastname
-------------
Christensen
Christian
Wooten
...
```

L’exemple suivant recherche villes dont les troisième et quatrième caractères sont « ea ». La commande utilise ILIKE pour démontrer l’insensibilité à la casse : 

```
select distinct city from users where city ilike '__EA%' order by city;
city
-------------
Brea
Clearwater
Great Falls
Ocean City
Olean
Wheaton
(6 rows)
```

L’exemple suivant utilise la chaîne d’échappement par défaut (\$1\$1) pour rechercher les chaînes qui incluent « start\$1» (texte `start` suivi d’un trait de soulignement `_`) : 

```
select tablename, "column" from pg_table_def 
where "column" like '%start\\_%'
limit 5;

     tablename     |    column
-------------------+---------------
 stl_s3client      | start_time
 stl_tr_conflict   | xact_start_ts
 stl_undone        | undo_start_ts
 stl_unload_log    | start_time
 stl_vacuum_detail | start_row
(5 rows)
```

L’exemple suivant spécifie « ^ » comme caractère d’échappement, puis utilise ce dernier pour rechercher des chaînes qui incluent « start\$1 » (texte `start` suivi d’un trait de soulignement `_`) : 

```
select tablename, "column" from pg_table_def 
where "column" like '%start^_%' escape '^' 
limit 5;

     tablename     |    column
-------------------+---------------
 stl_s3client      | start_time
 stl_tr_conflict   | xact_start_ts
 stl_undone        | undo_start_ts
 stl_unload_log    | start_time
 stl_vacuum_detail | start_row
(5 rows)
```

L’exemple suivant utilise l’opérateur `~~*` pour effectuer une recherche non sensible à la casse (ILIKE) pour les villes commençant par « Ag ». 

```
select distinct city from users where city ~~* 'Ag%' order by city;
                   
city
------------
Agat	
Agawam	
Agoura Hills	
Aguadilla
```

# SIMILAR TO
<a name="pattern-matching-conditions-similar-to"></a>

L’opérateur SIMILAR TO met en correspondance une expression de chaîne, comme un nom de colonne, avec un modèle d’expression régulière SQL standard. Un modèle d’expression régulière SQL peut inclure un ensemble de méta-caractères de correspondance de modèle, y compris les deux pris en charge par l’opérateur [LIKE](r_patternmatching_condition_like.md). 

L’opérateur SIMILAR TO retourne true uniquement si son modèle correspond à l’ensemble de la chaîne, à la différence du comportement de l’expression régulière POSIX, où le modèle peut correspondre à n’importe quelle partie de la chaîne. 

SIMILAR TO effectue une correspondance sensible à la casse. 

**Note**  
La correspondance d’expression régulière à l’aide de SIMILAR TO est coûteuse en termes de calcul. Nous vous conseillons d’utiliser LIKE autant que possible, notamment lors du traitement d’un très grand nombre de lignes. Par exemple, les requêtes suivantes sont fonctionnellement identiques, mais la requête qui utilise LIKE s’exécute infiniment plus vite que la requête qui utilise une expression régulière :  

```
select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

## Syntaxe
<a name="pattern-matching-conditions-similar-to-synopsis"></a>

```
expression [ NOT ] SIMILAR TO pattern [ ESCAPE 'escape_char' ]
```

## Arguments
<a name="pattern-matching-conditions-similar-to-arguments"></a>

 *expression*   
Expression de caractère UTF-8 valide, comme un nom de colonne. 

SIMILAR TO  
SIMILAR TO effectue une correspondance sensible à la casse pour toute la chaîne de l’*expression*. 

 *pattern*   
Expression de caractères UTF-8 valide représentant un modèle d’expression régulière SQL standard. 

 *escape\$1char*   
Expression de caractères qui utilise une séquence d’échappement pour les méta-caractères du modèle. La valeur par défaut est deux barres obliques inverses (’\$1\$1 »). 

Si *pattern* ne contient pas de méta-caractères, le modèle représente uniquement la chaîne elle-même.

Les expressions de caractère peuvent avoir CHAR ou VARCHAR comme type de données. En cas de différence, Amazon Redshift convertit *pattern* au type de données de l’*expression*. 

SIMILAR TO prend en charge les méta-caractères de correspondance de modèle suivants : 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/pattern-matching-conditions-similar-to.html)

## Exemples
<a name="pattern-matching-conditions-similar-to-examples"></a>

Le tableau suivant illustre des exemples de correspondance de modèle à l’aide de SIMILAR TO :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/pattern-matching-conditions-similar-to.html)

L’exemple suivant recherche toutes les villes dont le nom contient « E » ou « H » : 

```
SELECT DISTINCT city FROM users
WHERE city SIMILAR TO '%E%|%H%' ORDER BY city LIMIT 5;

      city
-----------------
 Agoura Hills
 Auburn Hills
 Benton Harbor
 Beverly Hills
 Chicago Heights
```

L’exemple suivant utilise la chaîne d’échappement par défaut (« `\\` ») pour rechercher les chaînes qui incluent « `_` » :

```
SELECT tablename, "column" FROM pg_table_def
WHERE "column" SIMILAR TO '%start\\_%'
ORDER BY tablename, "column" LIMIT 5;

        tablename         |       column
--------------------------+---------------------
 stcs_abort_idle          | idle_start_time
 stcs_abort_idle          | txn_start_time
 stcs_analyze_compression | start_time
 stcs_auto_worker_levels  | start_level
 stcs_auto_worker_levels  | start_wlm_occupancy
```

Les exemples suivants spécifient « `^` » comme caractère d’échappement, puis utilise le caractère d’échappement pour rechercher des chaînes qui incluent « `_` » : 

```
SELECT tablename, "column" FROM pg_table_def
WHERE "column" SIMILAR TO '%start^_%' ESCAPE '^'
ORDER BY tablename, "column" LIMIT 5;

        tablename         |       column
--------------------------+---------------------
 stcs_abort_idle          | idle_start_time
 stcs_abort_idle          | txn_start_time
 stcs_analyze_compression | start_time
 stcs_auto_worker_levels  | start_level
 stcs_auto_worker_levels  | start_wlm_occupancy
```

# Opérateurs POSIX
<a name="pattern-matching-conditions-posix"></a>

Une expression régulière POSIX est une séquence de caractères qui spécifie un modèle de correspondance. Une chaîne correspond à une expression régulière si elle fait partie du jeu régulier décrit par l’expression régulière.

Les expressions régulières POSIX fournissent un moyen plus puissant pour la correspondance de modèle que les opérateurs [LIKE](r_patternmatching_condition_like.md) et [SIMILAR TO](pattern-matching-conditions-similar-to.md). Les modèles d’expressions régulières POSIX peuvent correspondre à une partie quelconque d’une chaîne, contrairement à l’opérateur SIMILAR TO, qui retourne true uniquement si son modèle correspond à la totalité de la chaîne.

**Note**  
La correspondance d’expressions régulières à l’aide des opérateurs POSIX est coûteuse en termes de calcul. Nous vous conseillons d’utiliser LIKE autant que possible, notamment lors du traitement d’un très grand nombre de lignes. Par exemple, les requêtes suivantes sont fonctionnellement identiques, mais la requête qui utilise LIKE s’exécute infiniment plus vite que la requête qui utilise une expression régulière :  

```
select count(*) from event where eventname ~ '.*(Ring|Die).*'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

## Syntaxe
<a name="pattern-matching-conditions-posix-synopsis"></a>

```
expression [ ! ] ~ pattern
```

## Arguments
<a name="pattern-matching-conditions-posix-arguments"></a>

 *expression*   
Expression de caractère UTF-8 valide, comme un nom de colonne. 

\$1  
Opérateur de négation. Ne correspond pas à l’expression régulière.

\$1  
Effectuez une correspondance sensible à la casse pour une sous-chaîne d’*expression*.   
`~~` est un synonyme pour [LIKE](r_patternmatching_condition_like.md).

 *pattern*   
Chaîne littérale qui représente un modèle d’expression régulière. 

Si *pattern* ne contient pas de caractères génériques, le modèle représente uniquement la chaîne elle-même.

Pour rechercher des chaînes qui incluent des méta-caractères, tels que « `. * | ? ` », et ainsi de suite, faites précéder le caractère de la séquence d’échappement composée de deux barres obliques inverses « ` \\`  »). Contrairement à `SIMILAR TO` et `LIKE`, la syntaxe des expressions régulières POSIX ne gère pas de caractère d’échappement défini par l’utilisateur. 

Les expressions de caractère peuvent avoir CHAR ou VARCHAR comme type de données. En cas de différence, Amazon Redshift convertit *pattern* au type de données de l’*expression*. 

Toutes les expressions de caractères peuvent avoir CHAR ou VARCHAR comme type de données. Si les expressions diffèrent par le type de données, Amazon Redshift les convertit au type de données de l’*expression*. 

Le modèle de correspondance POSIX prend en charge les méta-caractères suivants : 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/pattern-matching-conditions-posix.html)

Amazon Redshift prend en charge les classes de caractères POSIX suivantes. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/pattern-matching-conditions-posix.html)

 Amazon Redshift prend en charge les opérateurs suivants, influencés par Perl, dans les expressions régulières. Échappez l’opérateur à l’aide de deux barres obliques inverses («  »). (‘`\\`’).   

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/pattern-matching-conditions-posix.html)

## Exemples
<a name="pattern-matching-conditions-posix-synopsis-examples"></a>

Le tableau suivant montre des exemples de correspondance de modèle à l’aide des opérateurs POSIX :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/pattern-matching-conditions-posix.html)

L’exemple suivant recherche toutes les villes dont le nom contient `E` ou `H` : 

```
SELECT DISTINCT city FROM users
WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5;

      city
-----------------
 Agoura Hills
 Auburn Hills
 Benton Harbor
 Beverly Hills
 Chicago Heights
```

L’exemple suivant recherche toutes les villes dont le nom ne contient pas `E` ou `H` : 

```
SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5;

      city
-----------------
 Aberdeen	
 Abilene	
 Ada	
 Agat	
 Agawam
```

L’exemple suivant utilise la chaîne d’échappement (« `\\` ») pour rechercher les chaînes qui incluent un point. 

```
SELECT venuename FROM venue
WHERE venuename ~ '.*\\..*'
ORDER BY venueid;

          venuename
------------------------------
 St. Pete Times Forum
 Jobing.com Arena
 Hubert H. Humphrey Metrodome
 U.S. Cellular Field
 Superpages.com Center
 E.J. Nutter Center
 Bernard B. Jacobs Theatre
 St. James Theatre
```

# Condition de plage BETWEEN
<a name="r_range_condition"></a>

Une condition `BETWEEN` teste les expressions pour l’inclusion dans une plage de valeurs, à l’aide des mots-clés `BETWEEN` et `AND`. 

## Syntaxe
<a name="r_range_condition-synopsis"></a>

```
expression [ NOT ] BETWEEN expression AND expression
```

Les expressions peuvent être de type de données numeric, character ou datetime, mais elles doivent être compatibles. La plage est inclusive.

## Exemples
<a name="r_range_condition-examples"></a>

Le premier exemple comptabilise le nombre de transactions ayant enregistré des ventes de 2, 3 ou 4 billets : 

```
select count(*) from sales
where qtysold between 2 and 4;

count
--------
104021
(1 row)
```

La condition de la plage comprend les valeurs de début et de fin.

```
select min(dateid), max(dateid) from sales
where dateid between 1900 and 1910;

min  | max 
-----+-----
1900 | 1910
```

La première expression d’une condition de plage doit être la valeur inférieure et la deuxième expression la valeur supérieure. L’exemple suivant retourne toujours zéro ligne en raison des valeurs des expressions : 

```
select count(*) from sales
where qtysold between 4 and 2;

count
-------
0
(1 row)
```

Cependant, l’application du modificateur NOT inverse la logique et génère le nombre de toutes les lignes : 

```
select count(*) from sales
where qtysold not between 4 and 2;

count
--------
172456
(1 row)
```

La requête suivante retourne une liste des salles avec 20 000 à 50 000 places : 

```
select venueid, venuename, venueseats from venue
where venueseats between 20000 and 50000
order by venueseats desc;

venueid |       venuename               | venueseats
---------+-------------------------------+------------
116 | Busch Stadium                 |      49660
106 | Rangers BallPark in Arlington |      49115
96 | Oriole Park at Camden Yards   |      48876
...
(22 rows)
```

L’exemple suivant illustre l’utilisation de BETWEEN pour les valeurs de date :

```
select salesid, qtysold, pricepaid, commission, saletime 
from sales 
where eventid between 1000 and 2000 
   and saletime between '2008-01-01' and '2008-01-03'
order by saletime asc;

salesid | qtysold | pricepaid | commission |   saletime
--------+---------+-----------+------------+---------------
  65082 |       4 |       472 |       70.8 | 1/1/2008 06:06
 110917 |       1 |       337 |      50.55 | 1/1/2008 07:05
 112103 |       1 |       241 |      36.15 | 1/2/2008 03:15
 137882 |       3 |      1473 |     220.95 | 1/2/2008 05:18
  40331 |       2 |        58 |        8.7 | 1/2/2008 05:57
 110918 |       3 |      1011 |     151.65 | 1/2/2008 07:17
  96274 |       1 |       104 |       15.6 | 1/2/2008 07:18
 150499 |       3 |       135 |      20.25 | 1/2/2008 07:20
  68413 |       2 |       158 |       23.7 | 1/2/2008 08:12
```

Notez que même si la plage de BETWEEN est inclusive, les dates ont par défaut une valeur horaire de 00:00:00. La seule ligne valide du 3 janvier pour l’exemple de requête serait une ligne dont saletime est `1/3/2008 00:00:00`.

# Condition null
<a name="r_null_condition"></a>

La condition null teste les valeurs null, lorsqu’une valeur est manquante ou inconnue. 

## Syntaxe
<a name="r_null_condition-synopsis"></a>

```
expression IS [ NOT ] NULL
```

## Arguments
<a name="r_null_condition-arguments"></a>

 *expression*   
N’importe quelle expression telle qu’une colonne. 

IS NULL   
Condition vraie lorsque la valeur de l’expression est null et fausse quand elle a une valeur. 

 IS NOT NULL   
Condition fausse lorsque la valeur de l’expression est null et vraie quand elle a une valeur. 

## Exemple
<a name="r_null_condition-example"></a>

Cet exemple indique le nombre de fois où la table SALES contient null dans le champ QTYSOLD : 

```
select count(*) from sales
where qtysold is null;
count
-------
0
(1 row)
```

# Condition EXISTS
<a name="r_exists_condition"></a>

Les conditions EXIST testent l’existence de lignes dans une sous-requête et retournent la valeur true si la requête renvoie au moins une ligne. Si NOT n’est pas spécifié, la condition retourne true si une sous-requête ne renvoie aucune ligne.

## Syntaxe
<a name="r_exists_condition-synopsis"></a>

```
[ NOT ] EXISTS (table_subquery)
```

## Arguments
<a name="r_exists_condition-arguments"></a>

 EXISTS   
Est vraie lorsque la *table\$1subquery* retourne au moins une ligne.

NOT EXISTS   
Est vraie lorsque la *table\$1subquery* ne retourne pas de lignes.

 *table\$1subquery*   
Une sous-requête qui analyse une table avec une ou plusieurs colonnes et une ou plusieurs lignes.

## Exemple
<a name="r_exists_condition-example"></a>

Cet exemple retourne tous les identificateurs de date, une fois chacun, pour chaque date où une vente a eu lieu :

```
select dateid from date
where exists (
select 1 from sales
where date.dateid = sales.dateid
)
order by dateid;

dateid
--------
1827
1828
1829
...
```

# Condition IN
<a name="r_in_condition"></a>

Une condition IN teste une valeur d’adhésion dans une sous-requête ou un ensemble de valeurs. 

## Syntaxe
<a name="r_in_condition-synopsis"></a>

```
expression [ NOT ] IN (expr_list | table_subquery)
```

## Arguments
<a name="r_in_condition-arguments"></a>

 *expression*   
Une expression de type numeric, character ou datetime évaluée par rapport à *expr\$1list* ou *table\$1subquery* et qui doit être compatible avec le type de données de cette liste ou sous-requête. 

 *expr\$1list*   
Une ou plusieurs expressions délimitées par des virgules, ou un ou plusieurs ensembles d’expressions délimitées par des virgules et entourées par des parenthèses. 

 *table\$1subquery*   
Une sous-requête qui correspond à une table avec une ou plusieurs lignes, mais est limitée à une seule colonne dans la liste de sélection. 

IN \$1 NOT IN   
IN retourne la valeur true si l’expression est membre de la liste d’expressions ou de la requête. NOT IN retourne la valeur true si l’expression n’est pas membre. IN et NOT IN retournent la valeur NULL et aucune ligne n’est retournée dans les cas suivants : si *expression* génère null, s’il n’y a aucune *expr\$1list* correspondante ou si les valeurs de *table\$1subquery* et au moins l’une de ces lignes de comparaison entraînent une valeur null. 

## Exemples
<a name="r_in_condition-examples"></a>

Les conditions suivantes sont vraies uniquement pour les valeurs répertoriées : 

```
qtysold in (2, 4, 5)
date.day in ('Mon', 'Tues')
date.month not in ('Oct', 'Nov', 'Dec')
```

## Optimisation pour les grandes listes IN
<a name="r_in_condition-optimization-for-large-in-lists"></a>

Afin d’optimiser les performances des requêtes, une liste IN qui inclut plus de 10 valeurs est analysée en interne comme un ensemble (array) scalaire. Les listes IN avec moins de 10 valeurs sont évaluées comme une série de prédicats OR. Cette optimisation est prise en charge pour les types de données SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP et TIMESTAMPTZ. 

Examinez la sortie EXPLAIN de la requête pour voir l’effet de cette optimisation. Par exemple : 

```
explain select * from sales
QUERY PLAN
--------------------------------------------------------------------
XN Seq Scan on sales  (cost=0.00..6035.96 rows=86228 width=53)
Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[]))
(2 rows)
```

# Commandes SQL
<a name="c_SQL_commands"></a>

Le langage SQL se compose des commandes que vous utilisez pour créer et manipuler des objets de base de données, exécuter des requêtes, charger des tables et modifier les données des tables.

Amazon Redshift est basé sur PostgreSQL. Amazon Redshift et PostgreSQL présentent un certain nombre de différences importantes dont vous devez être conscient lorsque vous concevez et développez vos applications d’entrepôt des données. Pour plus d’informations sur les différences entre Amazon Redshift SQL et PostgreSQL, consultez [Amazon Redshift et PostgreSQL](c_redshift-and-postgres-sql.md).

**Note**  
La taille maximale d’une instruction SQL est de 16 Mo.

**Topics**
+ [ABORT](r_ABORT.md)
+ [ALTER DATABASE](r_ALTER_DATABASE.md)
+ [ALTER DATASHARE](r_ALTER_DATASHARE.md)
+ [ALTER DEFAULT PRIVILEGES](r_ALTER_DEFAULT_PRIVILEGES.md)
+ [ALTER EXTERNAL SCHEMA](r_ALTER_EXTERNAL_SCHEMA.md)
+ [ALTER EXTERNAL VIEW](r_ALTER_EXTERNAL_VIEW.md)
+ [ALTER FUNCTION](r_ALTER_FUNCTION.md)
+ [ALTER GROUP](r_ALTER_GROUP.md)
+ [ALTER IDENTITY PROVIDER](r_ALTER_IDENTITY_PROVIDER.md)
+ [MODIFIER LA POLITIQUE DE MASQUAGE](r_ALTER_MASKING_POLICY.md)
+ [ALTER MATERIALIZED VIEW](r_ALTER_MATERIALIZED_VIEW.md)
+ [ALTER RLS POLICY](r_ALTER_RLS_POLICY.md)
+ [ALTER ROLE](r_ALTER_ROLE.md)
+ [ALTER PROCEDURE](r_ALTER_PROCEDURE.md)
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [ALTER SYSTEM](r_ALTER_SYSTEM.md)
+ [ALTER TABLE](r_ALTER_TABLE.md)
+ [ALTER TABLE APPEND](r_ALTER_TABLE_APPEND.md)
+ [MODIFIER LE MODÈLE](r_ALTER_TEMPLATE.md)
+ [ALTER USER](r_ALTER_USER.md)
+ [ANALYSE](r_ANALYZE.md)
+ [ANALYZE COMPRESSION](r_ANALYZE_COMPRESSION.md)
+ [ATTACH MASKING POLICY](r_ATTACH_MASKING_POLICY.md)
+ [ATTACH RLS POLICY](r_ATTACH_RLS_POLICY.md)
+ [BEGIN](r_BEGIN.md)
+ [CALL](r_CALL_procedure.md)
+ [ANNULER](r_CANCEL.md)
+ [CLOSE](close.md)
+ [COMMENT](r_COMMENT.md)
+ [COMMIT](r_COMMIT.md)
+ [COPY](r_COPY.md)
+ [CREATE DATABASE](r_CREATE_DATABASE.md)
+ [CREATE DATASHARE](r_CREATE_DATASHARE.md)
+ [CREATE EXTERNAL FUNCTION](r_CREATE_EXTERNAL_FUNCTION.md)
+ [CREATE EXTERNAL MODEL](r_create_external_model.md)
+ [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)
+ [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)
+ [CREATE EXTERNAL VIEW](r_CREATE_EXTERNAL_VIEW.md)
+ [CREATE FUNCTION](r_CREATE_FUNCTION.md)
+ [CREATE GROUP](r_CREATE_GROUP.md)
+ [CREATE IDENTITY PROVIDER](r_CREATE_IDENTITY_PROVIDER.md)
+ [CREATE LIBRARY](r_CREATE_LIBRARY.md)
+ [CREATE MASKING POLICY](r_CREATE_MASKING_POLICY.md)
+ [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)
+ [CREATE MODEL](r_CREATE_MODEL.md)
+ [CREATE PROCEDURE](r_CREATE_PROCEDURE.md)
+ [CREATE RLS POLICY](r_CREATE_RLS_POLICY.md)
+ [CREATE ROLE](r_CREATE_ROLE.md)
+ [CREATE SCHEMA](r_CREATE_SCHEMA.md)
+ [CREATE TABLE](r_CREATE_TABLE_NEW.md)
+ [CREATE TABLE AS](r_CREATE_TABLE_AS.md)
+ [CRÉER UN MODÈLE](r_CREATE_TEMPLATE.md)
+ [CREATE USER](r_CREATE_USER.md)
+ [CREATE VIEW](r_CREATE_VIEW.md)
+ [DEALLOCATE](r_DEALLOCATE.md)
+ [DECLARE](declare.md)
+ [DELETE](r_DELETE.md)
+ [DESC DATASHARE](r_DESC_DATASHARE.md)
+ [DESC IDENTITY PROVIDER](r_DESC_IDENTITY_PROVIDER.md)
+ [DETACH MASKING POLICY](r_DETACH_MASKING_POLICY.md)
+ [DETACH RLS POLICY](r_DETACH_RLS_POLICY.md)
+ [DROP DATABASE](r_DROP_DATABASE.md)
+ [DROP DATASHARE](r_DROP_DATASHARE.md)
+ [DROP EXTERNAL VIEW](r_DROP_EXTERNAL_VIEW.md)
+ [DROP FUNCTION](r_DROP_FUNCTION.md)
+ [DROP GROUP](r_DROP_GROUP.md)
+ [DROP IDENTITY PROVIDER](r_DROP_IDENTITY_PROVIDER.md)
+ [DROP LIBRARY](r_DROP_LIBRARY.md)
+ [DROP MASKING POLICY](r_DROP_MASKING_POLICY.md)
+ [DROP MODEL](r_DROP_MODEL.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)
+ [DROP PROCEDURE](r_DROP_PROCEDURE.md)
+ [DROP RLS POLICY](r_DROP_RLS_POLICY.md)
+ [DROP ROLE](r_DROP_ROLE.md)
+ [DROP SCHEMA](r_DROP_SCHEMA.md)
+ [DROP TABLE](r_DROP_TABLE.md)
+ [MODÈLE DE DÉPÔT](r_DROP_TEMPLATE.md)
+ [DROP USER](r_DROP_USER.md)
+ [DROP VIEW](r_DROP_VIEW.md)
+ [FIN](r_END.md)
+ [EXECUTE](r_EXECUTE.md)
+ [EXPLAIN](r_EXPLAIN.md)
+ [FETCH](fetch.md)
+ [GRANT](r_GRANT.md)
+ [INSERT](r_INSERT_30.md)
+ [INSERT (table externe)](r_INSERT_external_table.md)
+ [LOCK](r_LOCK.md)
+ [MERGE](r_MERGE.md)
+ [PREPARE](r_PREPARE.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [RESET](r_RESET.md)
+ [REVOKE](r_REVOKE.md)
+ [ROLLBACK](r_ROLLBACK.md)
+ [SELECT](r_SELECT_synopsis.md)
+ [SELECT INTO](r_SELECT_INTO.md)
+ [SET](r_SET.md)
+ [SET SESSION AUTHORIZATION](r_SET_SESSION_AUTHORIZATION.md)
+ [SET SESSION CHARACTERISTICS](r_SET_SESSION_CHARACTERISTICS.md)
+ [MONTRER](r_SHOW.md)
+ [AFFICHER LES SUBVENTIONS DANS LA COLONNE](r_SHOW_COLUMN_GRANTS.md)
+ [SHOW COLUMNS](r_SHOW_COLUMNS.md)
+ [AFFICHER LES CONTRAINTES](r_SHOW_CONSTRAINTS.md)
+ [SHOW EXTERNAL TABLE](r_SHOW_EXTERNAL_TABLE.md)
+ [SHOW DATABASES](r_SHOW_DATABASES.md)
+ [AFFICHER LES FONCTIONS](r_SHOW_FUNCTIONS.md)
+ [SHOW GRANTS](r_SHOW_GRANTS.md)
+ [SHOW MODEL](r_SHOW_MODEL.md)
+ [SHOW DATASHARES](r_SHOW_DATASHARES.md)
+ [AFFICHER LES PARAMÈTRES](r_SHOW_PARAMETERS.md)
+ [AFFICHER LES POLITIQUES](r_SHOW_POLICIES.md)
+ [SHOW PROCEDURE](r_SHOW_PROCEDURE.md)
+ [AFFICHER LES PROCÉDURES](r_SHOW_PROCEDURES.md)
+ [SHOW SCHEMAS](r_SHOW_SCHEMAS.md)
+ [SHOW TABLE](r_SHOW_TABLE.md)
+ [SHOW TABLES](r_SHOW_TABLES.md)
+ [AFFICHER LE MODÈLE](r_SHOW_TEMPLATE.md)
+ [AFFICHER LES MODÈLES](r_SHOW_TEMPLATES.md)
+ [SHOW VIEW](r_SHOW_VIEW.md)
+ [START TRANSACTION](r_START_TRANSACTION.md)
+ [TRUNCATE](r_TRUNCATE.md)
+ [UNLOAD](r_UNLOAD.md)
+ [UPDATE](r_UPDATE.md)
+ [USE](r_USE_command.md)
+ [VACUUM](r_VACUUM_command.md)

# ABORT
<a name="r_ABORT"></a>

Arrête la transaction en cours d’exécution et ignore toutes les mises à jour effectuées par cette transaction. ABORT n’a aucun effet sur les transactions déjà terminées.

Cette commande effectue la même fonction que la commande ROLLBACK. Pour obtenir des informations, consultez [ROLLBACK](r_ROLLBACK.md).

## Syntaxe
<a name="r_ABORT-synopsis"></a>

```
ABORT [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_ABORT-parameters"></a>

WORK  
Mot-clé facultatif.

TRANSACTION  
Mot-clé facultatif ; WORK et TRANSACTION sont synonymes.

## Exemple
<a name="r_ABORT-example"></a>

L’exemple suivant crée une table, puis démarre une transaction où les données sont insérées dans la table. La commande ABORT annule ensuite l’insertion des données pour laisser la table vide.

La commande suivante crée un exemple de table appelée MOVIE\$1GROSS :

```
create table movie_gross( name varchar(30), gross bigint );
```

La prochaine série de commandes démarre une transaction qui insère deux lignes de données dans la table :

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

Puis, la commande suivante sélectionne les données de la table pour montrer qu’elles ont été correctement insérées :

```
select * from movie_gross;
```

La sortie de la commande montre que les deux lignes ont été insérées avec succès :

```
         name           |  gross
------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

Cette commande restaure les modifications des données à l’emplacement où la transaction a commencé :

```
abort;
```

La sélection de données de la table affiche maintenant une table vide :

```
select * from movie_gross;

 name | gross
------+-------
(0 rows)
```

# ALTER DATABASE
<a name="r_ALTER_DATABASE"></a>

Modifie les attributs d’une base de données.

## Privilèges requis
<a name="r_ALTER_DATABASE-privileges"></a>

Pour utiliser ALTER DATABASE, l’un des privilèges suivants est requis.
+ Superuser
+ Utilisateurs disposant du privilège ALTER DATABASE
+ Propriétaire de la base de données

## Syntaxe
<a name="r_ALTER_DATABASE-synopsis"></a>

```
ALTER DATABASE database_name
{ 
  RENAME TO new_name
  | OWNER TO new_owner
  | [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
| INTEGRATION
 { 
  REFRESH { { ALL | INERROR } TABLES [ IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] }
   | SET 
     [ QUERY_ALL_STATES [=] { TRUE | FALSE } ] 
     [ ACCEPTINVCHARS [=] { TRUE | FALSE } ] 
     [ REFRESH_INTERVAL <interval> ]
     [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
     [ HISTORY_MODE [=] {TRUE | FALSE} [ FOR { {ALL} TABLES [IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] } ] ]
 }
}
```

## Parameters
<a name="r_ALTER_DATABASE-parameters"></a>

 *database\$1name*   
Nom de la base de données à modifier. Généralement, vous modifiez une base de données à laquelle vous n’êtes pas connecté ; quoi qu’il en soit, les modifications ne prennent effet que lors des séances suivantes. Vous pouvez modifier le propriétaire de la base de données, mais vous ne pouvez pas le renommer :  

```
alter database tickit rename to newtickit;
ERROR:  current database may not be renamed
```

RENAME TO   
Renomme la base de données spécifiée. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md). Vous ne pouvez pas renommer les bases de données dev, padb\$1harvest, template0, template1 ou sys:internal, et vous ne pouvez pas renommer la base de données active. Seul le propriétaire de la base de données ou un [superuser](r_superusers.md#def_superusers) peut renommer une base de données ; les propriétaires qui ne sont pas des super-utilisateurs doivent aussi avoir le privilège CREATEDB.

 *nouveau\$1nom*   
Nouveau nom de la base de données.

OWNER TO   
Modifie le propriétaire de la base de données spécifiée. Vous pouvez modifier le propriétaire de la base de données active ou d’une autre base de données. Seul un super-utilisateur peut changer le propriétaire.

 *nouveau\$1propriétaire*   
Nouveau propriétaire de la base de données. Le nouveau propriétaire doit être un utilisateur de base de données existant avec des privilèges en écriture. Pour plus d’informations sur les privilèges d’utilisateur, consultez [GRANT](r_GRANT.md).

CONNECTION LIMIT \$1 *limite* \$1 UNLIMITED \$1   
Le nombre maximum de connexions à la base de données que les utilisateurs sont autorisés à ouvrir simultanément. La limite n’est pas appliquée pour les super-utilisateurs. Utilisez le mot-clé UNLIMITED pour autoriser le nombre maximum de connexions simultanées. Une limite sur le nombre de connexions pour chaque utilisateur peut également s’appliquer. Pour plus d'informations, consultez [CREATE USER](r_CREATE_USER.md). La valeur par défaut est UNLIMITED. Pour afficher les connexions en cours, interrogez la vue système [STV\$1SESSIONS](r_STV_SESSIONS.md).  
Si les deux limites de connexion (utilisateurs et base de données) s’appliquent, un emplacement de connexion inutilisé situé entre les deux limites doit également être disponible lorsqu’un utilisateur tente de se connecter.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Clause spécifiant si la recherche de chaînes ou la comparaison est sensible à la casse ou non.   
Vous pouvez modifier la sensibilité à la casse de la base de données active même si elle est vide.  
Vous devez disposer de l’autorisation ALTER sur la base de données active pour modifier la sensibilité à la casse. Les super-utilisateurs ou propriétaires de base de données disposant de l’autorisation CREATE DATABASE peuvent également modifier la sensibilité à la casse de la base de données.  
CASE\$1SENSITIVE et CS sont interchangeables et donnent les mêmes résultats. De même, CASE\$1INSENSITIVE et CI sont interchangeables et donnent les mêmes résultats.

ISOLATION LEVEL \$1 SNAPSHOT \$1 SERIALIZABLE \$1  
Clause qui spécifie le niveau d’isolation utilisé lorsque les requêtes sont exécutées sur une base de données. Pour de plus amples informations sur les niveaux d’isolation, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md).  
+ Isolation SNAPSHOT : offre un niveau d’isolation avec protection contre les conflits de mise à jour et de suppression 
+ Isolation SERIALIZABLE : offre une mise en série complète pour les transactions simultanées.
Tenez compte des éléments suivants lorsque vous modifiez le niveau d’isolation d’une base de données :  
+ Vous devez disposer du privilège super-utilisateur ou CREATE DATABASE sur la base de données active pour modifier le niveau d’isolation de la base de données.
+ Vous ne pouvez pas modifier le niveau d’isolation de la base de données `dev`. 
+ Vous ne pouvez pas modifier le niveau d’isolation au sein d’un bloc de transaction.
+ La commande de modification du niveau d’isolation échoue si d’autres utilisateurs sont connectés à la base de données.
+ La commande de modification du niveau d’isolation peut modifier les paramètres de niveau d’isolation de la séance en cours.

INTEGRATION  
Modification d’une base de données d’intégration zéro ETL.

REFRESH \$1\$1 ALL \$1 INERROR \$1 TABLES [IN SCHEMA *schema* [, ...]] \$1 TABLE *schema.table* [, ...]\$1  
Clause spécifiant si Amazon Redshift actualisera toutes les tables ou les tables présentant des erreurs dans le schéma ou la table spécifiés. L’actualisation déclenchera la réplication complète des tables du schéma ou de la table spécifiés à partir de la base de données source.  
Pour plus d’informations, consultez [Intégrations zéro ETL](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.html) dans le *Guide de gestion Amazon Redshift*. Pour plus d’informations sur les statuts d’intégration, consultez [SVV\$1INTEGRATION\$1TABLE\$1STATE](r_SVV_INTEGRATION_TABLE_STATE.md) et [SVV\$1INTEGRATION](r_SVV_INTEGRATION.md).

QUERY\$1ALL\$1STATES [=] \$1 TRUE \$1 FALSE \$1  
La clause QUERY\$1ALL\$1STATES indique si les tables d’intégration zéro ETL peuvent être interrogées dans tous les états (`Synced`, `Failed`, `ResyncRequired` et `ResyncInitiated`). Par défaut, une table d’intégration zéro ETL ne peut être interrogée que dans son état `Synced`.

ACCEPTINVCHARS [=] \$1 TRUE \$1 FALSE \$1  
La clause ACCEPTINVCHARS indique si les tables d’intégration zéro ETL continuent à être ingérées lorsque des caractères non valides sont détectés pour le type de données VARCHAR. Lorsque des caractères non valides sont détectés, ils sont remplacés par un caractère `?` par défaut.

REFRESH\$1INTERVAL <interval>  
La clause REFRESH\$1INTERVAL définit l’intervalle de temps approximatif, en secondes, pour actualiser les données de la source zéro ETL vers la base de données cible. La valeur `interval` peut être définie entre 0 et 432 000 secondes (5 jours) pour les intégrations zéro ETL dont le type de source est Aurora MySQL, Aurora PostgreSQL ou RDS for MySQL. Pour les intégrations zéro ETL Amazon DynamoDB, la valeur `interval` peut être définie entre 900 et 432 000 secondes (15 minutes et 5 jours).  
Pour plus d’informations sur la création de bases de données avec des intégrations zéro ETL, consultez [Création de bases de données de destination dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html) dans le *Guide de gestion Amazon Redshift*.

TRUNCATECOLUMNS [=] \$1 TRUE \$1 FALSE \$1  
La clause TRUNCATECOLUMNS indique si les tables d’intégration zéro ETL continuent à être ingérées lorsque les valeurs des attributs de colonne VARCHAR ou SUPER dépassent les limites. Avec `TRUE`, les valeurs sont tronquées pour tenir dans la colonne et les valeurs des attributs JSON débordants sont tronquées pour tenir dans la colonne SUPER.

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1 [ FOR \$1 \$1ALL\$1 TABLES [IN SCHEMA schema [, ...]] \$1 TABLE schema.table [, ...]\$1 ]  
Clause spécifiant si Amazon Redshift définira le mode historique pour toutes les tables ou les tables du schéma spécifié participant à l’intégration zéro ETL. Cette option s’applique uniquement aux bases de données créées pour une intégration zéro ETL.  
La clause HISTORY\$1MODE peut être définie sur `TRUE` ou `FALSE`. La valeur par défaut est `FALSE`. L’activation ou la désactivation du mode historique ne s’applique qu’aux tables en état `Synced`. Pour plus d’informations sur HISTORY\$1MODE, consultez [Mode historique](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html) dans le *Guide de gestion Amazon Redshift*.

## Notes d’utilisation
<a name="r_ALTER_DATABASE-usage-notes"></a>

Les commandes ALTER DATABASE s’appliquent aux séances ultérieures, pas aux séances en cours. Vous devez vous reconnecter à la base de données modifiée pour voir l’effet de la modification.

## Exemples
<a name="r_ALTER_DATABASE-examples"></a>

L’exemple suivant renomme une base de données nommée TICKIT\$1SANDBOX en TICKIT\$1TEST : 

```
alter database tickit_sandbox rename to tickit_test;
```

L’exemple suivant modifie le propriétaire de la base de données TICKIT (la base de données active) en DWUSER : 

```
alter database tickit owner to dwuser;
```

L’exemple suivant modifie la sensibilité à la casse de la base de données sampledb :

```
ALTER DATABASE sampledb COLLATE CASE_INSENSITIVE;
```

L’exemple suivant montre comment modifier une base de données nommée **sampledb** avec un niveau d’isolation SNAPSHOT.

```
ALTER DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

L’exemple suivant actualise les tables **schema1.sample\$1table1** et **schema2.sample\$1table2** dans la base de données **sample\$1integration\$1db** dans le cadre de votre intégration zéro ETL.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH TABLE schema1.sample_table1, schema2.sample_table2;
```

L’exemple suivant actualise toutes les tables synchronisées et défaillantes au sein de votre intégration zéro ETL.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH ALL tables;
```

L’exemple suivant définit l’intervalle d’actualisation pour les intégrations zéro ETL à 600 secondes.

```
ALTER DATABASE sample_integration_db INTEGRATION SET REFRESH_INTERVAL 600;
```

L’exemple suivant actualise toutes les tables en `ErrorState` dans le schéma **sample\$1schema**.

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH INERROR TABLES in SCHEMA sample_schema;
```

L’exemple suivant active le mode historique pour la table `myschema.table1`.

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true FOR TABLE myschema.table1
```

L’exemple suivant active le mode historique pour toutes les tables dans `myschema`. 

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true for ALL TABLES IN SCHEMA myschema
```

# ALTER DATASHARE
<a name="r_ALTER_DATASHARE"></a>

Modifie la définition d’une unité de partage des données. Vous pouvez ajouter ou supprimer des objets à l’aide de la commande ALTER DATASHARE. Vous ne pouvez modifier une unité de partage des données que dans la base de données actuelle. Ajoutez ou supprimez des objets de la base de données associée à une unité de partage des données. Le propriétaire de l’unité de partage des données disposant des autorisations requises sur les objets d’unité de partage des données à ajouter ou à supprimer peut modifier l’unité de partage des données.

## Privilèges requis
<a name="r_ALTER_DATASHARE-privileges"></a>

Les privilèges suivants sont requis pour ALTER DATASHARE :
+ Super-utilisateur.
+ Utilisateur disposant du privilège ALTER DATASHARE.
+ Utilisateurs disposant du privilège ALTER ou ALL sur l’unité de partage des données.
+ Pour ajouter des objets spécifiques à une unité de partage des données, les utilisateurs doivent avoir le privilège sur les objets. Dans ce cas, les utilisateurs doivent être les propriétaires des objets ou disposer des privilèges SELECT, USAGE ou ALL sur les objets. 

## Syntaxe
<a name="r_ALTER_DATASHARE-synopsis"></a>

La syntaxe suivante illustre comment ajouter ou supprimer des objets à l’unité de partage des données.

```
ALTER DATASHARE datashare_name { ADD | REMOVE } {
TABLE schema.table [, ...]
| SCHEMA schema [, ...]
| FUNCTION schema.sql_udf (argtype,...) [, ...]
| ALL TABLES IN SCHEMA schema [, ...]
| ALL FUNCTIONS IN SCHEMA schema [, ...] }
```

La syntaxe suivante montre la manière de configurer les propriétés de l’unité de partage des données.

```
ALTER DATASHARE datashare_name {
[ SET PUBLICACCESSIBLE [=] TRUE | FALSE ]
[ SET INCLUDENEW [=] TRUE | FALSE FOR SCHEMA schema ] }
```

## Parameters
<a name="r_ALTER_DATASHARE-parameters"></a>

*datashare\$1name*  
Nom de l’unité de partage des données à modifier. 

ADD \$1 REMOVE  
Clause spécifiant s’il faut ajouter ou supprimer des objets de l’unité de partage des données.

TABLE *schema*.*table* [, ...]  
Nom de la table ou de la vue dans le schéma spécifié à ajouter à l’unité de partage des données.

SCHEMA *schema* [, ...]   
Nom du schéma à ajouter à l’unité de partage des données.

FUNCTION *schema*.*sql\$1udf* (argtype,...) [, ...]  
Nom de la fonction SQL définie par l’utilisateur avec des types d’arguments à ajouter à l’unité de partage des données.

ALL TABLES IN SCHEMA *schéma* [, ...]   
Clause spécifiant s’il faut ajouter toutes les tables et vues du schéma spécifié à l’unité de partage des données.

ALL FUNCTIONS IN SCHEMA *schema* [, ...] \$1  
Clause spécifiant l’ajout de toutes les fonctions du schéma spécifié à l’unité de partage des données.

[ SET PUBLICACCESSIBLE [=] TRUE \$1 FALSE ]  
Clause spécifiant si une unité de partage des données peut être partagée avec des clusters accessibles au public.

[ SET INCLUDENEW [=] TRUE \$1 FALSE FOR SCHEMA *schema* ]  
Clause qui indique s'il faut ajouter au partage de données les futures tables, vues ou fonctions SQL définies par l'utilisateur (UDFs) créées dans le schéma spécifié. Les tables, les vues ou le code SQL UDFs actuels du schéma spécifié ne sont pas ajoutés au partage de données. Seuls les super-utilisateurs peuvent modifier cette propriété pour chaque paire de datashare-schéma. Par défaut, la clause INCLUDENEW est false. 

## Notes d’utilisation d’ALTER DATASHARE
<a name="r_ALTER_DATASHARE_usage"></a>
+ Les utilisateurs suivants peuvent modifier une unité de partage des données :
  + Super-utilisateur
  + Le propriétaire de l’unité de partage des données
  + Les utilisateurs disposant du privilège ALTER ou ALL sur l’unité de partage des données
+ Pour ajouter des objets spécifiques à une unité de partage des données, ces utilisateurs doivent avoir le privilège adéquat sur les objets. Les utilisateurs doivent être les propriétaires des objets ou avoir les privilèges SELECT, USAGE ou ALL sur les objets.
+ Vous pouvez partager des schémas, des tables, des vues standard, des vues à liaison tardive, des vues matérialisées et des fonctions SQL définies par l'utilisateur (). UDFs Ajoutez d’abord un schéma à une unité de partage des données avant d’ajouter d’autres objets dans le schéma. 

  Lorsque vous ajoutez un schéma, Amazon Redshift n’ajoute pas tous les objets qu’il contient. Vous devez les ajouter explicitement. 
+ Nous vous recommandons de créer des AWS Data Exchange partages de données avec le paramètre accessible au public activé.
+ En général, nous vous recommandons de ne pas modifier un partage de AWS Data Exchange données pour désactiver l'accessibilité publique à l'aide de l'instruction ALTER DATASHARE. Si vous le faites, les Comptes AWS qui ont accès à l’unité de partage des données perdent l’accès si leurs clusters sont accessibles au public. L'exécution de ce type de modification peut enfreindre les termes des produits de données dans AWS Data Exchange. Pour une exception à cette recommandation, reportez-vous à ce qui suit.

  L'exemple suivant montre une erreur lorsqu'un partage de AWS Data Exchange données est créé alors que le paramètre est désactivé.

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ERROR:  Alter of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value 'c670ba4db22f4b'
  ```

  Pour autoriser la modification d'un AWS Data Exchange partage de données afin de désactiver le paramètre accessible au public, définissez la variable suivante et réexécutez l'instruction ALTER DATASHARE.

  ```
  SET datashare_break_glass_session_var to 'c670ba4db22f4b';
  ```

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ```

  Dans ce cas, Amazon Redshift génère une valeur aléatoire à usage unique pour définir la variable de séance afin d’autoriser ALTER DATASHARE SET PUBLICACCESSIBLE FALSE pour une unité de partage des données AWS Data Exchange .

## Exemples
<a name="r_ALTER_DATASHARE_examples"></a>

L’exemple suivant ajoute le schéma `public` à l’unité de partage des données `salesshare`.

```
ALTER DATASHARE salesshare ADD SCHEMA public;
```

L’exemple suivant ajoute la table `public.tickit_sales_redshift` à l’unité de partage des données `salesshare`.

```
ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
```

L’exemple suivant ajoute toutes les tables à l’unité de partage des données `salesshare`.

```
ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
```

L’exemple suivant supprime la table `public.tickit_sales_redshift` de l’exemple de l’unité de partage des données `salesshare`.

```
ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
```

# ALTER DEFAULT PRIVILEGES
<a name="r_ALTER_DEFAULT_PRIVILEGES"></a>

Définit le jeu par défaut des autorisations d’accès à appliquer aux objets créés à l’avenir par l’utilisateur spécifié. Par défaut, les utilisateurs peuvent ne modifier que leurs propres autorisations d’accès par défaut. Seul un super-utilisateur peut spécifier les autorisations par défaut d’autres utilisateurs.

Vous pouvez appliquer les privilèges par défaut à des rôles, des utilisateurs ou des groupes d’utilisateurs. Vous pouvez définir les autorisations par défaut globalement pour tous les objets créés dans la base de données active ou pour les objets créés uniquement dans les schémas spécifiés. 

Les autorisations par défaut s’appliquent uniquement aux nouveaux objets. L’exécution d’ALTER DEFAULT PRIVILEGES ne modifie pas les autorisations sur les objets existants. Pour accorder des autorisations sur tous les objets actuels et futurs créés par n’importe quel utilisateur au sein d’une base de données ou d’un schéma, consultez [Autorisations étendues](https://docs.aws.amazon.com/redshift/latest/dg/t_scoped-permissions.html). 

Pour afficher les informations sur les privilèges par défaut des utilisateurs de base de données, interrogez la table catalogue système [PG\$1DEFAULT\$1ACL](r_PG_DEFAULT_ACL.md). 

Pour plus d’informations sur les privilèges, consultez [GRANT](r_GRANT.md).

## Privilèges requis
<a name="r_ALTER_DEFAULT_PRIVILEGES-privileges"></a>

Les privilèges suivants sont requis pour ALTER DEFAULT PRIVILEGES :
+ Superuser
+ Utilisateurs disposant du privilège ALTER DEFAULT PRIVILEGES
+ Utilisateurs modifiant leurs propres privilèges d’accès par défaut
+ Utilisateurs définissant des privilèges pour les schémas pour lesquels ils disposent de privilèges d’accès

## Syntaxe
<a name="r_ALTER_DEFAULT_PRIVILEGES-synopsis"></a>

```
ALTER DEFAULT PRIVILEGES
    [ FOR USER target_user [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    grant_or_revoke_clause

where grant_or_revoke_clause is one of:

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE  { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]
```

## Parameters
<a name="r_ALTER_DEFAULT_PRIVILEGES-parameters"></a>

FOR USER *utilisateur\$1cible*  <a name="default-for-user"></a>
Facultatif. Nom de l’utilisateur pour lequel les privilèges par défaut sont définis. Seul un super-utilisateur peut spécifier les privilèges par défaut d’autres utilisateurs. La valeur par défaut est l’utilisateur actif.

IN SCHEMA *nom\$1schéma*   <a name="default-in-schema"></a>
Facultatif. Si une clause IN SCHEMA s’affiche, les privilèges par défaut spécifiés s’appliquent aux nouveaux objets créés dans le *nom\$1schéma* spécifié. Dans ce cas, l’utilisateur ou groupe d’utilisateurs qui est la cible d’ALTER DEFAULT PRIVILEGES doit avoir le privilège CREATE pour le schéma spécifié. Les privilèges par défaut qui sont spécifiques à un schéma sont ajoutés aux privilèges par défaut globaux existants. Par défaut, les privilèges par défaut sont appliqués globalement à l’ensemble de la base de données. 

GRANT   <a name="default-grant"></a>
Ensemble des privilèges à accorder aux utilisateurs ou groupes spécifiés pour toutes les nouvelles tables et vues, fonctions ou procédures stockées créées par l’utilisateur spécifié. Vous pouvez définir les mêmes privilèges et options avec la clause GRANT qu’avec la commande [GRANT](r_GRANT.md). 

WITH GRANT OPTION   <a name="default-grant-option"></a>
Clause indiquant que l’utilisateur qui reçoit les privilèges peut à son tour accorder les mêmes privilèges à d’autres personnes. Vous ne pouvez pas accorder WITH GRANT OPTION à un groupe ou à PUBLIC. 

TO *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*   <a name="default-to"></a>
Nom de l’utilisateur, du rôle ou du groupe d’utilisateurs auquel les privilèges par défaut spécifiés s’appliquent.

REVOKE   <a name="default-revoke"></a>
Ensemble des privilèges à retirer aux utilisateurs ou groupes spécifiés pour toutes les nouvelles tables, fonctions ou procédures stockées créées par l’utilisateur spécifié. Vous pouvez définir les mêmes privilèges et options avec la clause REVOKE qu’avec la commande [REVOKE](r_REVOKE.md). 

GRANT OPTION FOR  <a name="default-revoke-option"></a>
 Clause qui retire uniquement la possibilité d’accorder un privilège spécifié à d’autres utilisateurs et qui ne retire pas le privilège lui-même. Vous ne pouvez pas retirer GRANT OPTION d’un groupe ou de PUBLIC. 

FROM *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*  <a name="default-from"></a>
Le nom de l’utilisateur, du rôle ou du groupe d’utilisateurs à partir duquel les privilèges spécifiés sont révoqués par défaut.

RESTRICT   <a name="default-restrict"></a>
L’option RESTRICT révoque uniquement les privilèges que l’utilisateur a directement accordés. Il s’agit de l’option par défaut.

## Exemples
<a name="r_ALTER_DEFAULT_PRIVILEGES-examples"></a>

Supposons que vous vouliez permettre à un utilisateur du groupe d’utilisateurs `report_readers` d’afficher toutes les tables et vues créées par l’utilisateur `report_admin`. Dans ce cas, exécutez la commande suivante en tant que super-utilisateur. 

```
alter default privileges for user report_admin grant select on tables to group report_readers; 
```

Dans l’exemple suivant, la première commande accorde les privilèges SELECT sur toutes les nouvelles tables que vous créez. Chaque fois que vous créez une nouvelle vue, vous devez explicitement accorder des privilèges à la vue ou réexécuter la commande `alter default privileges`.

```
alter default privileges grant select on tables to public; 
```

L’exemple suivant accorde le privilège INSERT au groupe d’utilisateurs `sales_admin` pour toutes les nouvelles tables et vues que vous créez dans le schéma `sales`. 

```
alter default privileges in schema sales grant insert on tables to group sales_admin; 
```

L’exemple suivant inverse la commande ALTER DEFAULT PRIVILEGES de l’exemple précédent. 

```
alter default privileges in schema sales revoke insert on tables from group sales_admin;
```

Par défaut, le groupe d’utilisateurs PUBLIC a l’autorisation d’exécution pour toutes les nouvelles fonctions définies par l’utilisateur. Pour retirer les autorisations d’exécution `public` de vos nouvelles fonctions, puis n’accorder l’autorisation d’exécution qu’au groupe d’utilisateurs `dev_test`, exécutez les commandes suivantes. 

```
alter default privileges revoke execute on functions from public;
alter default privileges grant execute on functions to group dev_test;
```

# ALTER EXTERNAL SCHEMA
<a name="r_ALTER_EXTERNAL_SCHEMA"></a>

Modifie un schéma externe existant dans la base de données actuelle. Seuls les propriétaires du schéma, les super-utilisateurs ou les utilisateurs disposant des privilèges ALTER sur le schéma peuvent le modifier. Seuls les schémas externes créés à partir de DATA CATALOG, KAFKA ou MSK peuvent être modifiés.

Le propriétaire de ce schéma est l’auteur de la commande CREATE EXTERNAL SCHEMA. Pour transférer la propriété d’un schéma externe, utilisez ALTER SCHEMA pour modifier le propriétaire. Utilisez la commande GRANT pour autoriser d’autres utilisateurs ou groupes d’utilisateurs à accéder au schéma.

Vous ne pouvez pas utiliser les commandes GRANT ou REVOKE pour des autorisations concernant une table externe. Vous pouvez en revanche accorder ou révoquer les autorisations pour le schéma externe. 

Pour plus d’informations, consultez les ressources suivantes :
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [GRANT](r_GRANT.md)
+ [REVOKE](r_REVOKE.md)
+ [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)
+ [Activation de l’authentification mTLS pour un schéma externe existant](materialized-view-streaming-ingestion-mtls.md#materialized-view-streaming-ingestion-mtls-alter)

Pour afficher les détails relatifs aux schémas externes, interrogez la vue système SVV\$1EXTERNAL\$1SCHEMAS . Pour plus d’informations, consultez [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md).

## Syntaxe
<a name="r_ALTER_EXTERNAL_SCHEMA-synopsis"></a>

```
ALTER EXTERNAL SCHEMA schema_name
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'asm-secret-arn' ]
[ URI 'Kafka bootstrap URL' ]
```

Si vous utilisez un schéma externe pour l’ingestion en streaming et que vous souhaitez implémenter le protocole mTLS pour l’authentification, vous pouvez exécuter une commande telle que la suivante, qui spécifie l’authentification mTLS et l’ARN du certificat ACM dans ACM. 

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
AUTHENTICATION_ARN 'arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID';
```

Vous pouvez également modifier l’authentification mTLS, en référence à l’ARN secret dans Secrets Manager.

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
```

L’exemple suivant montre comment modifier l’URI pour ALTER EXTERNAL SCHEMA :

```
ALTER EXTERNAL SCHEMA schema_name  
URI 'lkc-ghidef-67890.centralus.azure.glb.confluent.cloud:9092';
```

L’exemple suivant montre comment modifier le rôle IAM pour ALTER EXTERNAL SCHEMA :

```
ALTER EXTERNAL SCHEMA schema_name  
IAM_ROLE 'arn:aws:iam::012345678901:role/testrole';
```

## Parameters
<a name="r_ALTER_EXTERNAL_SCHEMA-parameters"></a>

 <role-name>IAM\$1ROLE [par défaut \$1 'SESSION' \$1 'arn:aws:iam : :< account-id>:role/ ']AWS   
Utilisez le mot clé `default` pour qu’Amazon Redshift utilise le rôle IAM défini par défaut.  
Utilisez `'SESSION'` si vous vous connectez à votre cluster Amazon Redshift à l’aide d’une identité fédérée et que vous accédez aux tables à partir du schéma externe créé à l’aide de cette commande.  
Pour plus d’informations, consultez [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

AUTHENTICATION  
Type d’authentification défini pour l’ingestion en streaming. L’ingestion en streaming assortie de types d’authentification fonctionne avec Apache Kafka, Confluent Cloud et Amazon Managed Streaming pour Apache Kafka. Pour plus d’informations, consultez [ CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

AUTHENTICATION\$1ARN  
L'ARN du AWS Certificate Manager certificat utilisé par Amazon Redshift pour l'authentification MTLS avec Apache Kafka, Confluent Cloud ou Amazon Managed Streaming for Apache Kafka (Amazon MSK). L’ARN est disponible dans la console ACM lorsque vous choisissez le certificat émis.

SECRET\$1ARN  
Le nom de ressource Amazon (ARN) d'un secret pris en charge créé à l'aide de AWS Secrets Manager. Pour plus d’informations sur la création et la récupération d’un ARN pour un secret, consultez [Gérer les secrets avec AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *Guide de l’utilisateur AWS Secrets Manager * et [Récupération de l’Amazon Resource Name (ARN) du secret dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html).

URI  
L’URL d’amorçage du cluster Apache Kafka, Confluent Cloud ou Amazon Managed Streaming pour Apache Kafka (Amazon MSK). Le point de terminaison doit être accessible (routable) à partir du cluster Amazon Redshift. Pour plus d’informations, consultez [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html).

# ALTER EXTERNAL VIEW
<a name="r_ALTER_EXTERNAL_VIEW"></a>

Utilisez la commande ALTER EXTERNAL VIEW pour mettre à jour votre vue externe. Selon les paramètres que vous utilisez, d’autres moteurs SQL comme Amazon Athena et Amazon EMR Spark, qui peuvent également référencer cette vue, peuvent être affectés. Pour plus d’informations sur les vues du Catalogue de données, consultez [Vues AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Syntaxe
<a name="r_ALTER_EXTERNAL_VIEW-synopsis"></a>

```
ALTER EXTERNAL VIEW schema_name.view_name
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
[FORCE] { AS (query_definition) | REMOVE DEFINITION }
```

## Parameters
<a name="r_ALTER_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Le schéma attaché à votre AWS Glue base de données, suivi du nom de la vue.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Notation du schéma à utiliser lors d’une modification de la vue. Vous pouvez spécifier d'utiliser une base de AWS Glue Data Catalog données Glue que vous avez créée ou un schéma externe que vous avez créé. Consultez [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) et [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) pour plus d’informations.

FORCE  
Si la définition de la vue AWS Lake Formation doit être mise à jour même si les objets référencés dans le tableau sont incompatibles avec les autres moteurs SQL. Si Lake Formation met à jour la vue, celle-ci est considérée comme obsolète pour les autres moteurs SQL jusqu’à ce que ces moteurs soient également mis à jour.

 *AS query\$1definition*   
Définition de la requête SQL exécutée par Amazon Redshift pour modifier la vue.

REMOVE DEFINITION  
S’il faut supprimer et recréer les vues. Les vues doivent être supprimées et recréées pour les marquer comme `PROTECTED`.

## Exemples
<a name="r_ALTER_EXTERNAL_VIEW-examples"></a>

L’exemple suivant modifie une vue du catalogue de données nommée sample\$1schema.glue\$1data\$1catalog\$1view.

```
ALTER EXTERNAL VIEW sample_schema.glue_data_catalog_view
FORCE
REMOVE DEFINITION
```

# ALTER FUNCTION
<a name="r_ALTER_FUNCTION"></a>

Renomme une fonction ou modifie le propriétaire. Le nom de la fonction et les types de données sont obligatoires. Seul le propriétaire ou un super-utilisateur peut renommer une fonction. Seul un super-utilisateur peut changer le propriétaire d’une fonction. 

## Syntaxe
<a name="r_ALTER_FUNCTION-synopsis"></a>

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     RENAME TO new_name
```

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## Parameters
<a name="r_ALTER_FUNCTION-parameters"></a>

 *function\$1name*   
Nom de la fonction à modifier. Spécifiez le nom de la fonction dans le chemin de recherche actuel ou choisissez le format `schema_name.function_name` pour utiliser un schéma spécifique.

*py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
Facultatif. Une liste de noms d’arguments et de types de données d’entrée pour la fonction Python définie par l’utilisateur, ou une liste de types de données d’arguments d’entrée pour la fonction SQL définie par l’utilisateur.

 *nouveau\$1nom*   
Un nouveau nom pour la fonction définie par l’utilisateur. 

*new\$1owner* \$1 CURRENT\$1USER \$1 SESSION\$1USER  
Un nouveau propriétaire pour la fonction définie par l’utilisateur. 

## Exemples
<a name="r_ALTER_FUNCTION-examples"></a>

L’exemple suivant remplace le nom `first_quarter_revenue` d’une fonction par `quarterly_revenue`.

```
ALTER FUNCTION first_quarter_revenue(bigint, numeric, int) 
         RENAME TO quarterly_revenue;
```

L’exemple suivant remplace le propriétaire de la fonction `quarterly_revenue` par `etl_user`.

```
ALTER FUNCTION quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# ALTER GROUP
<a name="r_ALTER_GROUP"></a>

Modifie un groupe d’utilisateurs. Utilisez cette commande pour ajouter des utilisateurs au groupe, en supprimer ou renommer le groupe. 

## Syntaxe
<a name="r_ALTER_GROUP-synopsis"></a>

```
ALTER GROUP group_name
{
ADD USER username [, ... ] |
DROP USER username [, ... ] |
RENAME TO new_name
}
```

## Parameters
<a name="r_ALTER_GROUP-parameters"></a>

 *nom\$1groupe*   
Nom du groupe d’utilisateurs à modifier. 

ADD   
Ajoute un utilisateur à un groupe d’utilisateurs. 

DROP   
Supprime un utilisateur d’un groupe d’utilisateurs. 

 *nom d’utilisateur*   
Nom de l’utilisateur à ajouter au groupe ou à supprimer du groupe. 

RENAME TO   
Renomme le groupe d’utilisateurs. Les noms de groupe commençant par deux tirets bas sont réservés pour un usage Amazon Redshift interne. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md). 

 *nouveau\$1nom*   
Nouveau nom du groupe d’utilisateurs. 

## Exemples
<a name="r_ALTER_GROUP-examples"></a>

L’exemple suivant ajoute un utilisateur nommé DWUSER au groupe ADMIN\$1GROUP.

```
ALTER GROUP admin_group
ADD USER dwuser;
```

L’exemple suivant renomme le groupe ADMIN\$1GROUP en ADMINISTRATORS. 

```
ALTER GROUP admin_group
RENAME TO administrators;
```

L’exemple suivant ajoute deux utilisateurs au groupe ADMIN\$1GROUP. 

```
ALTER GROUP admin_group
ADD USER u1, u2;
```

L’exemple suivant supprime deux utilisateurs du groupe ADMIN\$1GROUP. 

```
ALTER GROUP admin_group
DROP USER u1, u2;
```

# ALTER IDENTITY PROVIDER
<a name="r_ALTER_IDENTITY_PROVIDER"></a>

Modifie un fournisseur d’identité pour attribuer de nouveaux paramètres et de nouvelles valeurs. Lorsque vous exécutez cette commande, toutes les valeurs de paramètre précédemment définies sont supprimées avant que les nouvelles valeurs ne soient attribuées. Seul un super-utilisateur peut modifier un fournisseur d’identité.

## Syntaxe
<a name="r_ALTER_IDENTITY_PROVIDER-synopsis"></a>

```
ALTER IDENTITY PROVIDER identity_provider_name
[PARAMETERS parameter_string]
[NAMESPACE namespace]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
[DISABLE | ENABLE]
```

## Parameters
<a name="r_ALTER_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Nom du nouveau fournisseur d’identité. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

 *parameter\$1string*   
Chaîne contenant un objet JSON correctement formaté qui contient des paramètres et des valeurs requis pour le fournisseur d’identité spécifique.

 *espace de nom*   
Espace de noms de l’organisation.

 *iam\$1role*   
Rôle IAM qui fournit des autorisations pour la connexion à IAM Identity Center. Ce paramètre n'est applicable que lorsque le type de fournisseur d'identité est. AWSIDC

 *auto\$1create\$1roles*   
Active ou désactive la fonction de création automatique de rôle. Si la valeur est TRUE, Amazon Redshift active la fonctionnalité de création automatique des rôles. Si la valeur est FALSE, Amazon Redshift désactive la fonctionnalité de création automatique des rôles. Si la valeur de ce paramètre n’est pas spécifiée, Amazon Redshift détermine la valeur selon la logique suivante :   
+  Si `AUTO_CREATE_ROLES` est fourni mais que la valeur n’est pas spécifiée, la valeur est définie sur TRUE. 
+  Si `AUTO_CREATE_ROLES` ce n'est pas le cas et que le fournisseur d'identité l'est AWSIDC, la valeur est définie sur FALSE. 
+  Si `AUTO_CREATE_ROLES` n’est pas fourni et que le fournisseur d’identité est Azure, la valeur est définie sur TRUE. 
Pour inclure des groupes, spécifiez `INCLUDE`. La valeur par défaut est vide, ce qui signifie inclure tous les groupes si `AUTO_CREATE_ROLES` est activé.  
Pour exclure des groupes, spécifiez `EXCLUDE`. La valeur par défaut est vide, ce qui signifie qu’il ne faut exclure aucun groupe si `AUTO_CREATE_ROLES` est activé.

 *filter\$1pattern*   
Expression de caractères UTF-8 valide constituée d’un modèle à mettre en correspondance avec les noms de groupes. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_ALTER_IDENTITY_PROVIDER.html)
Si *filter\$1pattern* ne contient pas de métacaractères, le modèle représente uniquement la chaîne elle-même ; dans ce cas, LIKE a la même fonction que l’opérateur d’égalité.   
*filter\$1pattern* prend en charge les caractères suivants :  
+  Caractères alphabétiques en majuscules et minuscules (A-Z et a-z) 
+  Chiffres (0-9) 
+  Les caractères spéciaux suivants : 

  ```
  _ % ^ * + ? { } , $
  ```

 *DISABLE ou ENABLE*   
Active ou désactive un fournisseur d’identité. La valeur par défaut est ENABLE.

## Exemples
<a name="r_ALTER_IDENTITY_PROVIDER-examples"></a>

L’exemple suivant montre comment modifier un fournisseur d’identité nommé *oauth\$1standard*. Cela s’applique spécifiquement aux cas où Microsoft Azure AD est le fournisseur d’identité.

```
ALTER IDENTITY PROVIDER oauth_standard
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

L’exemple suivant montre comment définir l’espace de noms du fournisseur d’identité. Cela peut s’appliquer à Microsoft Azure AD, s’il suit une instruction comme dans l’exemple précédent, ou à un autre fournisseur d’identité. Cela peut également s’appliquer au cas où vous connectez un cluster alloué Amazon Redshift existant ou un groupe de travail Amazon Redshift sans serveur à IAM Identity Center, si vous avez établi une connexion via une application gérée.

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
NAMESPACE 'MYCO';
```

L’exemple suivant définit le rôle IAM et fonctionne dans le cas d’utilisation pour configurer l’intégration de Redshift avec IAM Identity Center.

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
IAM_ROLE 'arn:aws:iam::123456789012:role/myadministratorrole';
```

Pour plus d’informations sur la configuration d’une connexion à IAM Identity Center depuis Redshift, consultez [Connexion de Redshift à IAM Identity Center pour offrir aux utilisateurs une expérience d’authentification unique](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

**Désactivation d’un fournisseur d’identité**

L’exemple d’instruction suivant montre comment désactiver un fournisseur d’identité. Lorsque le fournisseur est désactivé, les utilisateurs fédérés du fournisseur d’identité ne peuvent pas se connecter au cluster tant qu’il n’est pas réactivé.

```
ALTER IDENTITY PROVIDER "redshift-idc-app" DISABLE;
```

# MODIFIER LA POLITIQUE DE MASQUAGE
<a name="r_ALTER_MASKING_POLICY"></a>

Modifie une politique de masquage dynamique des données existante. Pour plus d’informations sur le masquage dynamique des données, consultez [Masquage dynamique des données](t_ddm.md).

Les superutilisateurs et les utilisateurs ou rôles qui disposent du rôle sys:secadmin peuvent modifier une politique de masquage.

## Syntaxe
<a name="r_ALTER_MASKING_POLICY-synopsis"></a>

```
ALTER MASKING POLICY
{ policy_name | database_name.policy_name }
USING (masking_expression);
```

## Parameters
<a name="r_ALTER_MASKING_POLICY-parameters"></a>

*policy\$1name*   
 Nom de la politique de masquage. Il doit s’agir du nom d’une politique de masquage qui existe déjà dans la base de données. 

database\$1name  
Nom de la base de données à partir de laquelle la politique est créée. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

*masking\$1expression*  
Expression SQL utilisée pour transformer les colonnes cibles. Elle peut être écrite à l’aide de fonctions de manipulation des données, telles que des fonctions de manipulation de chaînes, ou en conjonction avec des fonctions définies par l’utilisateur écrites en SQL, Python ou avec AWS Lambda.   
 L’expression doit correspondre aux colonnes et aux types de données de l’expression originale. Par exemple, si les colonnes d’entrée de la politique de masquage originale sont `sample_1 FLOAT` et `sample_2 VARCHAR(10)`, vous ne pourrez pas modifier la politique de masquage pour prendre une troisième colonne, ou faire en sorte que la politique prenne une instruction FLOAT et une instruction BOOLEAN. Si vous utilisez une constante comme expression de masquage, vous devez la convertir explicitement en un type correspondant au type d’entrée.  
 Vous devez disposer de l’autorisation USAGE sur toutes les fonctions définies par l’utilisateur que vous utilisez dans l’expression du masquage. 

Pour en savoir plus sur l'utilisation d'ALTER MASKING POLICY sur le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# ALTER MATERIALIZED VIEW
<a name="r_ALTER_MATERIALIZED_VIEW"></a>

Modifie les attributs d’une vue matérialisée. 

## Syntaxe
<a name="r_ALTER_MATERIALIZED_VIEW-synopsis"></a>

```
ALTER MATERIALIZED VIEW mv_name
{
AUTO REFRESH { YES | NO } 
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [FOR DATASHARES]
};
```

## Parameters
<a name="r_ALTER_MATERIALIZED_VIEW-parameters"></a>

*mv\$1name*  
Nom de la vue matérialisée à modifier.

AUTO REFRESH \$1 YES \$1 NO \$1  
Clause qui active ou désactive l’actualisation automatique d’une vue matérialisée. Pour en savoir plus sur l’actualisation automatique des vues matérialisées, consultez [Actualisation d’une vue matérialisée](materialized-view-refresh.md).

ALTER DISTSTYLE ALL  
Clause qui modifie le style de distribution existant d’une relation en `ALL`. Éléments à prendre en compte :  
+ ALTER DISTSYTLE, ALTER SORTKEY et VACUUM ne peuvent pas s’exécuter simultanément sur la même relation. 
  + Si VACUUM est en cours d’exécution, l’exécution de ALTER DISTSTYLE ALL renvoie une erreur. 
  + Si ALTER DISTSTYLE ALL est en cours d’exécution, une opération VACCUM en arrière-plan ne démarre pas sur une relation. 
+ La commande ALTER DISTSTYLE ALL n’est pas prise en charge pour les relations ayant des clés de tri entrelacées et les tables temporaires.
+ Si le style de distribution était précédemment défini sur AUTO, la relation n’est plus candidate à l’optimisation automatique. 
Pour plus d’informations sur DISTSTYLE ALL, consultez [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER DISTSTYLE EVEN  
Clause qui modifie le style de distribution existant d’une relation en `EVEN`. Éléments à prendre en compte :  
+ ALTER DISTSTYLE, ALTER SORTKEY et VACUUM ne peuvent pas être exécutés simultanément sur la même table. 
  + Si VACUUM est en cours d’exécution, l’exécution d’ALTER DISTSTYLE EVEN renvoie une erreur. 
  + Si ALTER DISTSTYLE EVEN est en cours d’exécution, une opération VACCUM en arrière-plan ne démarre pas sur une relation. 
+ La commande ALTER DISTSTYLE EVEN n’est pas prise en charge pour les relations ayant des clés de tri entrelacées et les tables temporaires.
+ Si le style de distribution était précédemment défini sur AUTO, la relation n’est plus candidate à l’optimisation automatique. 
Pour plus d’informations sur DISTSTYLE EVEN, consultez [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER DISTKEY *nom\$1colonne* ou ALTER DISTSTYLE KEY DISTKEY *nom\$1colonne*  
Clause qui modifie la colonne utilisée en tant que clé de distribution d’une relation. Éléments à prendre en compte :  
+ VACUUM et ALTER DISTKEY ne peuvent pas s’exécuter simultanément sur la même relation. 
  + Si VACUUM est déjà en cours d’exécution, ALTER DISTKEY renvoie une erreur.
  + Si ALTER DISTKEY est en cours d’exécution, l’opération VACCUM en arrière-plan ne démarre pas sur une relation.
  + Si ALTER DISTKEY est en cours d’exécution, l’opération VACCUM au premier plan renvoie une erreur.
+ Vous pouvez exécuter une seule commande ALTER DISTKEY sur une relation simultanément. 
+ La commande ALTER DISTKEY n’est pas prise en charge pour les relations ayant des clés de tri entrelacées. 
+ Si le style de distribution était précédemment défini sur AUTO, la relation n’est plus candidate à l’optimisation automatique. 
Lorsque DISTSTYLE KEY est spécifié, les données sont distribuées par les valeurs figurant dans la colonne DISTKEY. Pour plus d’informations sur DISTSTYLE, consultez [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER DISTSTYLE AUTO  
Clause qui modifie le style de distribution existant d’une relation en AUTO.   
Lorsque vous modifiez un style de distribution sur AUTO, le style de distribution de la relation est défini comme suit :   
+ Une petite relation avec DISTSTYLE ALL est convertie en AUTO(ALL). 
+ Une petite relation avec DISTSTYLE EVEN est convertie en AUTO(ALL). 
+ Une petite relation avec DISTSTYLE KEY est convertie en AUTO(ALL). 
+ Une grande relation avec DISTSTYLE ALL est convertie en AUTO(EVEN). 
+ Une grande relation avec DISTSTYLE EVEN est convertie en AUTO(EVEN). 
+ Une grande relation avec DISTSTYLE KEY est convertie en AUTO(KEY) et la DISTKEY est conservée. Dans ce cas, Amazon Redshift ne modifie pas la relation.
Si Amazon Redshift détermine qu’un nouveau style de distribution ou une nouvelle clé améliorera les performances des requêtes, Amazon Redshift peut modifier le style de distribution ou la clé de votre relation à l’avenir. Par exemple, Amazon Redshift peut convertir une relation avec DISTSTYLE pour AUTO(KEY) en AUTO(EVEN), ou vice versa. Pour en savoir plus sur le comportement dans le cas où des clés de distribution sont modifiées, notamment sur le plan de la redistribution des données et des verrous, consultez [Recommandations Amazon Redshift Advisor](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation).  
Pour plus d’informations sur DISTSTYLE AUTO, consultez [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).   
Pour afficher le style de distribution appliqué à une relation, interrogez la vue du catalogue système SVV\$1TABLE\$1INFO. Pour plus d’informations, consultez la section concernant [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Pour afficher les recommandations Amazon Redshift Advisor pour les relations, recherchez la vue catalogue système SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS. Pour plus d’informations, consultez la section concernant [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Pour afficher les actions effectuées par Amazon Redshift, interrogez la vue catalogue système SVL\$1AUTO\$1WORKER\$1ACTION. Pour plus d’informations, consultez la section concernant [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER [COMPOUND] SORTKEY ( *column\$1name* [,...] )  
Clause qui modifie ou ajoute la clé de tri utilisée pour une relation. ALTER SORTKEY n’est pas pris en charge pour les tables temporaires.  
Lorsque vous modifiez une clé de tri, l’encodage par compression des colonnes de la nouvelle clé de tri ou de la clé de tri originale peut changer. Si aucun encodage n’est explicitement défini pour la relation, Amazon Redshift attribue automatiquement les codages de compression comme suit :  
+ Les colonnes qui sont définies comme des clés de tri se voient attribuer une compression RAW.
+ Les colonnes qui sont définies comme des types de données BOOLEAN, REAL ou DOUBLE PRECISION se voient attribuer une compression RAW.
+ Les colonnes définies comme SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ sont soumises à une compression. AZ64
+ Les colonnes définies comme CHAR ou VARCHAR sont affectées à la compression LZO.
Éléments à prendre en compte :  
+ Vous pouvez définir 400 colonnes au maximum par relation pour une clé de tri. 
+ Vous pouvez modifier une clé de tri entrelacée en clé de tri composée ou en aucune clé de tri. Toutefois, vous ne pouvez pas modifier une clé de tri composée par une clé de tri entrelacée. 
+ Si la clé de tri était précédemment définie sur AUTO, la relation n’est plus candidate à l’optimisation automatique. 
+ Amazon Redshift recommande d’utiliser l’encodage RAW (sans compression) pour les colonnes définies comme des clés de tri. Lorsque vous modifiez une colonne pour la choisir comme clé de tri, la compression de la colonne passe en compression RAW (sans compression). Cela peut augmenter la quantité de stockage requise par la relation. L’augmentation de la taille de la relation dépend de la définition et du contenu spécifiques de la relation. Pour plus d’informations sur la compression, consultez [encodages de compression](c_Compression_encodings.md). 
Les données sont chargées dans une relation en fonction de la clé de tri. Lorsque vous modifiez la clé de tri, Amazon Redshift modifie l’ordre des données. Pour plus d’informations sur SORTKEY, consultez [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).

ALTER TRUTKEY AUTO  
Clause qui modifie ou ajoute la clé de tri de la relation cible à AUTO. ALTER SORTKEY AUTO n’est pas pris en charge pour les tables temporaires.   
Lorsque vous modifiez une clé de tri en AUTO, Amazon Redshift conserve la clé de tri existante de la relation.   
Si Amazon Redshift détermine qu’une nouvelle clé de tri améliorera les performances des requêtes, Amazon Redshift peut modifier la clé de tri de votre relation à l’avenir.   
Pour plus d’informations sur SORTKEY AUTO, consultez [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md).   
Pour afficher la clé de tri d’une relation, interrogez la vue catalogue système SVV\$1\$1TABLE\$1INFO. Pour plus d’informations, consultez la section concernant [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Pour afficher les recommandations Amazon Redshift Advisor pour les relations, recherchez la vue catalogue système SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS. Pour plus d’informations, consultez la section concernant [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Pour afficher les actions effectuées par Amazon Redshift, interrogez la vue catalogue système SVL\$1AUTO\$1WORKER\$1ACTION. Pour plus d’informations, consultez la section concernant [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER SORTKEY NONE  
Clause qui supprime la clé de tri de la relation cible.   
Si la clé de tri était précédemment définie sur AUTO, la relation n’est plus candidate à l’optimisation automatique. 

ROW LEVEL SECURITY \$1 ON \$1 OFF \$1 [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] [ FOR DATASHARES ]  
Clause qui active ou désactive la sécurité au niveau des lignes pour une relation.  
Lorsque la sécurité au niveau des lignes est activée pour une relation, vous pouvez lire uniquement les lignes auxquelles cette politique vous autorise à accéder. Si aucune politique ne vous accorde l’accès à la relation, vous ne pouvez voir aucune ligne pour la relation. Seuls les super-utilisateurs et les utilisateurs ou les rôles dotés du rôle `sys:secadmin` peuvent définir la clause ROW LEVEL SECURITY. Pour plus d’informations, consultez [Sécurité au niveau des lignes](t_rls.md).  
+ [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] 

  Clause qui vous permet de choisir le type de conjonction de la politique de sécurité au niveau des lignes pour une relation. Lorsque plusieurs politiques de sécurité au niveau des lignes sont associées à une relation, vous pouvez les combiner avec la clause AND ou OR. Par défaut, Amazon Redshift associe les politiques RLS à la clause AND. Les super-utilisateurs, utilisateurs ou rôles disposant du rôle `sys:secadmin` peuvent utiliser cette clause pour définir le type de conjonction de la politique de sécurité au niveau des lignes pour une relation. Pour plus d’informations, consultez [Association de plusieurs politiques par utilisateur](t_rls_combine_policies.md). 
+ FOR DATASHARES

   Clause qui détermine s’il est possible d’accéder à une relation protégée par RLS sur les unités de partage des données. Par défaut, une relation protégée par RLS n’est pas accessible sur une unité de partage des données. Une commande ALTER MATERIALIZED VIEW ROW LEVEL SECURITY exécutée avec cette clause affecte uniquement la propriété d’accessibilité de l’unité de partage des données de la relation. La propriété ROW LEVEL SECURITY n’est pas modifiée.

   Si vous rendez accessible une relation protégée par RLS via des unités de partage des données, la relation n’est pas sécurisée au niveau des lignes dans la base de données de l’unité de partage des données côté consommateur. La relation conserve sa propriété RLS du côté producteur. 

## Exemples
<a name="r_ALTER_MATERIALIZED_VIEW-examples"></a>

L’exemple suivant active la vue matérialisée `tickets_mv` à actualiser automatiquement.

```
ALTER MATERIALIZED VIEW tickets_mv AUTO REFRESH YES
```

# Exemples de DISTSTYLE et SORTKEY pour ALTER MATERIALIZED VIEW
<a name="r_ALTER_MATERIALIZED_VIEW-DISTSTYLE-SORTKEY-examples"></a>

Les exemples présentés dans cette rubrique vous montrent comment effectuer les modifications DISTSTYLE et SORTKEY à l’aide de ALTER MATERIALIZED VIEW.

Les exemples de requêtes suivants montrent comment modifier une colonne DISTSTYLE KEY DISTKEY à l’aide d’un exemple de table de base :

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER diststyle KEY distkey inv_warehouse_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER distkey inv_item_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

Modifier une vue matérialisée en DISTSTYLE ALL :

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER MATERIALIZED VIEW inventory ALTER diststyle ALL;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

Les commandes suivantes présentent des exemples ALTER MATERIALIZED VIEW SORTKEY utilisant un exemple de table de base :

```
CREATE TABLE base_inventory (c0 int, c1 int);

INSERT INTO base_inventory VALUES(1,1);

CREATE materialized VIEW inventory interleaved sortkey(c0, c1) AS SELECT * FROM base_inventory;
SELECT "table", sortkey1 FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0, c1);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey NONE;
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

# ALTER RLS POLICY
<a name="r_ALTER_RLS_POLICY"></a>

Modifie une politique de sécurité existante au niveau des lignes sur une table.

Les super-utilisateurs et les utilisateurs ou les rôles dotés du rôle `sys:secadmin` peuvent modifier une politique.

## Syntaxe
<a name="r_ALTER_RLS_POLICY-synopsis"></a>

```
ALTER RLS POLICY
{ policy_name | database_name.policy_name }
USING ( using_predicate_exp );
```

## Parameters
<a name="r_ALTER_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nom de la politique .

database\$1name  
Nom de la base de données à partir de laquelle la politique est créée. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

USING (* using\$1predicate\$1exp *)  
Spécifie un filtre qui est appliqué à la clause WHERE de la requête. Amazon Redshift applique un prédicat de politique avant les prédicats utilisateur au niveau de la requête. Par exemple, **current\$1user = ‘joe’ and price > 10** permet à Joe de ne voir que les enregistrements dont le prix est supérieur à 10 \$1.  
L’expression a accès aux variables déclarées dans la clause WITH de l’instruction CREATE RLS POLICY qui a été utilisée pour créer la politique nommée policy\$1name.

Pour l'utilisation de la politique ALTER RLS sur le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Exemples
<a name="r_ALTER_RLS_POLICY-examples"></a>

L’exemple suivant modifie une politique RLS.

```
-- First create an RLS policy that limits access to rows where catgroup is 'concerts'.
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'concerts');

-- Then, alter the RLS policy to only show rows where catgroup is 'piano concerts'.
ALTER RLS POLICY policy_concerts
USING (catgroup = 'piano concerts');
```

# ALTER ROLE
<a name="r_ALTER_ROLE"></a>

Renomme un rôle ou modifie le propriétaire. Pour obtenir une liste des rôles définis par le système Amazon Redshift, consultez [Rôles définis par le système Amazon Redshift](r_roles-default.md).

## Autorisations requises
<a name="r_ALTER_ROLE-privileges"></a>

Voici les autorisations requises pour ALTER ROLE :
+ Superuser
+ Utilisateurs disposant des autorisations ALTER ROLE

## Syntaxe
<a name="r_ALTER_ROLE-synopsis"></a>

```
ALTER ROLE role [ WITH ]
  { { RENAME TO role } | { OWNER TO user_name } }[, ...]
  [ EXTERNALID TO external_id ]
```

## Parameters
<a name="r_ALTER_ROLE-parameters"></a>

 *rôle*   
Nom du rôle à modifier.

RENAME TO  
Nouveau nom du rôle.

OWNER TO *user\$1name*  
Nouveau propriétaire du rôle. 

EXTERNALID TO *external\$1id*  
Nouvel ID externe pour le rôle, associé à un fournisseur d’identité. Pour plus d’informations, consultez [Fédération de fournisseur d’identité natif pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Exemples
<a name="r_ALTER_ROLE-examples"></a>

L’exemple suivant remplace le nom `sample_role1` d’un rôle par `sample_role2`.

```
ALTER ROLE sample_role1 RENAME TO sample_role2;
```

L’exemple suivant remplace le propriétaire du rôle.

```
ALTER ROLE sample_role1 WITH OWNER TO user1
```

La syntaxe de ALTER ROLE est semblable à celle de ALTER PROCEDURE, reprise ci-après.

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

L’exemple suivant remplace le propriétaire d’une procédure par `etl_user`.

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

L’exemple suivant montre comment mettre à jour un rôle `sample_role1` avec un nouvel ID externe associé à un fournisseur d’identité.

```
ALTER ROLE sample_role1 EXTERNALID TO "XYZ456";
```

# ALTER PROCEDURE
<a name="r_ALTER_PROCEDURE"></a>

Renomme une procédure ou modifie le propriétaire. Le nom de la procédure et les types de données, ou signature, sont requis. Seul le propriétaire ou un super-utilisateur peut renommer une procédure. Seul un super-utilisateur peut changer le propriétaire d’une procédure. 

## Syntaxe
<a name="r_ALTER_PROCEDURE-synopsis"></a>

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    RENAME TO new_name
```

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## Parameters
<a name="r_ALTER_PROCEDURE-parameters"></a>

 *sp\$1name*   
Nom de la procédure à modifier. Spécifiez simplement le nom de la procédure dans le chemin de recherche actuel ou choisissez le format `schema_name.sp_procedure_name` pour utiliser un schéma spécifique.

*[argname] [argmode] argtype*   
Liste de noms d’arguments, de modes d’argument et de types de données. Seuls les types de données d’entrée sont requis. Ils sont utilisés pour identifier la procédure stockée. Vous pouvez également indiquer la procédure complète utilisée pour créer la procédure, en incluant les paramètres d’entrée et de sortie avec leurs modes.

 *nouveau\$1nom*   
Nouveau nom pour la procédure stockée. 

*new\$1owner* \$1 CURRENT\$1USER \$1 SESSION\$1USER  
Nouveau propriétaire pour la procédure stockée. 

## Exemples
<a name="r_ALTER_PROCEDURE-examples"></a>

L’exemple suivant remplace le nom `first_quarter_revenue` d’une procédure par `quarterly_revenue`.

```
ALTER PROCEDURE first_quarter_revenue(volume INOUT bigint, at_price IN numeric,
 result OUT int) RENAME TO quarterly_revenue;
```

Cet exemple équivaut à l’exemple suivant :

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

L’exemple suivant remplace le propriétaire d’une procédure par `etl_user`.

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# ALTER SCHEMA
<a name="r_ALTER_SCHEMA"></a>

Modifie la définition d’un schéma existant. Utilisez cette commande pour renommer un schéma ou en modifier le propriétaire. Par exemple, renommez un schéma existant pour en conserver une copie de sauvegarde lorsque vous prévoyez d’en créer une nouvelle version. Pour plus d’informations sur les schémas, consultez [CREATE SCHEMA](r_CREATE_SCHEMA.md).

Pour afficher les quotas de schéma configurés, consultez [SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md).

Pour afficher les enregistrements où les quotas de schéma ont été dépassés, consultez [STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md).

## Privilèges requis
<a name="r_ALTER_SCHEMA-privileges"></a>

Les privilèges suivants sont requis pour ALTER SCHEMA :
+ Superuser
+ Utilisateurs disposant du privilège ALTER SCHEMA
+ Propriétaire du schéma

Lorsque vous modifiez le nom d’un schéma, notez que les objets utilisant l’ancien nom, tels que les procédures stockées ou les vues matérialisées, doivent être mis à jour pour utiliser le nouveau nom.

## Syntaxe
<a name="r_ALTER_SCHEMA-synopsis"></a>

```
ALTER SCHEMA schema_name
{
RENAME TO new_name |
OWNER TO new_owner |
QUOTA { quota [MB | GB | TB] | UNLIMITED }
}
```

## Parameters
<a name="r_ALTER_SCHEMA-parameters"></a>

 *nom\$1schéma*   
Nom du schéma de base de données à modifier. 

RENAME TO   
Clause qui renomme le schéma. 

 *nouveau\$1nom*   
Nouveau nom du schéma. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md). 

OWNER TO   
Clause qui modifie le propriétaire du schéma. 

 *nouveau\$1propriétaire*   
Nouveau propriétaire du schéma. 

QUOTA   
Quantité maximale d’espace disque que le schéma spécifié peut utiliser. Cet espace correspond à la taille collective de toutes les tables sous le schéma spécifié. Amazon Redshift convertit la valeur sélectionnée en mégaoctets. Le gigaoctet est l’unité de mesure par défaut lorsque vous ne spécifiez pas de valeur.   
Pour plus d’informations sur la configuration des quotas de schéma, consultez [CREATE SCHEMA](r_CREATE_SCHEMA.md).

## Exemples
<a name="r_ALTER_SCHEMA-examples"></a>

L’exemple suivant renomme le schéma SALES en US\$1SALES.

```
alter schema sales
rename to us_sales;
```

L’exemple suivant attribue la propriété du schéma US\$1SALES à l’utilisateur DWUSER.

```
alter schema us_sales
owner to dwuser;
```

L’exemple suivant modifie le quota à 300 Mo et le supprime.

```
alter schema us_sales QUOTA 300 GB;
alter schema us_sales QUOTA UNLIMITED;
```

# ALTER SYSTEM
<a name="r_ALTER_SYSTEM"></a>

Modifie une option de configuration au niveau du système pour le cluster Amazon Redshift ou le groupe de travail Redshift sans serveur.

## Privilèges requis
<a name="r_ALTER_SYSTEM-privileges"></a>

La commande ALTER SYSTEM peut être exécutée par l’un des types d’utilisateurs suivants :
+ Superuser
+ Utilisateur administrateur

## Syntaxe
<a name="r_ALTER_SYSTEM-synopsis"></a>

```
ALTER SYSTEM SET system-level-configuration = {true| t | on | false | f | off}
```

## Parameters
<a name="r_ALTER_SYSTEM-parameters"></a>

 *system-level-configuration*   
Configuration au niveau du système. Valeurs valides : `data_catalog_auto_mount` et `metadata_security`.

\$1true\$1 t \$1 on \$1 false \$1 f \$1 off\$1   
Valeur permettant d’activer ou de désactiver la configuration au niveau du système. Les valeurs `true`, `t` et `on` indiquent que la configuration doit être activée. Les valeurs `false`, `f` et `off` indiquent que la configuration doit être désactivée.

## Notes d’utilisation
<a name="r_ALTER_SYSTEM-usage-notes"></a>

Pour un cluster provisionné, toute modification apportée à `data_catalog_auto_mount` prend effet au prochain redémarrage du cluster. Pour en savoir plus, consultez [Redémarrage d’un cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#reboot-cluster) dans *Amazon Redshift Management Guide*.

Pour un groupe de travail sans serveur, les modifications apportées à `data_catalog_auto_mount` ne prennent pas effet immédiatement.

## Exemples
<a name="r_ALTER_SYSTEM-examples"></a>

L’exemple suivant active le montage automatique du  AWS Glue Data Catalog.

```
ALTER SYSTEM SET data_catalog_auto_mount = true;
```

L’exemple suivant active la sécurité des métadonnées.

```
ALTER SYSTEM SET metadata_security = true;
```

### Définition d’un espace de noms d’identité par défaut
<a name="r_ALTER_SYSTEM-identity"></a>

Cet exemple est spécifique à l’utilisation d’un fournisseur d’identité. Vous pouvez intégrer Redshift à IAM Identity Center et à un fournisseur d'identité afin de centraliser la gestion des identités pour Redshift et d'autres services. AWS 

L’exemple suivant montre comment définir l’espace de noms d’identité par défaut pour le système. Cela simplifie ensuite l’exécution des instructions GRANT et CREATE, car il n’est pas nécessaire d’inclure l’espace de noms comme préfixe pour chaque identité.

```
ALTER SYSTEM SET default_identity_namespace = 'MYCO';
```

Après avoir exécuté la commande, vous pouvez exécuter des instructions comme les suivantes :

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
               
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

La définition de l’espace de noms d’identité par défaut a pour effet que chaque identité ne l’exige pas comme préfixe. Dans cet exemple, `alice` est remplacé par `MYCO:alice`. Cela se produit avec n’importe quelle identité incluse. Pour plus d’informations sur l’utilisation d’un fournisseur d’identité avec Redshift, consultez [Connexion de Redshift à IAM Identity Center pour offrir aux utilisateurs une expérience d’authentification unique](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

Pour plus d’informations sur les paramètres relatifs à la configuration Redshift avec IAM Identity Center, consultez [SET](r_SET.md) et [ALTER IDENTITY PROVIDER](r_ALTER_IDENTITY_PROVIDER.md).

# ALTER TABLE
<a name="r_ALTER_TABLE"></a>

Cette commande modifie la définition d’une table Amazon Redshift ou d’une table externe Amazon Redshift Spectrum. Cette commande met à jour les valeurs et les propriétés définies par [CREATE TABLE](r_CREATE_TABLE_NEW.md) ou [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). Vous pouvez utiliser ALTER TABLE sur une vue pour la sécurité au niveau des lignes (RLS).

Vous ne pouvez pas exécuter ALTER TABLE sur une table externe au sein d’un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

ALTER TABLE verrouille la table pour les opérations de lecture et d’écriture jusqu’à la fin de la transaction englobant l’opération ALTER TABLE, sauf s’il est indiqué spécifiquement dans la documentation que vous pouvez interroger des données ou effectuer d’autres opérations sur la table pendant sa modification.

## Privilèges requis
<a name="r_ALTER_TABLE-privileges"></a>

L’utilisateur qui modifie une table doit disposer des privilèges appropriés pour que la commande aboutisse. Selon la commande ALTER TABLE, l’un des privilèges suivants est requis.
+ Superuser
+ Utilisateurs disposant du privilège ALTER TABLE
+ Propriétaire de table disposant du privilège USAGE sur le schéma

## Syntaxe
<a name="r_ALTER_TABLE-synopsis"></a>

```
ALTER TABLE table_name
{
ADD table_constraint
| DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
| OWNER TO new_owner
| RENAME TO new_name
| RENAME COLUMN column_name TO new_name
| ALTER COLUMN column_name TYPE updated_varchar_data_type_size
| ALTER COLUMN column_name ENCODE new_encode_type
| ALTER COLUMN column_name ENCODE encode_type,
| ALTER COLUMN column_name ENCODE encode_type, .....;
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ALTER ENCODE AUTO
| ADD [ COLUMN ] column_name column_type
  [ DEFAULT default_expr ]
  [ ENCODE encoding ]
  [ NOT NULL | NULL ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ] |
| DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] 
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [ FOR DATASHARES ]
| MASKING { ON | OFF } FOR DATASHARES }

where table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] )
| PRIMARY KEY ( column_name [, ... ] )
| FOREIGN KEY (column_name [, ... ] )
   REFERENCES  reftable [ ( refcolumn ) ]}

The following options apply only to external tables:

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
| SET FILE FORMAT format |
| SET TABLE PROPERTIES ('property_name'='property_value')
| PARTITION ( partition_column=partition_value [, ...] )
  SET LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
| ADD [IF NOT EXISTS]
    PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
    [, ... ]
| DROP PARTITION ( partition_column=partition_value [, ...] )
```

Pour réduire le temps d’exécution de la commande ALTER TABLE, vous pouvez combiner certaines clauses de la commande ALTER TABLE.

Amazon Redshift prend en charge les combinaisons suivantes des clauses ALTER TABLE :

```
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTKEY column_Id;
ALTER TABLE tablename ALTER DISTKEY column_Id, ALTER SORTKEY (column_list);
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTSTYLE ALL;
ALTER TABLE tablename ALTER DISTSTYLE ALL, ALTER SORTKEY (column_list);
```

## Parameters
<a name="r_ALTER_TABLE-parameters"></a>

 *table\$1name*   
Nom de la table à modifier. Spécifiez simplement le nom de la table ou choisissez le format *nom\$1schéma.nom\$1table* pour utiliser un schéma spécifique. Les tables externes doivent être qualifiées à l’aide d’un nom de schéma externe. Vous pouvez aussi spécifier un nom de vue si vous utilisez l’instruction ALTER TABLE pour renommer une vue ou modifier son propriétaire. La longueur maximale d’un nom de table est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Vous pouvez utiliser des caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

ADD *contrainte\$1table*   
Clause qui ajoute la contrainte spécifiée à la table. Pour obtenir les descriptions des valeurs de *contrainte\$1table* valides, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).  
Vous ne pouvez pas ajouter une contrainte de clé primaire à une colonne acceptant la valeur null. Si la colonne a été créée à l’origine avec la contrainte NOT NULL, vous pouvez ajouter la contrainte de clé primaire.

DROP CONSTRAINT *nom\$1contrainte*   
Clause qui supprime la contrainte nommée de la table. Pour supprimer une contrainte, spécifiez son nom et non son type. Pour afficher le nom des contraintes de la table, exécutez la requête suivante.  

```
select constraint_name, constraint_type
from information_schema.table_constraints;
```

RESTRICT   
Clause qui supprime uniquement la contrainte spécifiée. RESTRICT est une option de DROP CONSTRAINT. RESTRICT ne peut pas être utilisée avec CASCADE. 

CASCADE   
Clause qui supprime la contrainte spécifiée ainsi que tout ce qui en dépend. CASCADE est une option de DROP CONSTRAINT. CASCADE ne peut pas être utilisée avec RESTRICT.

OWNER TO *nouveau\$1propriétaire*   
Clause qui modifie le propriétaire de la table (ou de la vue) avec la valeur *nouveau\$1propriétaire*.

RENAME TO *nouveau\$1nom*   
Clause qui renomme une table (ou une vue) selon la valeur spécifiée dans *nouveau\$1nom*. La longueur maximale d’un nom de table est de 127 octets ; les noms plus longs sont tronqués à 127 octets.  
Vous ne pouvez pas renommer une table permanente en un nom commençant par « \$1 ». Un nom de table commençant par « \$1 » indique une table temporaire.  
Vous ne pouvez pas renommer une table externe.

ALTER COLUMN *column\$1name* TYPE *updated\$1varchar\$1data\$1type\$1size*   
Clause qui modifie la taille d’une colonne définie en tant que type de données VARCHAR. Cette clause permet uniquement de modifier la taille d’un type de données VARCHAR. Prenez en compte les restrictions suivantes :  
+ Vous ne pouvez pas modifier une colonne avec les codages de compression BYTEDICT, RUNLENGTH ou K. TEXT255 TEXT32 
+ Vous ne pouvez pas réduire la taille en dessous de la taille maximale des données existantes. 
+ Vous ne pouvez pas modifier des colonnes avec des valeurs par défaut. 
+ Vous ne pouvez pas modifier des colonnes avec UNIQUE, PRIMARY KEY ou FOREIGN KEY. 
+ Vous ne pouvez pas modifier des colonnes dans un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

ALTER COLUMN *column\$1name* ENCODE *new\$1encode\$1type*   
Clause qui modifie l’encodage de compression d’une colonne. Si vous spécifiez le codage de compression pour une colonne, la table n’est plus définie sur ENCODE AUTO. Pour obtenir des informations sur l’encodage de la compression, consultez [Compression de colonnes pour réduire la taille des données stockées](t_Compressing_data_on_disk.md).   
Lorsque vous modifiez l’encodage de compression pour une colonne, la table reste disponible à des fins d’interrogation.  
Prenez en compte les restrictions suivantes :  
+ Vous ne pouvez pas modifier une colonne avec le même encodage que celui actuellement défini pour la colonne. 
+ Vous ne pouvez pas modifier l’encodage d’une colonne dans une table avec une clé de tri entrelacée. 

ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, .....;   
Clause qui modifie le codage de compression de plusieurs colonnes dans une seule commande. Pour obtenir des informations sur l’encodage de la compression, consultez [Compression de colonnes pour réduire la taille des données stockées](t_Compressing_data_on_disk.md).  
Lorsque vous modifiez l’encodage de compression pour une colonne, la table reste disponible à des fins d’interrogation.  
 Prenez en compte les restrictions suivantes :  
+ Vous ne pouvez pas modifier une colonne pour un type de codage identique ou différent plusieurs fois dans une seule commande.
+ Vous ne pouvez pas modifier une colonne avec le même encodage que celui actuellement défini pour la colonne. 
+ Vous ne pouvez pas modifier l’encodage d’une colonne dans une table avec une clé de tri entrelacée. 

ALTER DISTSTYLE ALL  
Clause qui modifie le style de distribution existant d’une table en `ALL`. Éléments à prendre en compte :  
+ ALTER DISTSYTLE, ALTER SORTKEY et VACUUM ne peuvent pas s’exécuter simultanément sur la même table. 
  + Si VACUUM est en cours d’exécution, l’exécution de ALTER DISTSTYLE ALL renvoie une erreur. 
  + Si ALTER DISTSTYLE ALL est en cours d’exécution, une opération VACCUM en arrière-plan ne démarre pas sur une table. 
+ La commande ALTER DISTSTYLE ALL n’est pas prise en charge pour les tables ayant des clés de tri entrelacées et les tables temporaires.
+ Si le style de distribution était précédemment défini sur AUTO, la table n’est plus candidate à l’optimisation automatique. 
Pour plus d’informations sur DISTSTYLE ALL, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER DISTSTYLE EVEN  
Clause qui modifie le style de distribution existant d’une table en `EVEN`. Éléments à prendre en compte :  
+ ALTER DISTSYTLE, ALTER SORTKEY et VACUUM ne peuvent pas être exécutés simultanément sur la même table. 
  + Si VACUUM est en cours d’exécution, l’exécution d’ALTER DISTSTYLE EVEN renvoie une erreur. 
  + Si ALTER DISTSTYLE EVEN est en cours d’exécution, une opération VACUUM en arrière-plan ne démarre pas sur une table. 
+ La commande ALTER DISTSTYLE EVEN n’est pas prise en charge pour les tables ayant des clés de tri entrelacées et des tables temporaires.
+ Si le style de distribution était précédemment défini sur AUTO, la table n’est plus candidate à l’optimisation automatique. 
Pour plus d’informations sur DISTSTYLE ALL, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER DISTKEY *nom\$1colonne* ou ALTER DISTSTYLE KEY DISTKEY *nom\$1colonne*  
Clause qui modifie la colonne utilisée en tant que clé de distribution d’une table. Éléments à prendre en compte :  
+ VACUUM et ALTER DISTKEY ne peuvent pas s’exécuter simultanément sur la même table. 
  + Si VACUUM est déjà en cours d’exécution, ALTER DISTKEY renvoie une erreur.
  + Si ALTER DISTKEY est en cours d’exécution, l’opération VACCUM en arrière-plan ne démarre pas sur une table.
  + Si ALTER DISTKEY est en cours d’exécution, l’opération VACCUM au premier plan renvoie une erreur.
+ Vous pouvez exécuter une seule commande ALTER DISTKEY sur une table simultanément. 
+ La commande ALTER DISTKEY n’est pas prise en charge pour les tables ayant des clés de tri entrelacées. 
+ Si le style de distribution était précédemment défini sur AUTO, la table n’est plus candidate à l’optimisation automatique. 
Lorsque DISTSTYLE KEY est spécifié, les données sont distribuées par les valeurs figurant dans la colonne DISTKEY. Pour plus d’informations sur DISTSTYLE, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER DISTSTYLE AUTO  
Clause qui modifie le style de distribution existant d’une table en AUTO.   
Lorsque vous modifiez un style de distribution sur AUTO, le style de distribution de la table est défini comme suit :   
+ Une petite table avec DISTSTYLE ALL est convertie en AUTO(ALL). 
+ Une petite table avec DISTSTYLE EVEN est convertie en AUTO(ALL). 
+ Une petite table avec DISTSTYLE KEY est convertie en AUTO(ALL). 
+ Une grande table avec DISTSTYLE ALL est convertie en AUTO(EVEN). 
+ Une grande table avec DISTSTYLE EVEN est convertie en AUTO(EVEN). 
+ Une grande table avec DISTSTYLE KEY est convertie en AUTO(KEY) et la DISTKEY est conservée. Dans ce cas, Amazon Redshift ne modifie pas la table.
Si Amazon Redshift détermine qu’un nouveau style de distribution ou une nouvelle clé améliorera les performances des requêtes, Amazon Redshift peut modifier le style de distribution ou la clé de votre table à l’avenir. Par exemple, Amazon Redshift peut convertir une table avec DISTSTYLE pour AUTO(KEY) en AUTO(EVEN), ou vice versa. Pour en savoir plus sur le comportement dans le cas où des clés de distribution sont modifiées, notamment sur le plan de la redistribution des données et des verrous, consultez [Recommandations Amazon Redshift Advisor](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation).  
Pour plus d’informations sur DISTSTYLE AUTO, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).   
Pour afficher le style de distribution appliqué à une table, interrogez la vue du catalogue système SVV\$1TABLE\$1INFO. Pour plus d'informations, consultez [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Pour afficher les recommandations Amazon Redshift Advisor pour les tables, recherchez la vue catalogue système SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS. Pour plus d'informations, consultez [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Pour afficher les actions effectuées par Amazon Redshift, interrogez la vue catalogue système SVL\$1AUTO\$1WORKER\$1ACTION. Pour plus d'informations, consultez [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER [COMPOUND] SORTKEY ( *column\$1name* [,...] )  
Clause qui modifie ou ajoute la clé de tri utilisée pour une table. ALTER SORTKEY n’est pas pris en charge pour les tables temporaires.  
Lorsque vous modifiez une clé de tri, l’encodage par compression des colonnes de la nouvelle clé de tri ou de la clé de tri originale peut changer. Si aucun encodage n’est explicitement défini pour la table, Amazon Redshift attribue automatiquement les codages de compression comme suit :  
+ Les colonnes qui sont définies comme des clés de tri se voient attribuer une compression RAW.
+ Les colonnes qui sont définies comme des types de données BOOLEAN, REAL ou DOUBLE PRECISION se voient attribuer une compression RAW.
+ Les colonnes définies comme SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ sont soumises à une compression. AZ64
+ Les colonnes définies comme CHAR ou VARCHAR sont affectées à la compression LZO.
Éléments à prendre en compte :  
+ Vous pouvez définir 400 colonnes au maximum par table pour une clé de tri. 
+ Vous pouvez modifier une clé de tri entrelacée en clé de tri composée ou en aucune clé de tri. Toutefois, vous ne pouvez pas modifier une clé de tri composée par une clé de tri entrelacée. 
+ Si la clé de tri était précédemment définie sur AUTO, la table n’est plus candidate à l’optimisation automatique. 
+ Amazon Redshift recommande d’utiliser l’encodage RAW (sans compression) pour les colonnes définies comme des clés de tri. Lorsque vous modifiez une colonne pour la choisir comme clé de tri, la compression de la colonne passe en compression RAW (sans compression). Cela peut augmenter la quantité de stockage requise par la table. L’augmentation de la taille de la table dépend de la définition et du contenu spécifiques de la table. Pour plus d’informations sur la compression, consultez [encodages de compression](c_Compression_encodings.md). 
Les données sont chargées dans une table en fonction de la clé de tri. Lorsque vous modifiez la clé de tri, Amazon Redshift modifie l’ordre des données. Pour plus d’informations sur SORTKEY, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

ALTER TRUTKEY AUTO  
Clause qui modifie ou ajoute la clé de tri de la table cible à AUTO. ALTER SORTKEY AUTO n’est pas pris en charge pour les tables temporaires.   
Lorsque vous modifiez une clé de tri en AUTO, Amazon Redshift conserve la clé de tri existante de la table.   
Si Amazon Redshift détermine qu’une nouvelle clé de tri améliorera les performances des requêtes, Amazon Redshift peut modifier la clé de tri de votre table à l’avenir.   
Pour plus d’informations sur SORTKEY AUTO, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).   
Pour afficher la clé de tri d'une table, interrogez la vue catalogue système SVV\$1TABLE\$1INFO. Pour plus d'informations, consultez [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Pour afficher les recommandations Amazon Redshift Advisor pour les tables, recherchez la vue catalogue système SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS. Pour plus d'informations, consultez [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Pour afficher les actions effectuées par Amazon Redshift, interrogez la vue catalogue système SVL\$1AUTO\$1WORKER\$1ACTION. Pour plus d'informations, consultez [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md). 

ALTER SORTKEY NONE  
Clause qui supprime la clé de tri de la table cible.   
Si la clé de tri était précédemment définie sur AUTO, la table n’est plus candidate à l’optimisation automatique. 

ALTER ENCODE AUTO  
Clause qui modifie le type d’encodage des colonnes de la table cible en AUTO. Lorsque vous modifiez l’encodage en AUTO, Amazon Redshift conserve le type d’encodage existant des colonnes de la table. Ensuite, si Amazon Redshift détermine qu’un nouveau type d’encodage peut améliorer les performances de la requête, Amazon Redshift peut modifier le type d’encodage des colonnes de la table.   
Si vous modifiez une ou plusieurs colonnes pour spécifier un encodage, Amazon Redshift n’ajuste plus automatiquement l’encodage pour toutes les colonnes de la table. Les colonnes conservent les paramètres d’encodage actuels.  
Les actions suivantes n’affectent pas le paramètre ENCODE AUTO pour la table :   
+ Renommage de la table.
+ Modification du paramètre DISTSTYLE ou SORTKEY pour la table.
+ Ajout ou suppression d’une colonne avec un paramètre ENCODE.
+ Utilisation de l’option COMPUPDATE de la commande COPY. Pour plus d'informations, consultez [Opérations de chargement de données](copy-parameters-data-load.md).
Pour afficher l’encodage d’une table, interrogez la vue catalogue système SVV\$1TABLE\$1INFO. Pour plus d'informations, consultez [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md).

RENAME COLUMN *nom\$1colonne* TO *nouveau\$1nom*   
Clause qui renomme une colonne selon la valeur spécifiée dans *nouveau\$1nom*. La longueur maximale d’un nom de colonne est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

ADD [ COLUMN ] *nom\$1colonne*   
Clause qui ajoute une colonne avec le nom spécifié à la table. Vous ne pouvez ajouter qu’une seule colonne à chaque instruction ALTER TABLE.  
Vous ne pouvez pas ajouter une colonne qui soit la clé de distribution (DISTKEY) ou une clé de tri (SORTKEY) de la table.  
 Vous ne pouvez pas utiliser une commande ALTER TABLE ADD COLUMN pour modifier les attributs de table et de colonne suivants :   
+ UNIQUE
+ PRIMARY KEY
+ REFERENCES (clé étrangère)
+ IDENTITY ou GENERATED BY DEFAULT AS IDENTITY
La longueur maximale d’un nom de colonne est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Le nombre maximal de colonnes que vous pouvez définir dans une seule table est de 1 600.  
Les restrictions suivantes s’appliquent lorsque vous ajoutez une colonne à une table externe :  
+ Vous ne pouvez pas ajouter une colonne à une table externe dont les contraintes de table sont DEFAULT, ENCODE, NOT NULL ou NULL. 
+ Vous ne pouvez pas ajouter des colonnes à une table externe définie à l’aide du format de fichier AVRO. 
+ Si les pseudo-colonnes sont activées, le nombre maximal de colonnes que vous pouvez définir dans une seule table externe est 1 598. Si les pseudo-colonnes ne sont pas activées, le nombre maximal de colonnes que vous pouvez définir dans une seule table est 1 600. 
Pour plus d'informations, consultez [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md).

 *type\$1colonne*   
Type de données de la colonne ajoutée. Pour les colonnes CHAR et VARCHAR, vous pouvez utiliser le mot-clé MAX au lieu de déclarer une longueur maximale. MAX définit la longueur maximale sur 4 096 octets pour CHAR ou 65 535 octets pour VARCHAR. La taille maximum d’un objet GEOMETRY est de 1 048 447 octets.   
Pour obtenir des informations sur les types de données pris en charge par Amazon Redshift, consultez [Types de données](c_Supported_data_types.md).

DEFAULT *expr\$1défaut*   <a name="alter-table-default"></a>
Clause qui attribue une valeur de données par défaut à la colonne. Le type de données de *expr\$1défaut* doit correspondre au type de données de la colonne. La valeur DEFAULT doit être une expression exempte de variable. Les sous-requêtes, les références croisées aux autres colonnes de la table active et les fonctions définies par l’utilisateur ne sont pas autorisées.  
*expr\$1défaut* est utilisé dans toute opération INSERT qui ne spécifie pas une valeur pour la colonne. Si aucune valeur par défaut n’est spécifiée, la valeur par défaut de la colonne est la valeur null.  
Si une opération COPY rencontre un champ null dans une colonne qui a une valeur DEFAULT et une contrainte NOT NULL, la commande COPY insère la valeur de *expr\$1défaut*.   
DEFAULT n’est pas pris en charge pour les tables externes.

ENCODE *encodage*   
Encodage de compression pour une colonne. Par défaut, Amazon Redshift gère automatiquement l’encodage de compression pour toutes les colonnes d’une table si vous ne spécifiez pas d’encodage de compression pour une colonne de la table ou si vous spécifiez l’option ENCODE AUTO pour la table.  
Si vous spécifiez l’encodage de compression pour une colonne de la table ou si vous ne spécifiez pas l’option ENCODE AUTO pour la table, Amazon Redshift attribue automatiquement l’encodage de compression aux colonnes pour lesquelles vous ne spécifiez pas l’encodage de compression comme suit :  
+ Toutes les colonnes de tables temporaires se voient attribuer une compression RAW par défaut.
+ Les colonnes qui sont définies comme des clés de tri se voient attribuer une compression RAW.
+ Les colonnes qui sont définies comme des types de données BOOLEAN, REAL, DOUBLE PRECISION ou GEOMETRY ou GEOGRAPHY se voient attribuer une compression RAW.
+ Les colonnes définies comme SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ sont soumises à une compression. AZ64
+ Les colonnes définies comme CHAR, VARCHAR ou VARBYTE sont affectées à la compression LZO.
Si vous ne souhaitez pas qu’une colonne soit compressée, spécifiez explicitement un encodage RAW (brut).
Les encodages [compression encodings](c_Compression_encodings.md#compression-encoding-list) suivants sont pris en charge :  
+ AZ64
+ BYTEDICT
+ DELTA
+ DELTA32 K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (aucune compression)
+ RUNLENGTH
+ TEXT255
+ TEXT32 K
+ ZSTD
ENCODE n’est pas pris en charge pour les tables externes.

NOT NULL \$1 NULL   
NOT NULL spécifie que la colonne n’est pas autorisée à contenir des valeurs null. NULL, valeur par défaut, spécifie que la colonne accepte les valeurs null.  
NOT NULL et NULL ne sont pas pris en charge pour les tables externes.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Clause qui spécifie si la recherche de chaîne ou la comparaison sur la colonne est sensible à la casse ou insensible à la casse. La valeur par défaut est la même que la configuration actuelle de sensibilité à la casse de la base de données.  
Pour rechercher les informations de classement de la base de données, utilisez la commande suivante :  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE et CS sont interchangeables et donnent les mêmes résultats. De même, CASE\$1INSENSITIVE et CI sont interchangeables et donnent les mêmes résultats.

DROP [ COLUMN ] *nom\$1colonne*   
Nom de la colonne à supprimer de la table.  
Vous ne pouvez pas supprimer la dernière colonne d’une table. Une table doit avoir au moins une colonne.  
Vous ne pouvez pas supprimer une colonne qui est la clé de distribution (DISTKEY) ou une clé de tri (SORTKEY) de la table. Le comportement par défaut pour DROP COLUMN est RESTRICT si la colonne a des objets dépendants, tels qu’une vue, une clé primaire, une clé étrangère ou une restriction UNIQUE.  
Les restrictions suivantes s’appliquent lors de la suppression d’une colonne d’une table externe :  
+ Par ailleurs, vous ne pouvez pas supprimer une colonne d’une table externe si cette colonne est utilisée comme partition.
+ Vous ne pouvez pas supprimer une colonne d’une table externe définie à l’aide du format de fichier AVRO. 
+ RESTRICT et CASCADE sont ignorés pour les tables externes.
+ Vous ne pouvez pas supprimer les colonnes de la table de politique référencée dans la définition de la politique à moins de supprimer ou de dissocier la stratégie. Cela s’applique également lorsque l’option CASCADE est spécifiée. Vous pouvez supprimer d’autres colonnes dans le tableau des politiques.
Pour plus d’informations, consultez [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md).

RESTRICT   
Lorsque RESTRICT est utilisé avec DROP COLUMN, cela signifie que la colonne à supprimer n’est pas supprimée dans les cas suivants :  
+ Si une vue définie référence la colonne en cours de suppression
+ Si une clé étrangère référence la colonne
+ Si la colonne fait partie d’une clé en plusieurs parties
RESTRICT ne peut pas être utilisée avec CASCADE.  
RESTRICT et CASCADE sont ignorés pour les tables externes.

CASCADE   
Lorsqu’il est utilisé avec DROP COLUMN, supprime la colonne spécifiée et tout ce qui dépend de cette colonne. CASCADE ne peut pas être utilisée avec RESTRICT.  
RESTRICT et CASCADE sont ignorés pour les tables externes.

Les options suivantes s’appliquent uniquement aux tables externes.

SET LOCATION \$1 ’s3://*compartiment/dossier*/’ \$1 ’s3://*compartiment/fichier\$1manifeste*’ \$1  
Chemin menant au dossier Amazon S3 qui contient les fichiers de données ou un fichier manifeste qui contient une liste de chemins d’objets Amazon S3. Les compartiments doivent se trouver dans la même région AWS que le cluster Amazon Redshift. Pour obtenir la liste des AWS régions prises en charge, consultez[Limitations propres à Amazon Redshift Spectrum](c-spectrum-considerations.md). Pour plus d’informations sur l’utilisation d’un fichier manifeste, consultez l’option LOCATION dans la référence [Parameters](r_CREATE_EXTERNAL_TABLE.md#r_CREATE_EXTERNAL_TABLE-parameters) CREATE EXTERNAL TABLE.

SET FILE FORMAT *format*  
Format des fichiers de données externes.  
Les formats valides sont les suivants :  
+ AVRO 
+ PARQUET
+ RCFILE
+ SEQUENCEFILE
+ TEXTFILE 

SET TABLE PROPERTIES ( ’*nom\$1propriété*’=’*valeur\$1propriété*’)   
Clause qui définit la définition de table pour des propriétés de table d’une table externe.   
Les propriétés de table sont sensibles à la casse.  
’numRows’=’*nombre\$1lignes*’   
Propriété qui définit la valeur numRows de la définition de table. Afin de mettre à jour explicitement les statistiques d’une table externe, définissez la propriété numRows pour indiquer la taille de la table. Amazon Redshift n'analyse pas les tables externes pour générer les statistiques de table utilisées par l'optimiseur de requête afin de générer un plan de requête. Si des statistiques de table ne sont pas définies pour une table externe, Amazon Redshift génère un plan d’exécution de requête. Ce plan se base sur une hypothèse selon laquelle les tables externes sont les tables les plus volumineuses et les tables locales les tables les plus petites.  
’skip.header.line.count’=’*nombre\$1lignes*’  
Propriété qui définit le nombre de lignes à ignorer au début de chaque fichier source.

PARTITION ( *colonne\$1partition*=*valeur\$1partition* [, ...] SET LOCATION \$1 ’s3://*compartiment*/*dossier*’ \$1 ’s3://*compartiment*/*fichier\$1manifeste*’ \$1  
Clause qui définit un nouvel emplacement pour une ou plusieurs colonnes de partition. 

ADD [ IF NOT EXISTS ] PARTITION ( *partition\$1column*=*partition\$1value* [, ...] ) LOCATION \$1 ’s3://*bucket*/*folder*’ \$1 ’s3://*bucket*/*manifest\$1file*’ \$1 [, ... ]  
Clause qui ajoute une ou plusieurs partitions. Vous pouvez spécifier plusieurs clauses PARTITION à l’aide d’une seule instruction ALTER TABLE … ADD.  
Si vous utilisez le AWS Glue catalogue, vous pouvez ajouter jusqu'à 100 partitions à l'aide d'une seule instruction ALTER TABLE.
La clause IF NOT EXISTS indique que si la partition spécifiée existe déjà, la commande ne doit effectuer aucun changement. Elle indique également que la commande doit renvoyer un message indiquant que la partition existe, plutôt que s’arrêter avec une erreur. Comme cette clause est utile à l’écriture de scripts, ce script n’échoue pas si ALTER TABLE tente d’ajouter une partition qui existe déjà. 

DROP PARTITION (*colonne\$1partition*=*valeur\$1partition* [, ...] )   
Clause qui supprime la partition spécifiée. La suppression d’une partition modifie uniquement les métadonnées des tables externes. Ceci n’a aucun impact sur les données sur Amazon S3.

ROW LEVEL SECURITY \$1 ON \$1 OFF \$1 [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] [ FOR DATASHARES ]  
Clause qui active ou désactive la sécurité au niveau des lignes pour une relation.  
Lorsque la sécurité au niveau des lignes est activée pour une relation, vous pouvez lire uniquement les lignes auxquelles cette politique vous autorise à accéder. Si aucune politique ne vous accorde l’accès à la relation, vous ne pouvez voir aucune ligne pour la relation. Seuls les super-utilisateurs et les utilisateurs ou les rôles dotés du rôle `sys:secadmin` peuvent définir la clause ROW LEVEL SECURITY. Pour de plus amples informations, veuillez consulter [Sécurité au niveau des lignes](t_rls.md). Cette instruction est prise en charge sur la base de données connectée ou sur une base de données dotée d'autorisations fédérées Amazon Redshift. La clause FOR DATASHARES n'est pas prise en charge sur une base de données dotée d'autorisations fédérées Amazon Redshift.  
+ [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] 

  Clause qui vous permet de choisir le type de conjonction de la politique de sécurité au niveau des lignes pour une relation. Lorsque plusieurs politiques de sécurité au niveau des lignes sont associées à une relation, vous pouvez les combiner avec la clause AND ou OR. Par défaut, Amazon Redshift associe les politiques RLS à la clause AND. Les super-utilisateurs, utilisateurs ou rôles disposant du rôle `sys:secadmin` peuvent utiliser cette clause pour définir le type de conjonction de la politique de sécurité au niveau des lignes pour une relation. Pour plus d’informations, consultez [Association de plusieurs politiques par utilisateur](t_rls_combine_policies.md). 
+ FOR DATASHARES

  Clause qui détermine s’il est possible d’accéder à une relation protégée par RLS sur les unités de partage des données. Par défaut, une relation protégée par RLS n’est pas accessible sur une unité de partage des données. Une commande ALTER TABLE ROW LEVEL SECURITY exécutée avec cette clause affecte uniquement la propriété d’accessibilité de l’unité de partage des données de la relation. La propriété ROW LEVEL SECURITY n’est pas modifiée. 

   Si vous rendez accessible une relation protégée par RLS via des unités de partage des données, la relation n’est pas sécurisée au niveau des lignes dans la base de données de l’unité de partage des données côté consommateur. La relation conserve sa propriété RLS du côté producteur. 

MASKING \$1 ON \$1 OFF \$1 FOR DATASHARES  
Clause qui détermine s’il est possible d’accéder à une relation protégée par DDM sur les unités de partage des données. Par défaut, une relation protégée par DDM n’est pas accessible sur une unité de partage des données. Si vous rendez accessible une relation protégée par DDM via des unités de partage des données, la relation ne sera pas protégée par masquage dans la base de données de l’unité de partage des données côté consommateur. La relation conserve sa propriété de masquage du côté producteur. Seuls les super-utilisateurs et les utilisateurs ou les rôles dotés du rôle `sys:secadmin` peuvent définir la clause MASKING FOR DATASHARES. Pour plus d’informations, consultez [Masquage dynamique des données](t_ddm.md). 

## Exemples
<a name="r_ALTER_TABLE-examples"></a>

Les exemples suivants montrent comment utiliser la commande ALTER TABLE.
+ [Exemples ALTER TABLE](r_ALTER_TABLE_examples_basic.md)
+ [Exemples de modification d’une table externe](r_ALTER_TABLE_external-table.md)
+ [Exemples ALTER TABLE ADD et DROP COLUMN](r_ALTER_TABLE_COL_ex-add-drop.md)

# Exemples ALTER TABLE
<a name="r_ALTER_TABLE_examples_basic"></a>

Les exemples suivants illustrent l’utilisation de base de la commande ALTER TABLE. 

## Renommer une table ou une vue
<a name="r_ALTER_TABLE_examples_basic-rename-a-table"></a>

La commande suivante permet de renommer la table USERS en USERS\$1BKUP : 

```
alter table users
rename to users_bkup;
```

 Vous pouvez également utiliser ce type de commande pour renommer une vue. 

## Modifier le propriétaire d’une table ou d’une vue
<a name="r_ALTER_TABLE_examples_basic-change-the-owner-of-a-table-or-view"></a>

La commande suivante remplace le propriétaire de la table VENUE par l’utilisateur DWUSER : 

```
alter table venue
owner to dwuser;
```

Les commandes suivantes créent une vue, puis modifient son propriétaire : 

```
create view vdate as select * from date;
alter table vdate owner to vuser;
```

## Renommer une colonne
<a name="r_ALTER_TABLE_examples_basic-rename-a-column"></a>

La commande suivante renomme la colonne VENUESEATS de la table VENUE en VENUESIZE : 

```
alter table venue
rename column venueseats to venuesize;
```

## Supprimer une contrainte de table
<a name="r_ALTER_TABLE_examples_drop-constraint"></a>

Pour supprimer une contrainte de table, telle qu’une contrainte de clé primaire, de clé étrangère ou unique, commencez par rechercher le nom interne de la contrainte. Ensuite, spécifiez le nom de la contrainte dans la commande ALTER TABLE. L’exemple suivant recherche les contraintes de la table CATEGORY, puis supprime la clé principale avec le nom `category_pkey`. 

```
select constraint_name, constraint_type
from information_schema.table_constraints
where constraint_schema ='public'
and table_name = 'category';

constraint_name | constraint_type
----------------+----------------
category_pkey   | PRIMARY KEY

alter table category
drop constraint category_pkey;
```

## Modifier une colonne VARCHAR
<a name="r_ALTER_TABLE_examples_alter-column"></a>

Pour conserver le stockage, vous pouvez définir une table initialement avec des colonnes VARCHAR dotées de la taille minimale nécessaire pour vos données actives. Vous pouvez modifier ultérieurement la table afin d’augmenter la taille de la colonne si plus tard vous avez besoin d’accueillir plus de chaînes. 

L’exemple suivant augmente la taille de la colonne EVENTNAME à VARCHAR (300). 

```
alter table event alter column eventname type varchar(300);
```

## Modifier une colonne VARBYTE
<a name="r_ALTER_TABLE_examples_alter-varbyte-column"></a>

Pour conserver le stockage, vous pouvez définir une table initialement avec des colonnes VARBYTE dotées de la taille minimale nécessaire pour vos données actives. Vous pouvez modifier ultérieurement la table afin d’augmenter la taille de la colonne si plus tard vous avez besoin d’accueillir plus de chaînes. 

L’exemple suivant augmente la taille de la colonne EVENTNAME à VARBYTE(300). 

```
alter table event alter column eventname type varbyte(300);
```

## Modifier l’encodage de la compression d’une colonne
<a name="r_ALTER_TABLE_examples_alter-column-encoding"></a>

Vous pouvez modifier le codage de compression d’une colonne. Vous trouverez ci-dessous une série d’exemples illustrant cette approche. La définition de table pour ces exemples est la suivante.

```
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
```

L'instruction suivante modifie le codage de compression de la colonne c0 du codage LZO au codage. AZ64 

```
alter table t1 alter column c0 encode az64;
```

L'instruction suivante modifie le codage de compression de la colonne c1 du codage standard Z au AZ64 codage. 

```
alter table t1 alter column c1 encode az64;
```

L’instruction suivante modifie l’encodage de compression pour la colonne c2 de l’encodage LZO à l’encodage Byte-dictionary. 

```
alter table t1 alter column c2 encode bytedict;
```

L’instruction suivante modifie l’encodage de compression pour la colonne c3 de l’encodage Zstandard à l’encodage Runlength. 

```
alter table t1 alter column c3 encode runlength;
```

## Modifier une colonne DISTSTYLE KEY DISTKEY
<a name="r_ALTER_TABLE_examples_alter-distkey"></a>

Les exemples suivants montre comment modifier les colonnes DISTSTYLE et DISTKEY d’une table.

Créez une table avec un style de distribution EVEN. La vue SVV\$1TABLE\$1INFO montre que la colonne DISTSTYLE est EVEN. 

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

Modifiez la table DISTKEY en `inv_warehouse_sk`. La vue SVV\$1TABLE\$1INFO montre la colonne `inv_warehouse_sk` en tant que clé de distribution résultante. 

```
alter table inventory alter diststyle key distkey inv_warehouse_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_warehouse_sk)
```

Modifiez la table DISTKEY en `inv_item_sk`. La vue SVV\$1TABLE\$1INFO montre la colonne `inv_item_sk` en tant que clé de distribution résultante. 

```
alter table inventory alter distkey inv_item_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_item_sk)
```

## Modifier une table en DISTSTYLE ALL
<a name="r_ALTER_TABLE_examples_alter-diststyle-all"></a>

Les exemples suivants montrent comment modifier une table en DISTSTYLE ALL.

Créez une table avec un style de distribution EVEN. La vue SVV\$1TABLE\$1INFO montre que la colonne DISTSTYLE est EVEN. 

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

Modifiez la table DISTSTYLE en ALL. La vue SVV\$1TABLE\$1INFO affiche le DISTSYTLE modifié. 

```
alter table inventory alter diststyle all;

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     ALL
```

## Modifier une table SORTKEY
<a name="r_ALTER_TABLE_examples_alter-sortkey"></a>

Vous pouvez modifier une table pour avoir une clé de tri composée ou aucune clé de tri.

Dans la définition de table suivante, la table `t1` est définie par une clé de tri entrelacée.

```
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
```

La commande suivante modifie la table d’une clé de tri entrelacée en une clé de tri composée.

```
alter table t1 alter sortkey(c0, c1);
```

La commande suivante modifie la table pour supprimer la clé de tri entrelacée.

```
alter table t1 alter sortkey none;
```

Dans la définition de table suivante, la table `t1` est définie avec une colonne `c0` comme clé de tri.

```
create table t1 (c0 int, c1 int) sortkey(c0);
```

La commande suivante modifie la table `t1` en clé de tri composée.

```
alter table t1 alter sortkey(c0, c1);
```

## Modifier une table en ENCODE AUTO
<a name="r_ALTER_TABLE_examples_alter-encode-auto"></a>

L’exemple suivant montre comment modifier une table en ENCODE AUTO. 

La définition de table pour cet exemple est la suivante. `c0`La colonne est définie avec le type de codage AZ64, et la colonne `c1` est définie avec le type de codage LZO.

```
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
```

Pour cette table, l’instruction suivante modifie l’encodage en AUTO.

```
alter table t1 alter encode auto;
```

L’exemple suivant illustre comment modifier une table pour supprimer le paramètre ENCODE AUTO. 

La définition de table pour cet exemple est la suivante. Les colonnes de la table sont définies sans encodage. Dans ce cas, l’encodage est par défaut ENCODE AUTO.

```
create table t2(c0 int, c1 varchar);
```

Pour cette table, l’instruction suivante modifie l’encodage de la colonne c0 en LZO. L’encodage de la table n’est plus défini sur ENCODE AUTO.

```
alter table t2 alter column c0 encode lzo;;
```

## Modifier le contrôle de sécurité au niveau des lignes
<a name="r_ALTER_TABLE_examples_basic-rls"></a>

La commande suivante désactive la politique RLS pour la table : 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
```

La commande suivante active RLS pour la table : 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
```

La commande suivante active RLS pour la table et la rend accessible sur les unités de partage des données : 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
```

La commande suivante active RLS pour la table et la rend inaccessible sur les unités de partage des données : 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
```

La commande suivante active RLS et définit le type de conjonction RLS sur OR pour la table : 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
```

La commande suivante active RLS et définit le type de conjonction RLS sur AND pour la table : 

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;
```

# Exemples de modification d’une table externe
<a name="r_ALTER_TABLE_external-table"></a>

Les exemples suivants utilisent un compartiment Amazon S3 situé dans la région USA Est (Virginie du Nord) (`us-east-1`) Région AWS et les exemples de tables créés [Exemples](r_CREATE_EXTERNAL_TABLE_examples.md) pour CREATE TABLE. Pour plus d’informations sur l’utilisation des partitions avec des tables externes, consultez [Partitionnement des tables externes Redshift Spectrum](c-spectrum-external-tables.md#c-spectrum-external-tables-partitioning). 

L’exemple suivant définit la propriété de table numRows pour la table externe SPECTRUM.SALES sur 170 000 lignes.

```
alter table spectrum.sales
set table properties ('numRows'='170000');
```

L’exemple suivant modifie l’emplacement de la table externe SPECTRUM.SALES.

```
alter table spectrum.sales
set location 's3://redshift-downloads/tickit/spectrum/sales/';
```

L’exemple suivant définit le format de la table externe SPECTRUM.SALES sur Parquet.

```
alter table spectrum.sales
set file format parquet;
```

L’exemple suivant ajoute une partition pour la table SPECTRUM.SALES\$1PART.

```
alter table spectrum.sales_part
add if not exists partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
```

L’exemple suivant ajoute trois partitions pour la table SPECTRUM.SALES\$1PART.

```
alter table spectrum.sales_part add if not exists
partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/'
partition(saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/'
partition(saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
```

L’exemple suivant modifie SPECTRUM.SALES\$1PART afin de supprimer la partition avec `saledate='2008-01-01''`.

```
alter table spectrum.sales_part
drop partition(saledate='2008-01-01');
```

L’exemple suivant définit un nouveau chemin d’accès Amazon S3 pour la partition avec `saledate='2008-01-01'`.

```
alter table spectrum.sales_part
partition(saledate='2008-01-01')
set location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01-01/';
```

L’exemple suivant remplace le nom de `sales_date` par `transaction_date`. 

```
alter table spectrum.sales rename column sales_date to transaction_date;
```

L’exemple suivant définit le mappage de colonne sur le mappage par position pour une table externe qui utilise le format Optimized Row Columnar (ORC).

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='position');
```

L’exemple suivant définit le mappage de colonne sur le mappage par nom pour une table externe qui utilise le format ORC.

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='name');
```

# Exemples ALTER TABLE ADD et DROP COLUMN
<a name="r_ALTER_TABLE_COL_ex-add-drop"></a>

Les exemples suivants montrent comment utiliser ALTER TABLE pour ajouter, puis supprimer une colonne de table de base, ainsi que pour supprimer une colonne avec un objet dépendant. 

## ADD puis DROP une colonne de base
<a name="r_ALTER_TABLE_COL_ex-add-then-drop-a-basic-column"></a>

L’exemple suivant ajoute une colonne FEEDBACK\$1SCORE autonome à la table USERS. Cette colonne contient simplement un nombre entier et la valeur par défaut de cette colonne est NULL (pas de score de commentaire). 

Commencez par interroger la table du catalogue PG\$1TABLE\$1DEF pour afficher le schéma de la table USERS : 

```
column        | type                   | encoding | distkey | sortkey
--------------+------------------------+----------+---------+--------
userid        | integer                | delta    | true    |       1
username      | character(8)           | lzo      | false   |       0
firstname     | character varying(30)  | text32k  | false   |       0
lastname      | character varying(30)  | text32k  | false   |       0
city          | character varying(30)  | text32k  | false   |       0
state         | character(2)           | bytedict | false   |       0
email         | character varying(100) | lzo      | false   |       0
phone         | character(14)          | lzo      | false   |       0
likesports    | boolean                | none     | false   |       0
liketheatre   | boolean                | none     | false   |       0
likeconcerts  | boolean                | none     | false   |       0
likejazz      | boolean                | none     | false   |       0
likeclassical | boolean                | none     | false   |       0
likeopera     | boolean                | none     | false   |       0
likerock      | boolean                | none     | false   |       0
likevegas     | boolean                | none     | false   |       0
likebroadway  | boolean                | none     | false   |       0
likemusicals  | boolean                | none     | false   |       0
```

Maintenant, ajoutez la colonne feedback\$1score : 

```
alter table users
add column feedback_score int
default NULL;
```

Sélectionnez la colonne FEEDBACK\$1SCORE de la table USERS pour vérifier qu’elle a été ajoutée : 

```
select feedback_score from users limit 5;

feedback_score
----------------
NULL
NULL
NULL
NULL
NULL
```

Supprimez la colonne pour rétablir le DDL d’origine : 

```
alter table users drop column feedback_score;
```

## Suppression d’une colonne avec un objet dépendant
<a name="r_ALTER_TABLE_COL_ex-dropping-a-column-with-a-dependent-object"></a>

L’exemple suivant supprime une colonne qui a un objet dépendant. En conséquence, l’objet dépendant est également supprimé. 

Pour commencer, ajoutez à nouveau la colonne FEEDBACK\$1SCORE à la table USERS : 

```
alter table users
add column feedback_score int
default NULL;
```

Ensuite, créez une vue de la table USERS appelée USERS\$1VIEW : 

```
create view users_view as select * from users;
```

Maintenant, essayez de supprimer la colonne FEEDBACK\$1SCORE de la table USERS. Cette instruction DROP utilise le comportement par défaut (RESTRICT) : 

```
alter table users drop column feedback_score;
```

Amazon Redshift affiche un message d’erreur indiquant que la colonne ne peut pas être supprimée, car un autre objet en dépend. 

Essayez à nouveau de supprimer la colonne FEEDBACK\$1SCORE, cette fois en spécifiant CASCADE pour supprimer tous les objets dépendants : 

```
alter table users
drop column feedback_score cascade;
```

# ALTER TABLE APPEND
<a name="r_ALTER_TABLE_APPEND"></a>

Ajoute des lignes à une table cible en déplaçant les données à partir d’une table source existante. Les données de la table source sont déplacées vers les colonnes correspondantes de la table cible. L’ordre des colonnes n’importe pas. Une fois que les données ont été correctement ajoutées à la table cible, la table source est vide. ALTER TABLE APPEND est généralement beaucoup plus rapide qu’une opération [CREATE TABLE AS](r_CREATE_TABLE_AS.md) ou [INSERT](r_INSERT_30.md) INTO semblable, car les données sont déplacées, pas dupliquées. 

**Note**  
ALTER TABLE APPEND déplace des blocs de données entre la table source et la table cible. Pour améliorer les performances, ALTER TABLE APPEND ne condense pas le stockage dans le cadre de l’opération d’ajout. Par conséquent, le stockage utilisé augmente provisoirement. Pour récupérer de l’espace, exécutez une opération [VACUUM](r_VACUUM_command.md).

Les colonnes ayant le même nom doivent aussi avoir des attributs de colonne identiques. Si la table source ou la table cible contient des colonnes qui n’existent pas dans l’autre table, utilisez les paramètres IGNOREEXTRA ou FILLTARGET pour spécifier comment les colonnes supplémentaires doivent être gérées. 

Vous ne pouvez pas ajouter une colonne d’identité. Si les deux tables incluent une colonne d’identité, la commande échoue. Si une seule table dispose d’une colonne d’identité, incluez le paramètre FILLTARGET ou IGNOREEXTRA. Pour plus d'informations, consultez [Notes d’utilisation d’ALTER TABLE APPEND](#r_ALTER_TABLE_APPEND_usage).

Vous pouvez ajouter une colonne GENERATED BY DEFAULT AS IDENTITY. Vous pouvez mettre à jour des colonnes définies comme GENERATED BY DEFAULT AS IDENTITY avec des valeurs que vous fournissez. Pour plus d’informations, consultez [Notes d’utilisation d’ALTER TABLE APPEND](#r_ALTER_TABLE_APPEND_usage). 

La table cible doit être une table permanente. Toutefois, la source peut être une table permanente ou une vue matérialisée configurée pour l’ingestion en streaming. Les deux objets doivent utiliser les mêmes style de distribution et clé de distribution, si l’un ou l’autre a été défini. Si les objets sont triés, les deux objets doivent utiliser le même style de tri et définir les mêmes colonnes comme clés de tri.

Une commande ALTER TABLE APPEND valide automatiquement aussitôt l’opération terminée. Elle ne peut pas être annulée. Vous ne pouvez pas exécuter ALTER TABLE APPEND au sein d’un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

## Privilèges requis
<a name="r_ALTER_TABLE_APPEND-privileges"></a>

Selon la commande ALTER TABLE APPEND, l’un des privilèges suivants est requis :
+ Superuser
+ Utilisateurs disposant du privilège système ALTER TABLE
+ Utilisateurs disposant des privilèges DELETE et SELECT sur la table source, et des privilèges INSERT sur la table cible.

## Syntaxe
<a name="r_ALTER_TABLE_APPEND-synopsis"></a>

```
ALTER TABLE target_table_name APPEND FROM [ source_table_name | source_materialized_view_name ]
[ IGNOREEXTRA | FILLTARGET ]
```

L’ajout à partir d’une vue matérialisée fonctionne uniquement dans le cas où votre vue matérialisée est configurée pour [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md).

## Parameters
<a name="r_ALTER_TABLE_APPEND-parameters"></a>

 *nom\$1table\$1cible*   
Nom de la table à laquelle les lignes sont ajoutées. Spécifiez simplement le nom de la table ou choisissez le format *nom\$1schéma.nom\$1table* pour utiliser un schéma spécifique. La table cible doit être une table permanente existante.

 FROM *nom\$1table\$1source*   
Nom de la table qui fournit les lignes à ajouter. Spécifiez simplement le nom de la table ou choisissez le format *nom\$1schéma.nom\$1table* pour utiliser un schéma spécifique. La table source doit être une table permanente existante.

 FROM *source\$1materialized\$1view\$1name*   
Nom de la vue matérialisée qui fournit les lignes à ajouter. L’ajout à partir d’une vue matérialisée fonctionne uniquement dans le cas où votre vue matérialisée est configurée pour [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md). La vue matérialisée source doit déjà exister. 

IGNOREEXTRA   
Mot-clé qui spécifie que si la table source inclut des colonnes qui ne sont pas présentes dans la table cible, les données des colonnes supplémentaires doivent être ignorées. Vous ne pouvez pas utiliser IGNOREEXTRA avec FILLTARGET. 

FILLTARGET   
Mot-clé qui spécifie que si la table cible inclut des colonnes qui ne sont pas présentes dans la table source, les colonnes doivent être remplies avec la valeur de colonne [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default), s’il en a été défini une, ou avec la valeur NULL. Vous ne pouvez pas utiliser IGNOREEXTRA avec FILLTARGET. 

## Notes d’utilisation d’ALTER TABLE APPEND
<a name="r_ALTER_TABLE_APPEND_usage"></a>
+ ALTER TABLE APPEND déplace uniquement les colonnes identiques de la table source vers la table cible. L’ordre des colonnes n’importe pas. 
+  Si la table source ou la table cible contient des colonnes supplémentaires, utilisez FILLTARGET ou IGNOREEXTRA selon les règles suivantes : 
  + Si la table source contient des colonnes qui n’existent pas dans la table cible, incluez IGNOREEXTRA. La commande ignore les colonnes supplémentaires de la table source.
  + Si la table cible contient des colonnes qui n’existent pas dans la table source, incluez FILLTARGET. La commande remplit les colonnes supplémentaires de la table cible avec la valeur de colonne par défaut ou la valeur IDENTITY, s’il en a été défini une, ou la valeur NULL.
  + Si la table source et la table cible contiennent des colonnes supplémentaires, la commande échoue. Vous ne pouvez pas utiliser FILLTARGET et IGNOREEXTRA. 
+ Si une colonne ayant le même nom, mais des attributs différents, existe dans les deux tables, la commande échoue. Les colonnes aux noms similaires doivent avoir en commun les attributs suivants : 
  + Type de données
  + Taille de colonne
  + Encodage de compression
  + Non null
  + Style de tri
  + Colonnes de clé de tri
  + Style de distribution
  + Colonnes de clé de distribution
+ Vous ne pouvez pas ajouter une colonne d’identité. Si la table source et la table cible possèdent des colonnes d’identité, la commande échoue. Si seule la table source contient une colonne d’identité, incluez le paramètre IGNOREEXTRA afin que la colonne d’identité soit ignorée. Si seule la table cible comporte une colonne d’identité, incluez le paramètre FILLTARGET afin que la colonne d’identité soit renseignée selon la clause IDENTITY définie pour la table. Pour plus d'informations, consultez [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default). 
+ Vous pouvez ajouter une colonne d’identité par défaut avec l’instruction ALTER TABLE APPEND. Pour plus d’informations, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md). 
+ Les opérations ALTER TABLE APPEND sont verrouillées exclusivement lorsqu’elles sont exécutées sur des vues matérialisées en streaming Amazon Redshift associées à l’un des éléments suivants :
  +  Un flux de données Amazon Kinesis 
  +  Une rubrique Amazon Managed Streaming pour Apache Kafka 
  +  Un flux externe pris en charge, tel qu’une rubrique Confluent Cloud Kafka 

  Pour plus d’informations, consultez [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md).

## Exemples ALTER TABLE APPEND
<a name="r_ALTER_TABLE_APPEND_examples"></a>

Supposons que votre organisation gère une table, SALES\$1MONTHLY, pour capturer les transactions commerciales actuelles. Vous voulez, chaque mois, déplacer les données de la table des transactions vers la table SALES. 

Vous pouvez utiliser les commandes INSERT INTO et TRUNCATE suivantes pour accomplir la tâche. 

```
insert into sales (select * from sales_monthly);
truncate sales_monthly;
```

Cependant, vous pouvez effectuer la même opération bien plus efficacement en utilisant une commande ALTER TABLE APPEND. 

D’abord, interrogez la table catalogue système [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md) pour vérifier que les deux tables ont les mêmes colonnes avec des attributs de colonne identiques. 

```
select trim(tablename) as table, "column", trim(type) as type,
encoding, distkey, sortkey, "notnull"
from pg_table_def where tablename like 'sales%';

table      | column     | type                        | encoding | distkey | sortkey | notnull
-----------+------------+-----------------------------+----------+---------+---------+--------
sales      | salesid    | integer                     | lzo      | false   |       0 | true
sales      | listid     | integer                     | none     | true    |       1 | true
sales      | sellerid   | integer                     | none     | false   |       2 | true
sales      | buyerid    | integer                     | lzo      | false   |       0 | true
sales      | eventid    | integer                     | mostly16 | false   |       0 | true
sales      | dateid     | smallint                    | lzo      | false   |       0 | true
sales      | qtysold    | smallint                    | mostly8  | false   |       0 | true
sales      | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
sales      | commission | numeric(8,2)                | delta32k | false   |       0 | false
sales      | saletime   | timestamp without time zone | lzo      | false   |       0 | false
salesmonth | salesid    | integer                     | lzo      | false   |       0 | true
salesmonth | listid     | integer                     | none     | true    |       1 | true
salesmonth | sellerid   | integer                     | none     | false   |       2 | true
salesmonth | buyerid    | integer                     | lzo      | false   |       0 | true
salesmonth | eventid    | integer                     | mostly16 | false   |       0 | true
salesmonth | dateid     | smallint                    | lzo      | false   |       0 | true
salesmonth | qtysold    | smallint                    | mostly8  | false   |       0 | true
salesmonth | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | commission | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

Ensuite, regardez la taille de chaque table.

```
select count(*) from sales_monthly;
 count
-------
  2000
(1 row)

select count(*) from sales;
 count
-------
 412,214
(1 row)
```

Maintenant, exécutez la commande ALTER TABLE APPEND suivante.

```
alter table sales append from sales_monthly;         
```

Regardez à nouveau la taille de chaque table. La table SALES\$1MONTHLY a maintenant 0 ligne et la table SALES a augmenté de 2000 lignes.

```
select count(*) from sales_monthly;
 count
-------
     0
(1 row)

select count(*) from sales;
 count
-------
 414214
(1 row)
```

Si la table source a plus de colonnes que la table cible, spécifiez le paramètre IGNOREEXTRA. L’exemple suivant utilise le paramètre IGNOREEXTRA pour ignorer les colonnes supplémentaires de la table SALES\$1LISTING lors de l’ajout à la table SALES.

```
alter table sales append from sales_listing ignoreextra;
```

Si la table cible a plus de colonnes que la table source, spécifiez le paramètre FILLTARGET. L’exemple suivant utilise le paramètre FILLTARGET pour remplir les colonnes de la table SALES\$1REPORT qui n’existent pas dans la table SALES\$1MONTH.

```
alter table sales_report append from sales_month filltarget;
```

L’exemple suivant montre comment utiliser ALTER TABLE APPEND avec une vue matérialisée en tant que source.

```
ALTER TABLE target_tbl APPEND FROM my_streaming_materialized_view;
```

Les noms de table et de vue matérialisée de cet exemple sont des exemples. L’ajout à partir d’une vue matérialisée fonctionne uniquement dans le cas où votre vue matérialisée est configurée pour [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md). Cela déplace tous les enregistrements de la vue matérialisée source vers une table cible avec le même schéma que la vue matérialisée et laisse la vue matérialisée intacte. Il s’agit du même comportement que lorsque la source des données est une table.

# MODIFIER LE MODÈLE
<a name="r_ALTER_TEMPLATE"></a>

Modifie la définition d'un modèle existant. Utilisez cette commande pour renommer un modèle, modifier le propriétaire d'un modèle, ajouter ou supprimer des paramètres dans la définition du modèle ou définir des valeurs de paramètres.

## Privilèges requis
<a name="r_ALTER_TEMPLATE-privileges"></a>

Pour modifier un modèle, vous devez disposer de l'un des éléments suivants :
+ Privilèges de superutilisateur
+ Privilège ALTER TEMPLATE et privilège USAGE sur le schéma contenant le modèle

## Syntaxe
<a name="r_ALTER_TEMPLATE-synopsis"></a>

```
ALTER TEMPLATE [database_name.][schema_name.]template_name
{
RENAME TO new_name
| OWNER TO new_owner
| ADD  parameter [AS] [value]
| DROP parameter
| SET parameter TO value1 [, parameter2 TO value2 , ...]
};
```

## Parameters
<a name="r_ALTER_TEMPLATE-parameters"></a>

 *database\$1name*   
(Facultatif) Nom de la base de données dans laquelle le modèle est créé. Si elle n'est pas spécifiée, la base de données actuelle est utilisée. 

 *nom\$1schéma*   
(Facultatif) Nom du schéma dans lequel le modèle est créé. S'il n'est pas spécifié, le modèle est recherché dans le chemin de recherche actuel. 

 *nom\$1modèle*   
Nom du modèle à modifier. 

RENAME TO   
Clause qui renomme le modèle. 

 *nouveau\$1nom*   
Le nouveau nom du modèle. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md). 

OWNER TO   
Clause qui modifie le propriétaire du modèle. 

 *nouveau\$1propriétaire*   
Le nouveau propriétaire du modèle. 

*Paramètre* ADD [AS] [*valeur*]  
Ajoute un nouveau paramètre au modèle.  
+ Pour les paramètres contenant uniquement des mots clés (tels que CSV ou GZIP), spécifiez uniquement le nom du paramètre.
+ Pour les paramètres qui nécessitent des valeurs, spécifiez le nom du paramètre suivi de la valeur. Vous pouvez éventuellement inclure AS entre le paramètre et la valeur. 

*Paramètre* DROP  
Supprime le paramètre spécifié du modèle. Impossible de supprimer plusieurs paramètres avec une seule commande DROP.

*RÉGLER le *paramètre SUR* *valeur1* [, *paramètre2 SUR valeur2*,...]*  
Met à jour les valeurs des paramètres de modèle existants. À utiliser uniquement pour les paramètres qui ont déjà des valeurs. Plusieurs paramètres peuvent être mis à jour en une seule commande.

## Exemples
<a name="r_ALTER_TEMPLATE-examples"></a>

L'exemple suivant renomme le modèle test\$1template en demo\$1template.

```
ALTER TEMPLATE test_template
RENAME TO demo_template;
```

L'exemple suivant attribue la propriété du schéma demo\$1template à l'utilisateur bob.

```
ALTER TEMPLATE demo_template
OWNER TO bob;
```

L'exemple suivant ajoute un paramètre `CSV` au modèle demo\$1template

```
ALTER TEMPLATE demo_template
ADD CSV;
```

L'exemple suivant ajoute un paramètre `TIMEFORMAT 'auto'` au modèle demo\$1template

```
ALTER TEMPLATE demo_template
ADD TIMEFORMAT 'auto';
```

L'exemple suivant supprime le paramètre `ENCRYPTED` du modèle demo\$1template

```
ALTER TEMPLATE demo_template
DROP ENCRYPTED;
```

L'exemple suivant définit le `DELIMITER` paramètre sur `'|'` et le `TIMEFORMAT` paramètre sur `'epochsecs'` :

```
ALTER TEMPLATE demo_template
SET DELIMITER TO '|', TIMEFORMAT TO 'epochsecs';
```

# ALTER USER
<a name="r_ALTER_USER"></a>

Modifie un utilisateur de base de données.

## Privilèges requis
<a name="r_ALTER_USER-privileges"></a>

Les privilèges suivants sont requis pour ALTER USER :
+ Superuser
+ Utilisateurs disposant du privilège ALTER USER
+ Utilisateur actuel qui souhaite modifier son propre mot de passe

## Syntaxe
<a name="r_ALTER_USER-synopsis"></a>

```
ALTER USER username [ WITH ] option [, ... ]

where option is

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ VALID UNTIL 'expiration_date' ]
| RENAME TO new_name |
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit | RESET SESSION TIMEOUT
| SET parameter { TO | = } { value | DEFAULT }
| RESET parameter
| EXTERNALID external_id
```

## Parameters
<a name="r_ALTER_USER-parameters"></a>

 *nom d’utilisateur*   
Nom de l’utilisateur. 

WITH   
Mot-clé facultatif. 

CREATEDB \$1 NOCREATEDB   
L’option CREATEDB permet à l’utilisateur de créer de nouvelles bases de données. NOCREATEDB est la valeur par défaut. 

CREATEUSER \$1 NOCREATEUSER   
L’option CREATEUSER crée un super-utilisateur avec tous les privilèges de base de données, y compris CREATE USER. La valeur par défaut est NOCREATEUSER. Pour plus d'informations, consultez [Super-utilisateurs](r_superusers.md).

SYSLOG ACCESS \$1 RESTRICTED \$1 UNRESTRICTED \$1  <a name="alter-user-syslog-access"></a>
Clause qui spécifie le niveau d’accès de l’utilisateur sur les tableaux système et les vues Amazon Redshift.   
Les utilisateurs ordinaires disposant de l’autorisation SYSLOG ACCESS RESTRICTED peuvent voir uniquement les lignes qu’ils ont générées dans les tables et vues systèmes visibles par l’utilisateur. La valeur par défaut est RESTRICTED.   
Les utilisateurs standards ayant l’autorisation SYSLOG ACCESS UNRESTRICTED peuvent voir toutes les lignes des tables et vues systèmes visibles par l’utilisateur, y compris les lignes générées par un autre utilisateur. UNRESTRICTED ne permet pas à un utilisateur standard d’avoir accès aux tableaux visibles du super-utilisateur. Seuls les super-utilisateurs peuvent afficher les données des tableaux visibles des super-utilisateurs.   
Accorder à un utilisateur un accès illimité aux tableaux système permet à celui-ci de voir les données générées par d’autres utilisateurs. Par exemple, STL\$1QUERY et STL\$1QUERYTEXT contiennent le texte complet des instructions INSERT, UPDATE et DELETE, qui peuvent contenir des données confidentielles générées par l’utilisateur. 
Toutes les lignes de SVV\$1TRANSACTIONS sont visibles de tous les utilisateurs.   
Pour plus d’informations, consultez [Visibilité des données dans les tables et vues système](cm_chap_system-tables.md#c_visibility-of-data).

PASSWORD \$1 ’*password*’ \$1 ’*md5hash*’ \$1 ’*sha256hash*’ \$1 DISABLE \$1  
Définit le mot de passe de l’utilisateur.   
Par défaut, les utilisateurs peuvent modifier leurs propres mots de passe, sauf si le mot de passe est désactivé. Pour désactiver le mot de passe d’un utilisateur, spécifiez DISABLE. Lorsque le mot de passe d'un utilisateur est désactivé, il est supprimé du système et l'utilisateur ne peut se connecter qu'à l'aide d'informations d'identification utilisateur temporaires Gestion des identités et des accès AWS (IAM). Pour plus d’informations, consultez [Utilisation de l’authentification IAM pour générer des informations d’identification de l’utilisateur de base de données](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html). Seul un super-utilisateur peut activer ou désactiver des mots de passe. Vous ne pouvez pas désactiver le mot de passe d’un super-utilisateur. Pour activer un mot de passe, exécutez ALTER USER et spécifiez un mot de passe.  
Pour en savoir plus sur l’utilisation du paramètre PASSWORD, consultez [CREATE USER](r_CREATE_USER.md). 

VALID UNTIL ’*date\$1expiration*’   
Spécifie que le mot de passe a une date d’expiration. Utilisez la valeur `'infinity'` pour éviter d’avoir une date d’expiration. Le type de données valide pour ce paramètre est timestamp.   
Seuls les super-utilisateurs peuvent utiliser ce paramètre.

RENAME TO   
Renomme l’utilisateur. 

 *nouveau\$1nom*   
Nouveau nom de l’utilisateur. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).  
Lorsque vous renommez un utilisateur, vous devez aussi modifier son mot de passe. Le mot de passe de réinitialisation ne doit pas nécessairement être différent du mot de passe précédent. Comme le nom d’utilisateur est utilisé dans le cadre du chiffrement du mot de passe, quand un utilisateur est renommé, le mot de passe est effacé. L’utilisateur ne sera pas en mesure de se connecter tant que le mot de passe n’aura pas été réinitialisé. Par exemple :   

```
alter user newuser password 'EXAMPLENewPassword11'; 
```

CONNECTION LIMIT \$1 *limite* \$1 UNLIMITED \$1   
Le nombre maximum de connexions à la base de données que l’utilisateur est autorisé à ouvrir simultanément. La limite se s’applique pas aux super-utilisateurs. Utilisez le mot-clé UNLIMITED pour autoriser le nombre maximum de connexions simultanées. Une limite sur le nombre de connexions pour chaque base de données peut également s’appliquer. Pour plus d'informations, consultez [CREATE DATABASE](r_CREATE_DATABASE.md). La valeur par défaut est UNLIMITED. Pour afficher les connexions en cours, interrogez la vue système [STV\$1SESSIONS](r_STV_SESSIONS.md).  
Si les deux limites de connexion (utilisateurs et base de données) s’appliquent, un emplacement de connexion inutilisé situé entre les deux limites doit également être disponible lorsqu’un utilisateur tente de se connecter.

SESSION TIMEOUT *limit* \$1 RESET SESSION TIMEOUT  
Durée maximale en secondes pendant laquelle une séance reste inactive ou en veille. La plage est comprise entre 60 secondes (une minute) et 1 728 000 secondes (20 jours). Si aucun délai d’expiration de séance n’est défini pour l’utilisateur, le paramètre de cluster s’applique. Pour plus d’informations, consultez [Quotas et limites dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dans le *Guide de gestion Amazon Redshift*.  
Lorsque vous définissez le délai d’expiration de séance, il s’applique uniquement aux nouvelles séances.  
Pour afficher des informations sur les séances utilisateur actives, y compris l’heure de début, le nom d’utilisateur et le délai d’expiration de la séance, interrogez la vue système [STV\$1SESSIONS](r_STV_SESSIONS.md). Pour afficher des informations sur l’historique des séances utilisateur, interrogez la vue [STL\$1SESSIONS](r_STL_SESSIONS.md). Pour récupérer des informations sur les utilisateurs de la base de données, y compris les valeurs de délai d’expiration de séance, interrogez la vue [SVL\$1USER\$1INFO](r_SVL_USER_INFO.md).

SET   
Définit un paramètre de configuration avec une nouvelle valeur par défaut pour toutes les séances exécutées par l’utilisateur spécifié. 

RESET   
Réinitialise un paramètre de configuration à la valeur par défaut d’origine de l’utilisateur spécifié. 

 *paramètre*   
Nom du paramètre à définir ou à réinitialiser. 

 *valeur*   
Nouvelle valeur du paramètre. 

DEFAULT   
Définit le paramètre de configuration avec la valeur par défaut pour toutes les séances exécutées par l’utilisateur spécifié. 

EXTERNALID *external\$1id*   
Identificateur de l’utilisateur associé à un fournisseur d’identité. Le mot de passe de l’utilisateur doit être désactivé. Pour plus d’informations, consultez [Fédération de fournisseur d’identité natif pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Notes d’utilisation
<a name="r_ALTER_USER_usage_notes"></a>
+ **Tentative de modification de rdsdb** : vous ne pouvez pas modifier l’utilisateur nommé `rdsdb`.
+ **Création d'un mot de passe inconnu** — Lorsque vous utilisez l'authentification Gestion des identités et des accès AWS (IAM) pour créer des informations d'identification d'utilisateur de base de données, vous souhaiterez peut-être créer un superutilisateur capable de se connecter uniquement à l'aide d'informations d'identification temporaires. Vous ne pouvez pas désactiver le mot de passe d'un superutilisateur, mais vous pouvez créer un mot de passe inconnu à l'aide d'une chaîne de MD5 hachage générée aléatoirement.

  ```
  alter user iam_superuser password 'md51234567890123456780123456789012';
  ```
+ **Définition de search\$1path** : lorsque vous définissez le paramètre [search\$1path](r_search_path.md) avec la commande ALTER USER, la modification prend effet à la prochaine connexion de l’utilisateur spécifié. Si vous voulez modifier la valeur search\$1path de l’utilisateur et de la séance en cours, utilisez une commande SET. 
+ **Définition du fuseau horaire** : lorsque vous utilisez SET TIMEZONE avec la commande ALTER USER, la modification prend effet à la prochaine connexion de l’utilisateur spécifié.
+ **Utilisation de politiques de masquage dynamique des données et de sécurité au niveau des lignes** : lorsque votre cluster provisionné ou votre espace de noms sans serveur est soumis à des politiques de masquage dynamique des données ou de sécurité au niveau des lignes, les commandes suivantes sont bloquées pour les utilisateurs standard : 

  ```
  ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier
  ```

  Seuls les super-utilisateurs et les utilisateurs disposant du privilège ALTER USER peuvent définir ces options de configuration. Pour plus d’informations sur la sécurité au niveau des lignes, consultez [Sécurité au niveau des lignes](t_rls.md). Pour plus d’informations sur le masquage dynamique des données, consultez [Masquage dynamique des données](t_ddm.md). 

## Exemples
<a name="r_ALTER_USER-examples"></a>

L’exemple suivant donne à l’utilisateur ADMIN le privilège de créer des bases de données : 

```
alter user admin createdb;
```

L’exemple suivant définit le mot de passe de l’utilisateur ADMIN avec la valeur `adminPass9` et définit une heure et une date d’expiration pour le mot de passe : 

```
alter user admin password 'adminPass9'
valid until '2017-12-31 23:59';
```

L’exemple suivant renomme l’utilisateur ADMIN en SYSADMIN : 

```
alter user admin rename to sysadmin;
```

L’exemple suivant met à jour le délai d’expiration de la séance en veille pour un utilisateur à 300 secondes.

```
ALTER USER dbuser SESSION TIMEOUT 300;
```

Réinitialise le délai d’expiration de la séance en veille de l’utilisateur. Lorsque vous le réinitialisez, le paramètre de cluster s’applique. Vous devez être un super-utilisateur de la base de données pour exécuter cette commande. Pour plus d’informations, consultez [Quotas et limites dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dans le *Guide de gestion Amazon Redshift*.

```
ALTER USER dbuser RESET SESSION TIMEOUT;
```

L’exemple suivant met à jour l’ID externe d’un utilisateur nommé `bob`. Cet espace de noms est `myco_aad`. Si l’espace de noms n’est pas associé à un fournisseur d’identité enregistré, il en résulte une erreur.

```
ALTER USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

L’exemple suivant définit le fuseau horaire pour toutes les sessions exécutées par un utilisateur de base de données spécifique. Il modifie le fuseau horaire pour les sessions ultérieures, mais pas pour celle en cours.

```
ALTER USER odie SET TIMEZONE TO 'Europe/Zurich';
```

L’exemple suivant définit le nombre maximal de connexions à la base de données que l’utilisateur `bob` est autorisé à ouvrir.

```
ALTER USER bob CONNECTION LIMIT 10;
```

# ANALYSE
<a name="r_ANALYZE"></a>

Met à jour les statistiques de table pour une utilisation par le planificateur de requête. 

## Privilèges requis
<a name="r_ANALYZE-privileges"></a>

Les privilèges suivants sont requis pour ANALYZE :
+ Superuser
+ Utilisateurs disposant du privilège ANALYZE
+ Propriétaire de la relation
+ Propriétaire de la base de données avec qui la table est partagée

## Syntaxe
<a name="r_ANALYZE-synopsis"></a>

```
ANALYZE [ VERBOSE ]
[ [ table_name [ ( column_name [, ...] ) ] ]
[ PREDICATE COLUMNS | ALL  COLUMNS ]
```

## Parameters
<a name="r_ANALYZE-parameters"></a>

VERBOSE   
Clause qui renvoie des messages d’information d’avancement relatifs à l’opération ANALYZE. Cette option est utile lorsque vous ne spécifiez pas une table.

 *table\$1name*   
Vous pouvez analyser des tables spécifiques, y compris les tables temporaires. Vous pouvez qualifier la table avec son nom de schéma. Vous pouvez le cas échéant spécifier un nom\$1table pour analyser une seule table. Vous ne pouvez pas spécifier plus d’un *nom\$1table* avec une seule instruction ANALYZE *nom\$1table*. Si vous ne spécifiez pas un *table\$1name*, toutes les tables de la base de données actuellement connectée sont analysées, y compris les tables persistantes du catalogue système. Amazon Redshift ignore l’analyse d’une table si le pourcentage de lignes qui ont été modifiées depuis la dernière opération ANALYZE est inférieur au seuil d’analyse. Pour plus d'informations, consultez [Seuil d’analyse](#r_ANALYZE-threshold).  
Vous n’avez pas besoin d’analyser les tables système Amazon Redshift (tables STL et STV).

 *column\$1name*   
Si vous spécifiez un *nom\$1table*, vous pouvez également spécifier une ou plusieurs colonnes de la table (au forme de liste de colonnes séparées entre parenthèses). Si une liste de colonnes est spécifiée, seules les colonnes de la liste sont analysées.

 PREDICATE COLUMNS \$1 ALL COLUMNS   
Clauses qui indiquent si ANALYZE doit inclure uniquement les colonnes de prédicat. Spécifiez PREDICATE COLUMNS pour analyser uniquement les colonnes qui ont été utilisées comme prédicats dans des requêtes précédentes ou qui sont susceptibles d’être utilisées comme prédicats. Spécifiez ALL COLUMNS pour analyser toutes les colonnes. La valeur par défaut est ALL COLUMNS.   
Une colonne est incluse dans l’ensemble de colonnes de prédicat si l’une des conditions suivantes est vraie :  
+ La colonne a été utilisée dans une requête dans le cadre d’un filtre, d’une condition de jointure ou d’une clause group by.
+ La colonne est une clé de distribution.
+ La colonne fait partie d’une clé de tri.
Si aucune colonne n’est marquée comme colonne de prédicat, par exemple, parce que la table n’a pas encore été interrogée, toutes les colonnes sont analysées même si PREDICATE COLUMNS est spécifié. Dans ce cas, Amazon Redshift peut répondre par un message tel que Aucune colonne de prédicat trouvée pour « ». *table-name* Analyse de toutes les colonnes. Pour plus d’informations sur les colonnes de prédicat, consultez [Analyse des tables](t_Analyzing_tables.md).

## Notes d’utilisation
<a name="r_ANALYZE-usage-notes"></a>

Amazon Redshift exécute automatiquement les tables que vous créez avec les commandes suivantes : 
+ CREATE TABLE AS
+ CREATE TEMP TABLE AS 
+ SELECT INTO

 Vous ne pouvez pas analyser une table externe.

Vous n’avez pas besoin d’exécuter la commande ANALYZE sur ces tables lorsqu’elles sont créées initialement. Si vous les modifiez, vous devez les analyser de la même manière que les autres tables.

### Seuil d’analyse
<a name="r_ANALYZE-threshold"></a>

Pour réduire le temps de traitement et améliorer les performances globales du système, Amazon Redshift ignore ANALYZE pour une table si le pourcentage de lignes qui ont été modifiées depuis l’exécution de la dernière opération ANALYZE est inférieur au seuil d’analyse spécifié par le paramètre [analyze\$1threshold\$1percent](r_analyze_threshold_percent.md). Par défaut, `analyze_threshold_percent` est 10. Pour modifier `analyze_threshold_percent` de la séance en cours, exécutez la commande [SET](r_SET.md). L’exemple suivant passe de `analyze_threshold_percent` à 20 %.

```
set analyze_threshold_percent to 20;
```

Pour analyser des tables lorsque seul un petit nombre de lignes a changé, définissez `analyze_threshold_percent` sur un petit nombre arbitraire. Par exemple, si vous définissez `analyze_threshold_percent` sur 0,01, une table avec 100 000 000 lignes n’est pas ignorée si au moins 10 000 lignes ont été modifiées. 

```
set analyze_threshold_percent to 0.01;
```

Si ANALYZE ignore une table, car il ne respecte pas le seuil d’analyse, Amazon Redshift renvoie le message suivant.

```
ANALYZE SKIP
```

Pour analyser toutes les tables même si aucune ligne n’a été modifiée, définissez `analyze_threshold_percent` sur 0.

Pour afficher les résultats des opérations ANALYZE, interrogez la table système [STL\$1ANALYZE](r_STL_ANALYZE.md). 

Pour plus d’informations sur l’analyse des tables, consultez [Analyse des tables](t_Analyzing_tables.md).

## Exemples
<a name="r_ANALYZE-examples"></a>

Analysez toutes les tables de la base de données TICKIT et renvoyez les informations d’avancement.

```
analyze verbose;
```

Analysez la table LISTING uniquement.

```
analyze listing;
```

Analysez les colonnes VENUEID et VENUENAME de la table VENUE. 

```
analyze venue(venueid, venuename);
```

Analysez uniquement les colonnes de prédicat de la table VENUE.

```
analyze venue predicate columns;
```

# ANALYZE COMPRESSION
<a name="r_ANALYZE_COMPRESSION"></a>

Effectue l’analyse de compression et produit un rapport avec l’encodage de suppression suggéré pour les tables analysées. Pour chaque colonne, le rapport inclut une estimation de la réduction potentielle sur l’espace du disque par rapport à l’encodage RAW.

## Syntaxe
<a name="r_ANALYZE_COMPRESSION-synopsis"></a>

```
ANALYZE COMPRESSION
[ [ table_name ]
[ ( column_name [, ...] ) ] ]
[COMPROWS numrows]
```

## Parameters
<a name="r_ANALYZE_COMPRESSION-parameters"></a>

 *table\$1name*   
Vous pouvez analyser la compression pour des tables spécifiques, y compris les tables temporaires. Vous pouvez qualifier la table avec son nom de schéma. Vous pouvez le cas échéant spécifier un *nom\$1table* pour analyser une seule table. Si vous ne spécifiez pas un *nom\$1table*, toutes les tables de la base de données actuellement connectée sont analysées. Vous ne pouvez pas spécifier plus d’un *nom\$1table* avec une seule instruction ANALYZE COMPRESSION.

 *column\$1name*   
Si vous spécifiez un *nom\$1table*, vous pouvez également spécifier une ou plusieurs colonnes de la table (au forme de liste de colonnes séparées entre parenthèses).

COMPROWS  
Nombre de lignes à utiliser comme taille de l’échantillon pour l’analyse de la compression. L’analyse est exécutée sur les lignes de chaque tranche de données. Par exemple, si vous spécifiez COMPROWS 1000000 (1 000 000) et que le système contient en tout 4 tranches, pas plus de 250 000 lignes par tranche ne sont lues et analysées. Si COMPROWS n’est pas spécifié, la taille de l’échantillon par défaut est de 100 000 par tranche. Les valeurs COMPROWS inférieures à la valeur par défaut de 100 000 lignes par tranche sont automatiquement mises à niveau avec la valeur par défaut. Cependant, l’analyse de compression ne génère pas de recommandations si la quantité de données dans la table n’est pas suffisante pour produire un échantillon significatif. Si le nombre COMPROWS est supérieur au nombre de lignes de la table, la commande ANALYZE COMPRESSION continue de se poursuivre et exécute l’analyse de la compression sur toutes les lignes disponibles. L’utilisation de COMPROWS entraîne une erreur si aucune table n’est spécifiée.

 *numrows*   
Nombre de lignes à utiliser comme taille de l’échantillon pour l’analyse de la compression. La plage acceptée pour *numrows* est un nombre compris entre 1000 et 1000000000 (1 000 000 000).

## Notes d’utilisation
<a name="r_ANALYZE_COMPRESSION_usage_notes"></a>

ANALYSER COMPRESSION acquiert un verrou de table exclusif, qui empêche les lectures et les écritures simultanées sur la table. Exécutez uniquement la commande COMPRESSION lorsque la table est inactive.

Exécutez ANALYZE COMPRESSION afin d’obtenir des recommandations pour les schémas d’encodage de colonne, en fonction d’un échantillon du contenu de la table. ANALYZE COMPRESSION est un outil consultatif et ne modifie pas les encodages de colonne de la table. Vous pouvez appliquer l’encodage suggéré en recréant la table ou en créant une nouvelle table avec le même schéma. La recréation d’une table non compressée à l’aide de schémas de codage appropriés peut réduire considérablement son encombrement sur le disque. Cette approche permet d’économiser de l’espace disque et d’améliorer les performances des requêtes pour les charges de travail liées aux I/O.

ANALYZE COMPRESSION ignore la phase d’analyse réelle et renvoie directement le type d’encodage d’origine sur n’importe quelle colonne désignée comme SORTKEY. En effet, les analyses limitées à la plage peuvent fonctionner de façon médiocre lorsque les colonnes SORTKEY sont compressées beaucoup plus fortement que les autres colonnes.

## Exemples
<a name="r_ANALYZE_COMPRESSION-examples"></a>

L’exemple suivant affiche l’encodage et le pourcentage estimé de réduction pour les colonnes de la table LISTING uniquement :

```
analyze compression listing;
  
  Table  |     Column     | Encoding | Est_reduction_pct 
---------+----------------+----------+-------------------
 listing | listid         | az64     | 40.96
 listing | sellerid       | az64     | 46.92
 listing | eventid        | az64     | 53.37
 listing | dateid         | raw      | 0.00
 listing | numtickets     | az64     | 65.66
 listing | priceperticket | az64     | 72.94
 listing | totalprice     | az64     | 68.05
 listing | listtime       | az64     | 49.74
```

L’exemple suivant analyse les colonnes QTYSOLD, COMMISSION et SALETIME de la table SALES.

```
analyze compression sales(qtysold, commission, saletime);

 Table |   Column   | Encoding | Est_reduction_pct 
-------+------------+----------+-------------------
 sales | salesid    | N/A      | 0.00
 sales | listid     | N/A      | 0.00
 sales | sellerid   | N/A      | 0.00
 sales | buyerid    | N/A      | 0.00
 sales | eventid    | N/A      | 0.00
 sales | dateid     | N/A      | 0.00
 sales | qtysold    | az64     | 83.06
 sales | pricepaid  | N/A      | 0.00
 sales | commission | az64     | 71.85
 sales | saletime   | az64     | 49.63
```

# ATTACH MASKING POLICY
<a name="r_ATTACH_MASKING_POLICY"></a>

Attache une politique de masquage dynamique des données existante à une colonne. Pour plus d’informations sur le masquage dynamique des données, consultez [Masquage dynamique des données](t_ddm.md).

Les super-utilisateurs et les utilisateurs ou les rôles disposant du rôle sys:secadmin peuvent attacher une politique de masquage.

## Syntaxe
<a name="r_ATTACH_MASKING_POLICY-synopsis"></a>

```
ATTACH MASKING POLICY 
{
  policy_name ON relation_name
  | database_name.policy_name ON database_name.schema_name.relation_name
}
( { output_column_names | output_path } )
[ USING ( { input_column_names | input_path } ) ]
TO { user_name | ROLE role_name | PUBLIC }
[ PRIORITY priority ];
```

## Parameters
<a name="r_ATTACH_MASKING_POLICY-parameters"></a>

*policy\$1name*   
Nom de la politique de masquage à attacher.

database\$1name  
Nom de la base de données dans laquelle la politique et la relation sont créées. La politique et la relation doivent figurer dans la même base de données. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

nom\$1schéma  
Nom du schéma auquel appartient la relation.

 *relation\$1name*   
Nom de la relation à laquelle attacher la politique de masquage.

*output\$1column\$1names*   
Noms des colonnes auxquelles la politique de masquage s’appliquera.

*output\$1paths*   
Chemin complet de l’objet SUPER auquel la politique de masquage s’appliquera, y compris le nom de colonne. Par exemple, pour une relation avec une colonne de type SUPER nommée `person`, *output\$1path* peut être `person.name.first_name`. 

*input\$1column\$1names*   
Noms des colonnes que la politique de masquage prendra comme entrées. Ce paramètre est facultatif. S’il n’est pas spécifié, la politique de masquage utilise *output\$1column\$1names* comme entrées.

*input\$1paths*   
Chemin complet de l’objet SUPER que la politique de masquage prendra comme entrée. Ce paramètre est facultatif. S’il n’est pas spécifié, la politique de masquage utilise *output\$1path* pour les entrées.

*user\$1name*   
Nom de l’utilisateur auquel la politique de masquage s’attachera. Vous ne pouvez pas attacher deux politiques à la même combinaison d’utilisateur et de colonne, ou de rôle et de colonne. Vous pouvez attacher une politique à un utilisateur et une autre politique au rôle de l’utilisateur. Dans ce cas, la politique ayant la priorité la plus élevée s’applique.  
Vous ne pouvez définir qu’un seul user\$1name, role\$1name et PUBLIC dans une seule commande ATTACH MASKING POLICY. 

*role\$1name*   
Nom du rôle auquel la politique de masquage s’attachera. Vous ne pouvez pas associer deux politiques à la même column/role paire. Vous pouvez attacher une politique à un utilisateur et une autre politique au rôle de l’utilisateur. Dans ce cas, la politique ayant la priorité la plus élevée s’applique.  
Vous ne pouvez définir qu’un seul user\$1name, role\$1name et PUBLIC dans une seule commande ATTACH MASKING POLICY. 

*PUBLIC*   
Attache la politique de masquage à tous les utilisateurs accédant à la table. Pour qu'elles s'appliquent, vous devez accorder aux autres politiques de masquage attachées à des column/role paires column/user ou à des spécifiques une priorité supérieure à la politique PUBLIQUE.  
Vous ne pouvez définir qu’un seul user\$1name, role\$1name et PUBLIC dans une seule commande ATTACH MASKING POLICY. 

*priority*   
Priorité de la politique de masquage. Lorsque plusieurs politiques de masquage s’appliquent à la requête d’un utilisateur donné, la politique de priorité la plus élevée s’applique.  
Vous ne pouvez pas attacher deux politiques différentes à la même colonne avec la même priorité, même si les deux politiques sont attachées à différents utilisateurs ou rôles. Vous pouvez associer la même politique plusieurs fois au même ensemble de paramètres de table, de colonne de sortie, de colonne d’entrée et de priorité, à condition que l’utilisateur ou le rôle auquel la politique est attachée soit différent à chaque fois.   
Vous ne pouvez pas appliquer de politique à une colonne ayant la même priorité qu’une autre politique attachée à cette colonne, même si elles concernent des rôles différents. Ce champ est facultatif. Si vous ne spécifiez pas de priorité, la politique de masquage attache par défaut une priorité de 0.

Pour l'utilisation de la politique de masquage des pièces jointes dans le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# ATTACH RLS POLICY
<a name="r_ATTACH_RLS_POLICY"></a>

Attachez une politique de sécurité au niveau des lignes sur une table à un ou plusieurs utilisateurs ou rôles.

Les super-utilisateurs et les utilisateurs ou les rôles qui disposent du rôle `sys:secadmin` peuvent attacher une stratégie.

## Syntaxe
<a name="r_ATTACH_RLS_POLICY-synopsis"></a>

```
ATTACH RLS POLICY 
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
TO { user_name | ROLE role_name | PUBLIC } [, ...]
```

## Parameters
<a name="r_ATTACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nom de la politique .

database\$1name  
Nom de la base de données dans laquelle la politique et la relation sont créées. La politique et la relation doivent figurer dans la même base de données. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

nom\$1schéma  
Nom du schéma auquel appartient la relation.

table\$1name  
Relation à laquelle la politique de sécurité au niveau des lignes est attachée.

TO \$1 *user\$1name* \$1 ROLE *role\$1name* \$1 PUBLIC\$1 [, ...]  
Spécifie si la politique est attachée à un ou plusieurs utilisateurs ou rôles spécifiés. 

Pour l'utilisation de la POLITIQUE RLS ATTACH sur le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Notes d’utilisation
<a name="r_ATTACH_RLS_POLICY-usage"></a>

Lorsque vous utilisez l’instruction ATTACH RLS POLICY, tenez compte des points suivants :
+ La table attachée doit contenir toutes les colonnes répertoriées dans la clause WITH de l’instruction de création de la stratégie.
+ Amazon Redshift RLS permet d’attacher des politiques RLS aux objets suivants :
  +  Tables 
  +  Vues
  +  Vues à liaison tardive 
  +  Vues matérialisées
+ Amazon Redshift RLS ne permet pas d’associer des politiques RLS aux objets suivants :
  +  Tables de catalogue 
  +  Relations entre bases de données 
  +  Tables externes 
  +  Tables temporaires 
  +  Tables de recherche de politiques
  + Tables de base de vues matérialisées
+ Les politiques RLS attachées à des super-utilisateurs ou à des utilisateurs disposant de l’autorisation `sys:secadmin` sont ignorées.

## Exemples
<a name="r_ATTACH_RLS_POLICY-examples"></a>

L’exemple suivant attache une politique RLS à la table et aux combinaisons de rôles spécifiées. La politique RLS s’applique à tous les utilisateurs ayant le rôle `analyst` ou `dbadmin` accédant à la table tickit\$1category\$1redshift.

```
ATTACH RLS POLICY policy_concerts ON tickit_category_redshift TO ROLE analyst, ROLE dbadmin;
```

# BEGIN
<a name="r_BEGIN"></a>

Démarre une transaction. Synonyme de START TRANSACTION.

Une transaction est une même unité de travail logique qui se compose d’une commande ou de plusieurs commandes. En général, toutes les commandes d’une transaction s’exécutent sur un instantané de la base de données dont l’heure de démarrage est déterminée par la valeur définie pour le paramètre de configuration `transaction_snapshot_begin`.

Par défaut, les opérations Amazon Redshift (requêtes, instructions DDL, charges) sont automatiquement validées sur la base de données. Si vous souhaitez suspendre la validation d’une opération jusqu’à la fin de la tâche suivante, vous devez ouvrir une transaction avec l’instruction BEGIN, exécuter les commandes nécessaires et fermer la transaction avec une instruction [COMMIT](r_COMMIT.md) ou [FIN](r_END.md). Si nécessaire, vous pouvez utiliser une instruction [ROLLBACK](r_ROLLBACK.md) pour arrêter une transaction en cours. Une exception à ce comportement est la commande [TRUNCATE](r_TRUNCATE.md), qui valide la transaction dans laquelle elle est exécutée et ne peut pas être annulée.

## Syntaxe
<a name="r_BEGIN-synopsis"></a>

```
BEGIN [ WORK | TRANSACTION ] [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

START TRANSACTION [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

Where option is

SERIALIZABLE
| READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ

Note: READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ have no
operational impact and map to SERIALIZABLE in Amazon Redshift. You can see database isolation levels on your cluster 
by querying the stv_db_isolation_level table.
```

## Parameters
<a name="r_BEGIN-parameters"></a>

WORK   
Mot-clé facultatif.

TRANSACTION   
Mot-clé facultatif ; WORK et TRANSACTION sont synonymes.

ISOLATION LEVEL SERIALIZABLE   
Comme l’isolement sérialisable est pris en charge par défaut, le comportement de la transaction est le même, que cette syntaxe soit incluse ou pas dans l’instruction. Pour plus d'informations, consultez [Gestion des opérations d’écriture simultanées](c_Concurrent_writes.md). Aucun autre niveau d’isolement n’est pris en charge.  
Le langage SQL standard définit quatre niveaux d’isolement des transactions afin d’éviter les *lectures non validées* (où une transaction lit les données écrites par une transaction simultanée non validée), les *lectures non reproductibles* (où une transaction relit les données qu’elle a lues précédemment et découvre que les données ont été modifiées par une autre transaction qui les a validées depuis la lecture initiale), et les *lectures fantôme* (où une opération ré-exécute une requête, renvoie un ensemble de lignes qui satisfont à une condition de recherche et découvre que l’ensemble des lignes a changé en raison d’une autre transaction récemment validée) :  
+ Lecture non validée : lectures non validées, lectures non reproductibles et lectures fantôme possibles.
+ Lecture validée : lectures non reproductibles et lectures fantôme possibles.
+ Lecture reproductible : lectures fantôme possibles.
+ Sérialisable : empêche les lectures non validées, les lectures non reproductibles et les lectures fantôme.
Même si vous pouvez utiliser n’importe lequel des quatre niveaux d’isolement des transactions, Amazon Redshift traite tous les niveaux d’isolement comme sérialisables.

READ WRITE   
Accorde à la transaction les autorisations en lecture et en écriture.

READ ONLY   
Accorde à la transaction les autorisations en lecture seule.

## Exemples
<a name="r_BEGIN-examples"></a>

L’exemple suivant démarre un bloc de transaction sérialisable : 

```
begin;
```

L’exemple suivant démarre le bloc de transaction par un niveau d’isolement sérialisable, et les autorisations en lecture et écriture : 

```
begin read write;
```

# CALL
<a name="r_CALL_procedure"></a>

Exécute une procédure stockée. La commande CALL doit inclure le nom de la procédure ainsi que les valeurs des arguments en entrée. Vous devez appeler une procédure stockée à l’aide de l’instruction CALL.

**Note**  
CALL ne peut pas faire partie d’une requête classique.

## Syntaxe
<a name="r_CALL_procedure-synopsis"></a>

```
CALL sp_name ( [ argument ] [, ...] )
```

## Parameters
<a name="r_CALL_procedure-parameters"></a>

 *sp\$1name*   
Nom de la procédure à exécuter. 

 *argument*   
Type de valeur de l’argument en entrée. Ce paramètre peut également être un nom de fonction, par exemple `pg_last_query_id()`. Vous pouvez utiliser les requêtes en tant qu’arguments CALL. 

## Notes d’utilisation
<a name="r_CALL_procedure-usage-notes"></a>

Les procédures stockées Amazon Redshift prennent en charge les appels imbriqués et récursifs, comme décrit ci-dessous. En outre, assurez-vous que l'assistance de votre chauffeur est up-to-date également décrite ci-dessous.

**Topics**
+ [Appels imbriqués](#r_CALL_procedure-nested-calls)
+ [Prise en charge du pilote](#r_CALL_procedure-driver-support)

### Appels imbriqués
<a name="r_CALL_procedure-nested-calls"></a>

Les procédures stockées Amazon Redshift prennent en charge les appels imbriqués et récursifs. Le nombre maximal de niveaux d’imbrication autorisé est 16. Les appels imbriqués peuvent encapsuler la logique métier en procédures plus petites, pouvant être partagées par plusieurs appelants. 

Si vous appelez une procédure imbriquée comportant des paramètres de sortie, la procédure interne doit définir des arguments INOUT. Dans ce cas, la procédure interne est transmise dans une variable non constante. Les arguments OUT ne sont pas autorisés. Ce comportement se produit car une variable est nécessaire pour contenir la sortie de l’appel interne.

Cette relation entre les procédures internes et externes est enregistrée dans la colonne `from_sp_call` de [SVL\$1STORED\$1PROC\$1CALL](r_SVL_STORED_PROC_CALL.md). 

L’exemple suivant illustre la transmission de variables à un appel de procédure imbriquée via des arguments INOUT.

```
CREATE OR REPLACE PROCEDURE inner_proc(INOUT a int, b int, INOUT c int) LANGUAGE plpgsql
AS $$
BEGIN
  a := b * a;
  c := b * c;
END;
$$;

CREATE OR REPLACE PROCEDURE outer_proc(multiplier int) LANGUAGE plpgsql
AS $$
DECLARE
  x int := 3;
  y int := 4;
BEGIN
  DROP TABLE IF EXISTS test_tbl;
  CREATE TEMP TABLE test_tbl(a int, b varchar(256));
  CALL inner_proc(x, multiplier, y);
  insert into test_tbl values (x, y::varchar);
END;
$$;

CALL outer_proc(5);

SELECT * from test_tbl;
 a  | b
----+----
 15 | 20
(1 row)
```

### Prise en charge du pilote
<a name="r_CALL_procedure-driver-support"></a>

Nous vous recommandons de mettre à niveau vos pilotes JDBC (Java Database Connectivity) et OBDC (Open Database Connectivity) avec la dernière version, qui prend en charge les procédures stockées Amazon Redshift. 

Vous pourrez peut-être utiliser votre pilote existant si votre outil client utilise les opération d’API transmises au serveur via l’instruction CALL. Les paramètres de sortie, le cas échéant, sont renvoyés sous la forme d’un ensemble de résultats d’une ligne. 

Les dernières versions des pilotes JDBC et ODBC Amazon Redshift prennent en charge les métadonnées pour la détection de procédures stockées. Elles offrent également une prise en charge `CallableStatement` pour les applications Java personnalisées. Pour plus d’informations sur les pilotes, consultez [Connexion à un cluster Amazon Redshift à l’aide des outils clients SQL](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-to-cluster.html) dans le *Guide de gestion Amazon Redshift*. 

Les exemples suivants montrent comment utiliser différentes opérations d’API du pilote JDBC pour les appels de procédures stockées.

```
void statement_example(Connection conn) throws SQLException {
  statement.execute("CALL sp_statement_example(1)");
}

void prepared_statement_example(Connection conn) throws SQLException {
  String sql = "CALL sp_prepared_statement_example(42, 84)";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  pstmt.execute();
}

void callable_statement_example(Connection conn) throws SQLException {
  CallableStatement cstmt = conn.prepareCall("CALL sp_create_out_in(?,?)");
  cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
  cstmt.setInt(2, 42);
  cstmt.executeQuery();
  Integer out_value = cstmt.getInt(1);
}
```

## Exemples
<a name="r_CALL_procedure-examples"></a>

L’exemple suivant appelle le nom de procédure `test_spl`.

```
call test_sp1(3,'book');
INFO:  Table "tmp_tbl" does not exist and will be skipped
INFO:  min_val = 3, f2 = book
```

L’exemple suivant appelle le nom de procédure `test_spl2`.

```
call test_sp2(2,'2019');

         f2          | column2
---------------------+---------
 2019+2019+2019+2019 | 2
(1 row)
```

# ANNULER
<a name="r_CANCEL"></a>

Annule une requête de base de données qui s’exécute simultanément.

La commande CANCEL nécessite l’ID de processus ou l’ID de session de la requête en cours d’exécution et affiche un message de confirmation pour vérifier que la requête a été annulée.

## Privilèges requis
<a name="r_CANCEL-privileges"></a>

Les privilèges suivants sont requis pour CANCEL :
+ Super-utilisateur annulant sa propre requête
+ Super-utilisateur annulant la requête d’un utilisateur
+ Utilisateurs disposant du privilège CANCEL et annulant la requête d’un utilisateur
+ Utilisateur annulant sa propre requête

## Syntaxe
<a name="r_CANCEL-synopsis"></a>

```
CANCEL process_id [ 'message' ]
```

## Parameters
<a name="r_CANCEL-parameters"></a>

 *process\$1id*   
Pour annuler une requête exécutée dans un cluster Amazon Redshift, utilisez l’`pid` (ID de processus) du [STV\$1RECENTS](r_STV_RECENTS.md) correspondant à la requête que vous souhaitez annuler.  
Pour annuler une requête exécutée dans un groupe de travail Amazon Redshift sans serveur, utilisez l’`session_id` du [SYS\$1QUERY\$1HISTORY](SYS_QUERY_HISTORY.md) correspondant à la requête que vous souhaitez annuler.

’*message*’   
Message de confirmation facultatif qui s’affiche lorsque l’annulation de la requête est terminée. Si vous ne spécifiez pas un message, Amazon Redshift affiche le message par défaut en tant que vérification. Vous devez placer le message entre guillemets simples.

## Notes d’utilisation
<a name="r_CANCEL-usage-notes"></a>

Vous ne pouvez pas annuler une requête en spécifiant un *ID de requête* ; vous devez spécifier l’*ID de processus* (PID) ou l’*ID de session* de la requête. Vous pouvez uniquement annuler les requêtes exécutées simultanément par votre utilisateur. Les super-utilisateurs peuvent annuler toutes les requêtes.

Si les requêtes de plusieurs séances maintiennent des verrous sur la même table, vous pouvez utiliser la fonction [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md) pour mettre fin à l’une des séances. Cela oblige toutes les transactions en cours d’exécution dans la séance terminée à libérer tous les verrous et à restaurer la transaction. Interrogez la table système [STV\$1LOCKS](r_STV_LOCKS.md) pour afficher les verrous actuellement détenus. 

Suite à certains événements internes, Amazon Redshift peut redémarrer une séance active et attribuer un nouveau PID. Si le PID a été modifié, vous pourriez recevoir le message d’erreur suivant :

```
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
```

Pour trouver le nouveau PID, interrogez la table système [STL\$1RESTARTED\$1SESSIONS](r_STL_RESTARTED_SESSIONS.md) et filtrez sur la colonne `oldpid`.

```
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
```

## Exemples
<a name="r_CANCEL-examples"></a>

Pour annuler une requête en cours d’exécution dans un cluster Amazon Redshift, récupérez d’abord l’ID de processus de la requête que vous voulez annuler. Pour déterminer le processus IDs de toutes les requêtes en cours d'exécution, tapez la commande suivante : 

```
select pid, starttime, duration,
trim(user_name) as user,
trim (query) as querytxt
from stv_recents
where status = 'Running';

pid |         starttime          | duration |   user   |    querytxt
-----+----------------------------+----------+----------+-----------------
802 | 2008-10-14 09:19:03.550885 |      132 | dwuser | select
venuename from venue where venuestate='FL', where venuecity not in
('Miami' , 'Orlando');
834 | 2008-10-14 08:33:49.473585 |  1250414 | dwuser | select *
from listing;
964 | 2008-10-14 08:30:43.290527 |   326179 | dwuser | select
sellerid from sales where qtysold in (8, 10);
```

Vérifiez le texte de la requête pour déterminer quel identifiant de processus (PID) correspond à la requête que vous voulez annuler.

Tapez la commande suivante pour utiliser le PID 802 afin d’annuler cette requête : 

```
cancel 802;
```

La séance au cours de laquelle la requête était en cours d’exécution affiche le message suivant : 

```
ERROR:  Query (168) cancelled on user's request
```

où `168` est l’ID de la requête (pas l’ID du processus utilisé pour annuler la requête).

Sinon, vous pouvez spécifier un message de confirmation personnalisé à afficher à la place du message par défaut. Pour spécifier un message personnalisé, incluez votre message entre guillemets simples à la fin de la commande CANCEL : 

```
cancel 802 'Long-running query';
```

La séance au cours de laquelle la requête était en cours d’exécution affiche le message suivant : 

```
ERROR:  Long-running query
```

# CLOSE
<a name="close"></a>

(Facultatif) Ferme toutes les ressources disponibles associées à un curseur ouvert. Comme [COMMIT](r_COMMIT.md), [FIN](r_END.md) et [ROLLBACK](r_ROLLBACK.md) ferment automatiquement le curseur, il n’est pas nécessaire d’utiliser la commande CLOSE pour fermer explicitement le curseur. 

Pour plus d’informations, consultez [DECLARE](declare.md), [FETCH](fetch.md). 

## Syntaxe
<a name="close-synopsis"></a>

```
CLOSE cursor
```

## Parameters
<a name="close-parameters"></a>

*curseur*   
Nom du curseur à fermer. 

## Exemple CLOSE
<a name="close-example"></a>

Les commandes suivantes ferment le curseur et effectuent une validation, ce qui met fin à la transaction :

```
close movie_cursor;
commit;
```

# COMMENT
<a name="r_COMMENT"></a>

Crée ou modifie un commentaire relatif à un objet de base de données.

## Syntaxe
<a name="r_COMMENT-synopsis"></a>

```
COMMENT ON
{
TABLE object_name |
COLUMN object_name.column_name |
CONSTRAINT constraint_name ON table_name |
DATABASE object_name |
VIEW object_name
}
IS 'text' | NULL
```

## Parameters
<a name="r_COMMENT-parameters"></a>

 *nom d’objet*   
Nom de l’objet de base de données auquel s’applique le commentaire. Vous pouvez ajouter un commentaire aux objets suivants :  
+ TABLE
+ COLUMN (accepte également un *nom\$1colonne*).
+ CONSTRAINT (accepte également un *nom\$1contrainte* et un *nom\$1table*).
+ DATABASE
+ VIEW
+ SCHEMA (SCHÉMA)

IS ’*text*’ \$1 NULL  
Le texte du commentaire que vous souhaitez ajouter ou remplacer pour l’objet spécifié. La chaîne de *texte* est de type TEXT. Placez le commentaire entre guillemets simples. Spécifiez la valeur sur NULL pour supprimer le texte du commentaire.

 *column\$1name*   
Nom de la colonne commentée. Paramètre de COLUMN. Suit une table spécifiée dans `object_name`.

 *nom\$1contrainte*   
Nom de la contrainte commentée. Paramètre de CONSTRAINT.

 *table\$1name*   
Nom d’une table contenant la contrainte. Paramètre de CONSTRAINT.

## Notes d’utilisation
<a name="r_COMMENT-usage-notes"></a>

Vous devez être un superutilisateur ou le propriétaire d’un objet de la base de données pour ajouter ou mettre à jour un commentaire.

Les commentaires sur les bases de données ne peuvent s’appliquer qu’à la base de données en cours. Un message d’avertissement s’affiche si vous essayez de faire un commentaire sur une autre base de données. Le même avertissement s’affiche pour les commentaires sur les bases de données qui n’existent pas.

Les commentaires sur les tables externes, les colonnes externes et les colonnes des vues à liaison tardive ne sont pas pris en charge.

## Exemples
<a name="r_COMMENT-example"></a>

L’exemple suivant ajoute un commentaire à la table SALES. 

```
COMMENT ON TABLE sales IS 'This table stores tickets sales data';
```

L’exemple suivant affiche le commentaire sur la table SALES. 

```
select obj_description('public.sales'::regclass);

obj_description
-------------------------------------
This table stores tickets sales data
```

L’exemple suivant supprime un commentaire de la table SALES. 

```
COMMENT ON TABLE sales IS NULL;
```

L’exemple suivant ajoute un commentaire à la colonne EVENTID de la table SALES. 

```
COMMENT ON COLUMN sales.eventid IS 'Foreign-key reference to the EVENT table.';
```

L’exemple suivant affiche un commentaire sur la colonne EVENTID (colonne numéro 5) de la table SALES. 

```
select col_description( 'public.sales'::regclass, 5::integer );

col_description
-----------------------------------------
Foreign-key reference to the EVENT table.
```

L’exemple suivant ajoute un commentaire descriptif à la table EVENT. 

```
comment on table event is 'Contains listings of individual events.';
```

Pour afficher les commentaires, interrogez le catalogue système PG\$1DESCRIPTION. L’exemple suivant renvoie la description de la table EVENT.

```
select * from pg_catalog.pg_description
where objoid =
(select oid from pg_class where relname = 'event'
and relnamespace =
(select oid from pg_catalog.pg_namespace where nspname = 'public') );

objoid | classoid | objsubid | description
-------+----------+----------+----------------------------------------
116658 |     1259 |        0 | Contains listings of individual events.
```

# COMMIT
<a name="r_COMMIT"></a>

Valide la transaction actuelle sur la base de données. Cette commande rend permanentes les mises à jour de base de données de la transaction.

## Syntaxe
<a name="r_COMMIT-synopsis"></a>

```
COMMIT [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_COMMIT-parameters"></a>

WORK  
Mot-clé facultatif. Ce mot-clé n’est pas pris en charge dans une procédure stockée. 

TRANSACTION  
Mot-clé facultatif. WORK et TRANSACTION sont synonymes. Aucun des deux n’est pris en charge dans une procédure stockée. 

Pour obtenir des informations sur l’utilisation de l’instruction COMMIT dans une procédure stockée, consultez [Gestion des transactions](stored-procedure-transaction-management.md). 

## Exemples
<a name="r_COMMIT-examples"></a>

Chacun des exemples suivants valide la transaction en cours sur la base de données :

```
commit;
```

```
commit work;
```

```
commit transaction;
```

# COPY
<a name="r_COPY"></a>


|  | 
| --- |
| Le chiffrement côté client pour les commandes COPY et UNLOAD ne sera plus ouvert aux nouveaux clients à compter du 30 avril 2025. Si vous avez utilisé le chiffrement côté client avec les commandes COPY et UNLOAD au cours des 12 mois précédant le 30 avril 2025, vous pouvez continuer à utiliser le chiffrement côté client avec les commandes COPY ou UNLOAD jusqu’au 30 avril 2026. Après le 30 avril 2026, vous ne pourrez plus utiliser le chiffrement côté client pour COPY et UNLOAD. Nous vous recommandons de passer au chiffrement côté serveur pour COPY et UNLOAD dès que possible. Si vous utilisez déjà le chiffrement côté serveur pour COPY et UNLOAD, il n’y a aucun changement et vous pouvez continuer à l’utiliser sans modifier vos requêtes. Pour plus d’informations sur le chiffrement pour COPY et UNLOAD, consultez le paramètre ENCRYPTED ci-dessous.  | 

Charge des données dans une table depuis des fichiers de données ou une table Amazon DynamoDB. Les fichiers peuvent être situés dans un compartiment Amazon Simple Storage Service (Amazon S3), un cluster Amazon EMR ou un hôte distant auquel on accède à l’aide d’une connexion SSH (Secure Shell).

**Note**  
Les tables externes d’Amazon Redshift Spectrum sont en lecture seule. Vous ne pouvez pas copier (COPY) une table externe.

La commande COPY ajoute les données d’entrée à la table sous forme de lignes supplémentaires.

La taille maximale d’une seule ligne d’entrée à partir de n’importe quelle source est de 4 Mo.

**Topics**
+ [Autorisations requises](#r_COPY-permissions)
+ [Syntaxe de la commande COPY](#r_COPY-syntax)
+ [Paramètres requis](#r_COPY-syntax-required-parameters)
+ [Paramètres facultatifs](#r_COPY-syntax-overview-optional-parameters)
+ [Notes d’utilisation et ressources supplémentaires pour la commande COPY](#r_COPY-using-the-copy-command)
+ [Exemples de commandes COPY](#r_COPY-using-the-copy-command-examples)
+ [COPY JOB](r_COPY-JOB.md)
+ [COPIER avec TEMPLATE](r_COPY-WITH-TEMPLATE.md)
+ [Description des paramètres de la commande COPY](r_COPY-parameters.md)
+ [Notes d’utilisation](r_COPY_usage_notes.md)
+ [Exemples de commandes COPY](r_COPY_command_examples.md)

## Autorisations requises
<a name="r_COPY-permissions"></a>

Pour utiliser la commande COPY, vous devez avoir le privilège [INSERT](r_GRANT.md#grant-insert) pour la table Amazon Redshift.

## Syntaxe de la commande COPY
<a name="r_COPY-syntax"></a>

```
COPY table-name 
[ column-list ]
FROM data_source
authorization
[ [ FORMAT ] [ AS ] data_format ] 
[ parameter [ argument ] [, ... ] ]
```

Vous pouvez effectuer une opération COPY avec aussi peu que trois paramètres : un nom de table, une source de données et l’autorisation d’accéder aux données. 

Amazon Redshift étend la fonctionnalité de la commande COPY pour vous permettre de charger les données dans plusieurs formats de données à partir de plusieurs sources de données, de contrôler l’accès pour charger les données, de gérer les transformations des données et de gérer l’opération de chargement. 

Les sections suivantes présentent les paramètres de la commande COPY requis et regroupent les paramètres facultatifs par fonction. Elles décrivent également chaque paramètre et expliquent comment différentes options fonctionnent ensemble. Vous pouvez accéder directement à une description du paramètre à l’aide de la liste alphabétique des paramètres. 

## Paramètres requis
<a name="r_COPY-syntax-required-parameters"></a>

La commande COPY nécessite trois éléments : 
+ [Table Name](#r_COPY-syntax-overview-table-name)
+ [Data Source](#r_COPY-syntax-overview-data-source)
+ [Authorization](#r_COPY-syntax-overview-credentials)

La commande COPY la plus simple utilise le format suivant. 

```
COPY table-name 
FROM data-source
authorization;
```

L’exemple suivant crée une table nommée CATDEMO et puis charge la table avec des exemples de données à partir d’un fichier de données dans Amazon S3 nommé `category_pipe.txt`. 

```
create table catdemo(catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50));
```

Dans l’exemple suivant, la source de données de la commande COPY est un fichier de données nommé `category_pipe.txt` dans le dossier `tickit` d’un compartiment Amazon S3 nommé `redshift-downloads`. La commande COPY est autorisée à accéder au compartiment Amazon S3 via un rôle Gestion des identités et des accès AWS (IAM). Si votre cluster comporte un rôle IAM existant avec la permission d’accès à Amazon S3 attaché, vous pouvez remplacer le nom Amazon Resource Name (ARN) de votre rôle dans la commande COPY suivante et l’exécuter.

```
copy catdemo
from 's3://redshift-downloads/tickit/category_pipe.txt'
iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>'
region 'us-east-1';
```

Pour obtenir des instructions complètes sur l'utilisation des commandes COPY pour charger des échantillons de données, y compris des instructions pour charger des données provenant d'autres AWS régions, consultez la section [Charger des échantillons de données depuis Amazon S3](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) dans le guide de démarrage Amazon Redshift.

*table-name*  <a name="r_COPY-syntax-overview-table-name"></a>
Nom de la table cible de la commande COPY. La table doit déjà exister dans la base de données. La table peut être temporaire ou permanente. La commande COPY ajoute les nouvelles données d’entrée à toutes les lignes existantes de la table.

FROM *data-source*  <a name="r_COPY-syntax-overview-data-source"></a>
Emplacement des données source à charger dans la table cible. Un fichier manifeste peut être spécifié avec des sources de données.   
Le référentiel de données le plus couramment utilisé est un compartiment Amazon S3. Vous pouvez également charger des fichiers de données situés dans un cluster Amazon EMR, une instance Amazon EC2 ou un hôte distant auquel votre cluster peut accéder à l’aide d’une connexion SSH, ou vous pouvez charger directement depuis une table DynamoDB.   
+ [Commande COPY depuis Amazon S3](copy-parameters-data-source-s3.md)
+ [Commande COPY depuis Amazon EMR](copy-parameters-data-source-emr.md) 
+ [Exécution de la commande COPY à partir de l’hôte distant (SSH)](copy-parameters-data-source-ssh.md)
+ [Commande COPY depuis Amazon DynamoDB](copy-parameters-data-source-dynamodb.md)

Autorisation  <a name="r_COPY-syntax-overview-credentials"></a>
Clause qui indique la méthode utilisée par votre cluster pour l'authentification et l'autorisation d'accéder à d'autres AWS ressources. La commande COPY nécessite une autorisation pour accéder aux données d'une autre AWS ressource, notamment Amazon S3, Amazon EMR, Amazon DynamoDB et Amazon EC2. Vous pouvez fournir cette autorisation en faisant référence à un rôle IAM qui est attaché à votre cluster ou en fournissant l’ID de clé d’accès et la clé d’accès secrète pour un utilisateur IAM.   
+ [Paramètres d’autorisation](copy-parameters-authorization.md) 
+ [Contrôle d’accès basé sur les rôles](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based) 
+ [Contrôle d’accès basé sur les clés](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based) 

## Paramètres facultatifs
<a name="r_COPY-syntax-overview-optional-parameters"></a>

Le cas échéant, vous pouvez spécifier comment la commande COPY mappe les données de champ aux colonnes dans la table cible, définir les attributs de données source pour activer la commande COPY afin de lire et d’analyser correctement les données source et gérer les opérations que la commande COPY effectue pendant le processus de chargement. 
+ [Options de mappage de colonnes](copy-parameters-column-mapping.md)
+ [Paramètres du format de données](#r_COPY-syntax-overview-data-format)
+ [Paramètres de conversion de données](#r_COPY-syntax-overview-data-conversion)
+ [Opérations de chargement de données](#r_COPY-syntax-overview-data-load)

### Mappage de colonnes
<a name="r_COPY-syntax-overview-column-mapping"></a>

Par défaut, la commande COPY insère des valeurs de champ dans les colonnes de la table cible dans le même ordre que les champs se présentent dans les fichiers de données. Si l'ordre des colonnes par défaut ne fonctionne pas, vous pouvez spécifier une liste de colonnes ou utiliser des JSONPath expressions pour mapper les champs de données source aux colonnes cibles. 
+ [Column List](copy-parameters-column-mapping.md#copy-column-list)
+ [JSONPaths File](copy-parameters-column-mapping.md#copy-column-mapping-jsonpaths)

### Paramètres du format de données
<a name="r_COPY-syntax-overview-data-format"></a>

Vous pouvez charger les données à partir de fichiers texte au format JSON, dans des fichiers de valeurs séparées par des virgules, par des caractères, à largeur fixe (CSV), ou à partir de fichiers Avro.

Par défaut, la commande COPY attend que les données source se trouvent dans des fichiers texte UTF-8 séparés par des caractères. Le délimiteur par défaut est une barre verticale ( \$1 ). Si les données source sont dans un autre format, utilisez les paramètres suivants pour spécifier le format des données.
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter) 
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth) 
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile) 
+ [AVRO](copy-parameters-data-format.md#copy-avro) 
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json) 
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) 
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [GZIP](copy-parameters-file-compression.md#copy-gzip) 
+ [LZOP](copy-parameters-file-compression.md#copy-lzop) 
+ [PARQUET](copy-parameters-data-format.md#copy-parquet) 
+ [ORC](copy-parameters-data-format.md#copy-orc) 
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd) 

### Paramètres de conversion de données
<a name="r_COPY-syntax-overview-data-conversion"></a>

Lorsqu’elle charge la table, la commande COPY tente implicitement de convertir les chaînes dans les données source vers le type de données de la colonne cible. Si vous devez spécifier une conversion qui est différente du comportement par défaut, ou si la conversion par défaut entraîne des erreurs, vous pouvez gérer les conversions de données en spécifiant les paramètres suivants.
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars) 
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding) 
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape) 
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) 
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord) 
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines) 
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader) 
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as) 
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes) 
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 

### Opérations de chargement de données
<a name="r_COPY-syntax-overview-data-load"></a>

Gérez le comportement par défaut de l’opération de chargement pour le dépannage ou pour réduire les temps de chargement en spécifiant les paramètres suivants. 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows) 
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate) 
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors) 
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror) 
+ [NOLOAD](copy-parameters-data-load.md#copy-noload) 
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate) 

## Notes d’utilisation et ressources supplémentaires pour la commande COPY
<a name="r_COPY-using-the-copy-command"></a>

Pour plus d’informations sur la façon d’utiliser la commande COPY, consultez les rubriques suivantes : 
+ [Notes d’utilisation](r_COPY_usage_notes.md)
+ [Didacticiel : chargement des données à partir d’Amazon S3](tutorial-loading-data.md)
+ [Bonnes pratiques de chargement des données sur Amazon Redshift](c_loading-data-best-practices.md)
+ [Chargement de tables à l’aide de la commande COPY](t_Loading_tables_with_the_COPY_command.md)
  + [Chargement des données à partir d’Amazon S3](t_Loading-data-from-S3.md)
  + [Chargement de données à partir d’Amazon EMR](loading-data-from-emr.md)
  + [Chargement des données à partir des hôtes distants](loading-data-from-remote-hosts.md) 
  + [Chargement de données à partir d’une table Amazon DynamoDB](t_Loading-data-from-dynamodb.md)
+ [Résolution des problèmes de chargement de données](t_Troubleshooting_load_errors.md)

## Exemples de commandes COPY
<a name="r_COPY-using-the-copy-command-examples"></a>

Pour d’autres exemples montrant comment utiliser COPY à partir de différentes sources, dans des formats disparates et avec différentes options de copie, consultez [Exemples de commandes COPY](r_COPY_command_examples.md).

# COPY JOB
<a name="r_COPY-JOB"></a>

Pour plus d’informations sur l’utilisation de cette commande, consultez [Créer une intégration d’événements S3 pour copier automatiquement des fichiers à partir de compartiments Amazon S3](loading-data-copy-job.md).

Gère les commandes COPY qui chargent les données dans une table. La commande COPY JOB est une extension de la commande COPY et automatise le chargement des données à partir des compartiments Amazon S3. Lorsque vous créez une tâche COPY, Amazon Redshift détecte quand de nouveaux fichiers Amazon S3 sont créés dans un chemin spécifié, puis les charge automatiquement sans votre intervention. Les mêmes paramètres que ceux utilisés dans la commande COPY d’origine sont utilisés lors du chargement des données. Amazon Redshift assure le suivi des fichiers chargés (en fonction du nom des fichiers) afin de vérifier qu’ils ne sont chargés qu’une seule fois.

**Note**  
Pour plus d’informations sur la commande COPY, notamment sur l’utilisation, les paramètres et les autorisations, consultez [COPY](r_COPY.md).

## Autorisation obligatoire
<a name="r_COPY-JOB-privileges"></a>

Pour utiliser la commande COPY JOB, vous devez disposer de l’une des autorisations suivantes en plus de toutes les autorisations requises pour utiliser COPY :
+ Superuser
+  Tous les éléments suivants : 
  +  L’autorisation étendue CREATE, ALTER ou DROP appropriée pour utiliser COPY JOBS dans la base de données vers laquelle vous souhaitez copier. 
  +  Autorisation USAGE pour le schéma vers lequel vous souhaitez utiliser COPY, ou autorisation étendue USAGE pour les schémas de la base de données vers laquelle vous souhaitez utiliser COPY. 
  +  Autorisation INSERT pour la table vers laquelle vous souhaitez utiliser COPY, ou autorisation étendue INSERT pour les tables du schéma ou de la base de données vers lesquels vous souhaitez utiliser COPY. 

Le rôle IAM spécifié avec la commande COPY doit être autorisé à accéder aux données à charger. Pour plus d’informations, consultez [Autorisations IAM pour les commandes COPY, UNLOAD et CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions).

## Syntaxe
<a name="r_COPY-JOB-syntax"></a>

Créez une tâche de copie. Les paramètres de la commande COPY sont enregistrés avec la tâche de copie.

Vous ne pouvez pas exécuter COPY JOB CREATE dans le cadre d’un bloc de transactions.

```
COPY copy-command JOB CREATE job-name
[AUTO ON | OFF]
```

Modifiez la configuration d’une tâche de copie.

```
COPY JOB ALTER job-name
[AUTO ON | OFF]
```

Exécutez une tâche de copie. Les paramètres de la commande COPY stockés sont utilisés.

```
COPY JOB RUN job-name
```

Répertoriez toutes les tâches de copie.

```
COPY JOB LIST
```

Afficher les détails d’une tâche de copie.

```
COPY JOB SHOW job-name
```

Supprimez une tâche de copie.

Vous ne pouvez pas exécuter COPY JOB DROP dans le cadre d’un bloc de transactions.

```
COPY JOB DROP job-name
```

## Parameters
<a name="r_COPY-JOB-parameters"></a>

*copy-command*  
Une commande COPY qui charge les données d’Amazon S3 vers Amazon Redshift. La clause contient des paramètres COPY qui définissent le compartiment Amazon S3, la table cible, le rôle IAM et d’autres paramètres utilisés lors du chargement des données. Tous les paramètres de commande COPY pour un chargement de données Amazon S3 sont pris en charge, à l’exception des suivants :  
+ La tâche COPY JOB n’ingère pas les fichiers préexistants dans le dossier pointé par la commande COPY. Seuls les fichiers créés après l’horodatage de création de COPY JOB sont ingérés.
+ Vous ne pouvez pas spécifier de commande COPY avec les options MAXERROR ou IGNOREALLERRORS.
+ Vous ne pouvez pas spécifier un fichier manifeste. COPY JOB nécessite un emplacement Amazon S3 désigné pour surveiller les fichiers nouvellement créés.
+ Vous ne pouvez pas spécifier de commande COPY avec des types d’autorisation tels que des clés d’accès et des clés secrètes. Seules les commandes COPY qui utilisent le paramètre `IAM_ROLE` pour l’autorisation sont prises en charge. Pour plus d’informations, consultez [Paramètres d’autorisation](copy-parameters-authorization.md).
+ COPY JOB ne prend pas en charge le rôle IAM par défaut associé au cluster. Vous devez spécifier le `IAM_ROLE` dans la commande COPY. 
Pour plus d’informations, consultez [Commande COPY depuis Amazon S3](copy-parameters-data-source-s3.md).

*job-name*  
Nom de la tâche utilisé pour référencer la tâche COPY. Le *nom de la tâche* ne peut pas contenir de tiret (‐).

 [AUTO ON \$1 OFF]   
Clause indiquant si les données Amazon S3 sont automatiquement chargées dans les tables Amazon Redshift.  
+ Sur `ON`, Amazon Redshift surveille le chemin Amazon S3 source pour les fichiers nouvellement créés et, s’il en trouve, une commande COPY est exécutée avec les paramètres COPY dans la définition de la tâche. Il s’agit de l’option par défaut.
+ Sur `OFF`, Amazon Redshift n’exécute pas automatiquement COPY JOB.

## Notes d’utilisation
<a name="r_COPY-JOB-usage-notes"></a>

Les options de la commande COPY ne sont validées qu’au moment de l’exécution. Par exemple, un `IAM_ROLE` ou une source de données Amazon S3 non valide entraîne des erreurs d’exécution lorsque COPY JOB démarre.

Si le cluster est suspendu, COPY JOBS ne sont pas exécutées.

Pour interroger les fichiers de commandes COPY chargés et les erreurs de chargement, consultez [STL\$1LOAD\$1COMMITS](r_STL_LOAD_COMMITS.md), [STL\$1LOAD\$1ERRORS](r_STL_LOAD_ERRORS.md) et [STL\$1LOADERROR\$1DETAIL](r_STL_LOADERROR_DETAIL.md). Pour de plus amples informations, veuillez consulter [Vérification que les données ont été chargées correctement](verifying-that-data-loaded-correctly.md).

Les tâches de copie ne sont pas prises en charge sur les bases de données Zero-ETL car elles fonctionnent en mode lecture seule.

## Exemples
<a name="r_COPY-JOB-examples"></a>

L’exemple suivant montre comment créer COPY JOB pour charger les données d’un compartiment Amazon S3. 

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' 
JOB CREATE my_copy_job_name
AUTO ON;
```

# COPIER avec TEMPLATE
<a name="r_COPY-WITH-TEMPLATE"></a>

Vous pouvez utiliser les modèles Redshift avec les commandes COPY pour simplifier la syntaxe des commandes et garantir la cohérence des opérations de chargement de données. Au lieu de spécifier les mêmes paramètres de mise en forme à plusieurs reprises, vous les définissez une fois dans un modèle et vous référencez le modèle dans vos commandes COPY. Lorsque vous utilisez un modèle, la commande COPY combine les paramètres du modèle avec tous les paramètres spécifiés directement dans la commande. Si le même paramètre apparaît à la fois dans le modèle et dans la commande, le paramètre de commande est prioritaire. Pour de plus amples informations, veuillez consulter [CRÉER UN MODÈLE](r_CREATE_TEMPLATE.md). 

Les modèles pour la commande COPY peuvent être créés avec :
+ [Paramètres du format de données](copy-parameters-data-format.md)
+ [Paramètres de compression de fichier](copy-parameters-file-compression.md)
+ [Paramètres de conversion de données](copy-parameters-data-conversion.md)
+ [Opérations de chargement de données](copy-parameters-data-load.md)

Pour une liste complète des paramètres pris en charge, voir [COPY](r_COPY.md) commande.

## Autorisation obligatoire
<a name="r_COPY-WITH-TEMPLATE-privileges"></a>

Pour utiliser un modèle dans une commande COPY, vous devez disposer des éléments suivants :
+ Toutes les autorisations requises pour exécuter la commande COPY (voir[Autorisations requises](r_COPY.md#r_COPY-permissions))
+ L'une des autorisations de modèle suivantes :
  + Privilèges de superutilisateur
  + Privilège USAGE sur le modèle et privilège USAGE sur le schéma contenant le modèle

## Syntaxe
<a name="r_COPY-WITH-TEMPLATE-syntax"></a>

```
COPY target_table FROM 's3://...'
authorization
[ option, ...]
USING TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameters
<a name="r_COPY-WITH-TEMPLATE-parameters"></a>

 *database\$1name*   
(Facultatif) Nom de la base de données dans laquelle le modèle existe. Si elle n'est pas spécifiée, la base de données actuelle est utilisée.

 *nom\$1schéma*   
(Facultatif) Nom du schéma dans lequel le modèle existe. S'il n'est pas spécifié, le modèle est recherché dans le chemin de recherche actuel.

 *nom\$1modèle*   
Nom du modèle à utiliser dans COPY. 

## Notes d’utilisation
<a name="r_COPY-WITH_TEMPLATE-usage-notes"></a>
+ Les paramètres spécifiques à la commande (source, destination, autorisation) doivent toujours être spécifiés dans la commande COPY.
+ Les modèles ne peuvent pas contenir de spécifications de fichier manifeste pour les commandes COPY.

## Exemples
<a name="r_COPY-WITH-TEMPLATE-examples"></a>

Les exemples suivants montrent comment créer un modèle et l'utiliser dans les commandes COPY :

```
CREATE TEMPLATE public.test_template FOR COPY AS
CSV DELIMITER '|' IGNOREHEADER 1 MAXERROR 100;

COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
USING TEMPLATE public.test_template;
```

Lorsqu'un paramètre existe à la fois dans le modèle et dans la commande, le paramètre de commande est prioritaire. Dans cet exemple, si le modèle `public.test_template` contient `DELIMITER '|'` mais que la commande COPY le spécifie`DELIMITER ','`, le séparateur de virgule (`,`) de la commande sera utilisé à la place du séparateur de canaux (`|`) du modèle. 

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
DELIMITER ','
USING TEMPLATE public.test_template;
```

# Description des paramètres de la commande COPY
<a name="r_COPY-parameters"></a>

COPY possède de nombreux paramètres qui peuvent être utilisés dans de nombreuses situations. Toutefois, tous les paramètres ne sont pas pris en charge dans chaque situation. Par exemple, pour le chargement à partir de fichiers ORC ou PARQUET, le nombre de paramètres pris en charge est limité. Pour plus d’informations, consultez [COPY depuis les formats de données en colonnes](copy-usage_notes-copy-from-columnar.md).

**Topics**
+ [Sources de données](copy-parameters-data-source.md)
+ [Paramètres d’autorisation](copy-parameters-authorization.md)
+ [Options de mappage de colonnes](copy-parameters-column-mapping.md)
+ [Paramètres du format de données](copy-parameters-data-format.md)
+ [Paramètres de compression de fichier](copy-parameters-file-compression.md)
+ [Paramètres de conversion de données](copy-parameters-data-conversion.md)
+ [Opérations de chargement de données](copy-parameters-data-load.md)
+ [Liste alphabétique des paramètres](r_COPY-alphabetical-parm-list.md)

# Sources de données
<a name="copy-parameters-data-source"></a>

Vous pouvez charger des données à partir de fichiers texte dans un compartiment Amazon S3, dans un cluster Amazon EMR, ou sur un hôte distant auquel votre cluster peut accéder à l’aide d’une connexion SSH. Vous pouvez également charger les données directement à partir d’une table DynamoDB. 

La taille maximale d’une seule ligne d’entrée à partir de n’importe quelle source est de 4 Mo. 

Pour exporter les données d’une table dans un ensemble de fichiers dans une instance Amazon S3, utilisez la commande [UNLOAD](r_UNLOAD.md). 

**Topics**
+ [Commande COPY depuis Amazon S3](copy-parameters-data-source-s3.md)
+ [Commande COPY depuis Amazon EMR](copy-parameters-data-source-emr.md)
+ [Exécution de la commande COPY à partir de l’hôte distant (SSH)](copy-parameters-data-source-ssh.md)
+ [Commande COPY depuis Amazon DynamoDB](copy-parameters-data-source-dynamodb.md)

# Commande COPY depuis Amazon S3
<a name="copy-parameters-data-source-s3"></a>

Pour charger des données à partir de fichiers situés dans un ou plusieurs compartiments S3, utilisez la clause FROM pour indiquer comment la commande COPY localise les fichiers dans Amazon S3. Vous pouvez fournir le chemin d’objet aux fichiers de données dans le cadre de la clause FROM, ou vous pouvez fournir l’emplacement d’un fichier manifeste qui contient une liste de chemins d’objets Amazon S3. L’exécution de la commande COPY à partir d’Amazon S3 utilise une connexion HTTPS. Assurez-vous que les plages d’adresses IP S3 sont ajoutées à votre liste des autorisations. Pour plus d’informations sur les plages d’adresses IP S3 requises, consultez [Isolement de réseau](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation).

**Important**  
Si les compartiments Amazon S3 qui contiennent les fichiers de données ne résident pas dans la même AWS région que votre cluster, vous devez utiliser le [REGION](#copy-region) paramètre pour spécifier la région dans laquelle se trouvent les données. 

**Topics**
+ [Syntaxe](#copy-parameters-data-source-s3-syntax)
+ [Exemples](#copy-parameters-data-source-s3-examples)
+ [Paramètres facultatifs](#copy-parameters-data-source-s3-optional-parms)
+ [Paramètres non pris en charge](#copy-parameters-data-source-s3-unsupported-parms)

## Syntaxe
<a name="copy-parameters-data-source-s3-syntax"></a>

```
FROM { 's3://objectpath' | 's3://manifest_file' }
authorization
| MANIFEST
| ENCRYPTED
| REGION [AS] 'aws-region'
| optional-parameters
```

## Exemples
<a name="copy-parameters-data-source-s3-examples"></a>

L’exemple suivant utilise un chemin d’objet pour charger les données à partir d’Amazon S3. 

```
copy customer
from 's3://amzn-s3-demo-bucket/customer' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

L’exemple suivant utilise un fichier manifeste pour charger les données à partir d’Amazon S3. 

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

### Parameters
<a name="copy-parameters-data-source-s3-parameters"></a>

FROM  <a name="copy-parameters-from"></a>
Source des données à charger. Pour plus d’informations sur l’encodage du fichier Amazon S3, consultez [Paramètres de conversion de données](copy-parameters-data-conversion.md).

’s3://*copy\$1from\$1s3\$1objectpath*’   <a name="copy-s3-objectpath"></a>
Spécifie le chemin d’accès aux objets Amazon S3 contenant les données (par exemple `'s3://amzn-s3-demo-bucket/custdata.txt'`). Le paramètre *s3://copy\$1from\$1s3\$1objectpath* peut faire référence à un seul fichier ou à un ensemble d’objets ou de dossiers ayant le même préfixe de clé. Par exemple, le nom `custdata.txt` est un préfixe de clé qui fait référence à un certain nombre de fichiers physiques : `custdata.txt`, `custdata.txt.1`, `custdata.txt.2`, `custdata.txt.bak` et ainsi de suite. Le préfixe de clé peut également faire référence à un certain nombre de dossiers. Par exemple, `'s3://amzn-s3-demo-bucket/custfolder'` fait référence aux dossiers `custfolder`, `custfolder_1`, `custfolder_2` et ainsi de suite. Si un préfixe de clé fait référence à plusieurs dossiers, tous les fichiers dans les dossiers sont chargés. Si un préfixe de clé correspond à un fichier et à un dossier, par exemple `custfolder.log`, COPY tente de charger le fichier également. Si un préfixe de clé risque d’entraîner le chargement de fichiers indésirables par COPY, utilisez un fichier manifeste. Pour plus d’informations, consultez [copy_from_s3_manifest_file](#copy-manifest-file), ci-après.   
Si le compartiment S3 qui contient les fichiers de données ne réside pas dans la même AWS région que votre cluster, vous devez utiliser le [REGION](#copy-region) paramètre pour spécifier la région dans laquelle se trouvent les données.
Pour de plus amples informations, veuillez consulter [Chargement des données à partir d’Amazon S3](t_Loading-data-from-S3.md).

’s3://*copy\$1from\$1s3\$1manifest\$1file*’   <a name="copy-manifest-file"></a>
Spécifie la clé de l’objet Amazon S3 d’un fichier manifeste qui répertorie les fichiers de données à charger. L’argument *’s3://*copy\$1from\$1s3\$1manifest\$1file’** doit explicitement faire référence à un seul fichier, par exemple, `'s3://amzn-s3-demo-bucket/manifest.txt'`. Il ne peut pas faire référence à un préfixe de clé.  
Le manifeste est un fichier texte au format JSON qui répertorie l’URL de chaque fichier qui doit être chargé à partir d’Amazon S3. L’URL inclut le nom du compartiment et le chemin d’objet complet du fichier. Les fichiers spécifiés dans le manifeste peuvent se trouver dans différents compartiments, mais tous les compartiments doivent se trouver dans la même AWS région que le cluster Amazon Redshift. Si un fichier est répertorié deux fois, le fichier est chargé deux fois. L’exemple suivant illustre le format JSON pour un manifeste qui charge trois fichiers.   

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1","mandatory":false}
  ]
}
```
Les guillemets doubles sont nécessaires et doivent être des guillemets simples (0x22), ni culbutés, ni courbes. Chaque entrée dans le manifeste peut éventuellement inclure un indicateur `mandatory`. Si `mandatory` est défini sur `true`, la commande COPY s’arrête si elle ne trouve pas le fichier pour cette entrée ; dans le cas contraire, la commande COPY se poursuit. La valeur par défaut de `mandatory` est `false`.   
Lors du chargement des fichiers de données au format ORC or Parquet, le champ `meta` est obligatoire, comme illustré dans l’exemple suivant.  

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```
Le fichier manifeste ne doit pas être chiffré ou compressé, même si les options ENCRYPTED, GZIP, LZOP ou ZSTD sont spécifiées. BZIP2 La commande COPY renvoie une erreur si le fichier manifeste spécifié est introuvable ou si le fichier manifeste n’est pas correctement formé.   
Si un fichier manifeste est utilisé, le paramètre MANIFEST doit être spécifié avec la commande COPY. Si le paramètre MANIFEST n’est pas spécifié, la commande COPY présume que le fichier spécifié avec FROM est un fichier de données.   
Pour plus d'informations, consultez [Chargement des données à partir d’Amazon S3](t_Loading-data-from-S3.md).

*authorization*  
La commande COPY a besoin de l'autorisation pour accéder aux données dans une autre ressource AWS , y compris Amazon S3, Amazon EMR, Amazon DynamoDB et Amazon EC2. Vous pouvez fournir cette autorisation en référençant un rôle Gestion des identités et des accès AWS (IAM) attaché à votre cluster (contrôle d'accès basé sur les rôles) ou en fournissant les informations d'identification d'accès d'un utilisateur (contrôle d'accès basé sur des clés). Pour plus de sécurité et de flexibilité, nous recommandons d’utiliser contrôle d’accès basé sur les rôles IAM. Pour plus d'informations, consultez [Paramètres d’autorisation](copy-parameters-authorization.md).

MANIFEST  <a name="copy-manifest"></a>
Spécifie qu’un manifeste est utilisé pour identifier les fichiers de données à charger à partir d’Amazon S3. Si le paramètre MANIFEST est utilisé, la commande COPY charge des données depuis les fichiers répertoriés dans le manifeste référencé par *’s3://copy\$1from\$1s3\$1manifest\$1file’*. Si le fichier manifeste n’est pas trouvé ou est dans un format incorrect, la commande COPY échoue. Pour plus d'informations, consultez [Utilisation d’un manifeste pour spécifier les fichiers de données](loading-data-files-using-manifest.md).

ENCRYPTED  <a name="copy-encrypted"></a>
Une clause qui spécifie que les fichiers d’entrée sur Amazon S3 sont chiffrés à l’aide du chiffrement côté client avec des clés gérées par le client. Pour plus d'informations, consultez [Chargement de fichiers de données chiffrés à partir d’Amazon S3](c_loading-encrypted-files.md). N’indiquez pas ENCRYPTED si les fichiers d’entrée sont chiffrés à l’aide du chiffrement côté serveur Amazon S3 (SSE-KMS ou SSE-S3). La commande COPY lit automatiquement les fichiers chiffrés côté serveur.  
Si vous spécifiez le paramètre ENCRYPTED, vous devez également spécifier le paramètre [MASTER_SYMMETRIC_KEY](#copy-master-symmetric-key) ou inclure la valeur **master\$1symmetric\$1key** dans la chaîne [Utilisation du paramètre CREDENTIALS](copy-parameters-authorization.md#copy-credentials).  
Si les fichiers chiffrés sont au format compressé, ajoutez le paramètre GZIP, LZOP ou BZIP2 ZSTD.  
Les fichiers manifestes et JSONPaths les fichiers ne doivent pas être chiffrés, même si l'option ENCRYPTED est spécifiée.

MASTER\$1SYMMETRIC\$1KEY ’*root\$1key*’  <a name="copy-master-symmetric-key"></a>
La clé symétrique racine qui a été utilisée pour chiffrer les fichiers de données sur Amazon S3. Si la clé MASTER\$1SYMMETRIC\$1KEY est spécifiée, le paramètre [ENCRYPTED](#copy-encrypted) doit également être spécifié. La clé MASTER\$1SYMMETRIC\$1KEY ne peut pas être utilisée avec le paramètre CREDENTIALS. Pour de plus amples informations, veuillez consulter [Chargement de fichiers de données chiffrés à partir d’Amazon S3](c_loading-encrypted-files.md).  
Si les fichiers chiffrés sont au format compressé, ajoutez le paramètre GZIP, LZOP ou BZIP2 ZSTD.

REGION [AS] ’*aws-region*’  <a name="copy-region"></a>
Spécifie la AWS région dans laquelle se trouvent les données sources. REGION est nécessaire pour exécuter la commande COPY depuis un compartiment Amazon S3 ou une table DynamoDB lorsque la ressource AWS qui contient les données ne se trouve pas dans la même région que le cluster Amazon Redshift.   
La valeur pour *aws\$1region* doit correspondre à une région répertoriée dans le tableau [Régions et points de terminaison Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region).  
Si le paramètre REGION est spécifié, toutes les ressources, y compris un fichier manifeste ou plusieurs compartiments Amazon S3, doivent se trouver dans la région spécifiée.   
Le transfert de données entre les régions engage des frais supplémentaires pour le compartiment Amazon S3 ou la table DynamoDB qui contient les données. Pour plus d'informations sur la tarification, consultez les sections **Transfert de données sortantes d'Amazon S3 vers une autre AWS région** sur la page de [tarification d'Amazon S3](https://aws.amazon.com/s3/pricing/) et **Transfert de données sortantes** sur la page de tarification d'[Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/). 
Par défaut, la commande COPY part du principe que les données se trouvent dans la même région que le cluster Amazon Redshift. 

## Paramètres facultatifs
<a name="copy-parameters-data-source-s3-optional-parms"></a>

Vous pouvez éventuellement spécifier les paramètres suivants avec la commande COPY à partir d’Amazon S3 : 
+ [Options de mappage de colonnes](copy-parameters-column-mapping.md)
+ [Paramètres du format de données](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Paramètres de conversion de données](copy-parameters-data-conversion.md)
+ [Opérations de chargement de données](copy-parameters-data-load.md)

## Paramètres non pris en charge
<a name="copy-parameters-data-source-s3-unsupported-parms"></a>

Vous ne pouvez pas utiliser les paramètres suivants avec la commande COPY à partir d’Amazon S3 : 
+ SSH
+ READRATIO

# Commande COPY depuis Amazon EMR
<a name="copy-parameters-data-source-emr"></a>

Vous pouvez utiliser la commande COPY pour charger des données en parallèle à partir d’un cluster Amazon EMR configuré pour écrire des fichiers texte dans le système de fichiers distribué Hadoop (HDFS) du cluster sous la forme de fichiers à largeur fixe, de fichiers séparés par des caractères, de fichiers CSV, de fichiers au format JSON ou de fichiers Avro.

**Topics**
+ [Syntaxe](#copy-parameters-data-source-emr-syntax)
+ [Exemple](#copy-parameters-data-source-emr-example)
+ [Parameters](#copy-parameters-data-source-emr-parameters)
+ [Paramètres pris en charge](#copy-parameters-data-source-emr-optional-parms)
+ [Paramètres non pris en charge](#copy-parameters-data-source-emr-unsupported-parms)

## Syntaxe
<a name="copy-parameters-data-source-emr-syntax"></a>

```
FROM 'emr://emr_cluster_id/hdfs_filepath'  
authorization
[ optional_parameters ]
```

## Exemple
<a name="copy-parameters-data-source-emr-example"></a>

L’exemple suivant charge des données depuis un cluster Amazon EMR. 

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Parameters
<a name="copy-parameters-data-source-emr-parameters"></a>

FROM  
Source des données à charger. 

 ’emr://*emr\$1cluster\$1id*/*hdfs\$1file\$1path*’  <a name="copy-emr"></a>
Identifiant unique du cluster Amazon EMR et chemin d’accès au fichier HDFS faisant référence aux fichiers de données pour la commande COPY. Les noms de fichiers de données HDFS ne doivent pas comporter les caractères génériques suivants : l’astérisque (\$1) et le point d’interrogation (?).   
Le cluster Amazon EMR doit continuer de s’exécuter jusqu’à la fin de l’opération COPY. Si l’un des fichiers de données HDFS est modifié ou supprimé avant la fin de l’opération COPY, vous pouvez avoir des résultats inattendus ou l’opération COPY peut échouer. 
Vous pouvez utiliser les caractères génériques astérisque (\$1) et point d’interrogation (?) dans le cadre de l’argument *hdfs\$1file\$1path* pour spécifier le chargement de plusieurs fichiers. Par exemple, `'emr://j-SAMPLE2B500FC/myoutput/part*'` identifie les fichiers `part-0000`, `part-0001`, et ainsi de suite. Si le chemin d’accès ne contient pas de caractères génériques, il est traité comme un littéral de chaîne. Si vous spécifiez uniquement un nom de dossier, COPY tente de charger tous les fichiers dans le dossier.   
Si vous utilisez des caractères génériques ou uniquement le nom du dossier, vérifiez qu’aucun fichier indésirable ne sera chargé. Par exemple, certains processus peuvent écrire un fichier journal sur le dossier de sortie.
Pour plus d'informations, consultez [Chargement de données à partir d’Amazon EMR](loading-data-from-emr.md).

*authorization*  
La commande COPY a besoin de l'autorisation pour accéder aux données dans une autre ressource AWS , y compris Amazon S3, Amazon EMR, Amazon DynamoDB et Amazon EC2. Vous pouvez fournir cette autorisation en référençant un rôle Gestion des identités et des accès AWS (IAM) attaché à votre cluster (contrôle d'accès basé sur les rôles) ou en fournissant les informations d'identification d'accès d'un utilisateur (contrôle d'accès basé sur des clés). Pour plus de sécurité et de flexibilité, nous recommandons d’utiliser contrôle d’accès basé sur les rôles IAM. Pour plus d'informations, consultez [Paramètres d’autorisation](copy-parameters-authorization.md).

## Paramètres pris en charge
<a name="copy-parameters-data-source-emr-optional-parms"></a>

Vous pouvez éventuellement spécifier les paramètres suivants avec la commande COPY à partir d’Amazon EMR : 
+ [Options de mappage de colonnes](copy-parameters-column-mapping.md)
+ [Paramètres du format de données](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Paramètres de conversion de données](copy-parameters-data-conversion.md)
+ [Opérations de chargement de données](copy-parameters-data-load.md)

## Paramètres non pris en charge
<a name="copy-parameters-data-source-emr-unsupported-parms"></a>

Vous ne pouvez pas utiliser les paramètres suivants avec la commande COPY à partir d’Amazon EMR : 
+ ENCRYPTED
+ MANIFEST
+ REGION
+ READRATIO
+ SSH

# Exécution de la commande COPY à partir de l’hôte distant (SSH)
<a name="copy-parameters-data-source-ssh"></a>

Vous pouvez utiliser la commande COPY pour charger les données en parallèle à partir d’un ou de plusieurs hôtes distants, comme les instances Amazon Elastic Compute Cloud (Amazon EC2) ou d’autres ordinateurs. La commande COPY se connecte aux hôtes distants à l’aide de SSH (Secure Shell) et exécute les commandes sur les hôtes distants pour générer la sortie de texte. L’hôte distant peut être une instance Linux EC2 ou un autre ordinateur Unix ou Linux configuré pour accepter les connexions SSH. Amazon Redshift peut se connecter à plusieurs hôtes et ouvrir plusieurs connexions SSH à chaque hôte. Amazon Redshift envoie une commande unique lors de chaque connexion pour générer la sortie de texte sur la sortie standard de l’hôte, qu’Amazon Redshift lit alors comme un fichier texte.

Utilisez la clause FROM pour spécifier la clé d’objet Amazon S3 pour le fichier manifeste qui fournit les informations que la commande COPY utilise pour ouvrir des connexions SSH et exécuter les commandes à distance. 

**Topics**
+ [Syntaxe](#copy-parameters-data-source-ssh-syntax)
+ [Exemples](#copy-parameters-data-source-ssh-examples)
+ [Parameters](#copy-parameters-data-source-ssh-parameters)
+ [Paramètres facultatifs](#copy-parameters-data-source-ssh-optional-parms)
+ [Paramètres non pris en charge](#copy-parameters-data-source-ssh-unsupported-parms)

**Important**  
 Si le compartiment S3 contenant le fichier manifeste ne réside pas dans la même région AWS que votre cluster, vous devez utiliser le paramètre REGION pour spécifier la région dans laquelle le compartiment se trouve. 

## Syntaxe
<a name="copy-parameters-data-source-ssh-syntax"></a>

```
FROM 's3://'ssh_manifest_file' }
authorization
SSH
| optional-parameters
```

## Exemples
<a name="copy-parameters-data-source-ssh-examples"></a>

L’exemple suivant utilise un fichier manifeste pour charger les données à partir d’un hôte distant à l’aide de SSH. 

```
copy sales
from 's3://amzn-s3-demo-bucket/ssh_manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
ssh;
```

## Parameters
<a name="copy-parameters-data-source-ssh-parameters"></a>

FROM  
Source des données à charger. 

’s3://*copy\$1from\$1ssh\$1manifest\$1file*’  <a name="copy-ssh-manifest"></a>
La commande COPY peut se connecter à plusieurs hôtes à l’aide de SSH et créer plusieurs connexions SSH à chaque hôte. COPY exécute une commande via chaque connexion hôte, puis charge la sortie à partir des commandes en parallèle de la table. L’argument *s3://copy\$1from\$1ssh\$1manifest\$1file* spécifie la clé d’objet Amazon S3 du fichier manifeste qui fournit les informations que la commande COPY utilise pour ouvrir les connexions SSH et exécuter les commandes à distance.  
L’argument *s3://copy\$1from\$1ssh\$1manifest\$1file* doit explicitement faire référence à un seul fichier ; il ne peut pas être un préfixe de clé. Voici un exemple:  

```
's3://amzn-s3-demo-bucket/ssh_manifest.txt'
```
Le fichier manifeste est un fichier texte au format JSON qu’Amazon Redshift utilise pour se connecter à l’hôte. Le fichier manifeste spécifie les points de terminaison hôte SSH et les commandes qui seront exécutées sur les hôtes pour renvoyer les données à Amazon Redshift. Le cas échéant, vous pouvez inclure la clé publique de l’hôte, le nom d’utilisateur de connexion et un indicateur obligatoire pour chaque entrée. L’exemple suivant montre un fichier manifeste qui crée deux connexions SSH :   

```
{ 
    "entries": [ 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"}, 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"} 
     ] 
}
```
Le fichier manifeste contient une construction `"entries"` pour chaque connexion SSH. Vous pouvez avoir plusieurs connexions à un seul hôte ou plusieurs connexions à plusieurs hôtes. Les guillemets doubles sont obligatoires comme illustré, aussi bien pour les noms de champ que pour les valeurs. Les guillemets doivent être des guillemets simples (0x22), ni culbutés, ni courbes. La seule valeur qui n’a pas besoin de guillemets doubles est la valeur booléenne `true` ou `false` pour le champ `"mandatory"`.   
La liste suivante décrit les champs dans le fichier manifeste.     
point de terminaison  <a name="copy-ssh-manifest-endpoint"></a>
L’adresse URL ou l’adresse IP de l’hôte, par exemple, `"ec2-111-222-333.compute-1.amazonaws.com"` ou `"198.51.100.0"`.   
command  <a name="copy-ssh-manifest-command"></a>
La commande doit être exécutée par l’hôte pour générer la sortie de texte ou la sortie binaire au format gzip, lzop, bzip2 ou zstd. La commande peut être n’importe quelle commande que l’utilisateur *« host\$1user\$1name »* est autorisé à exécuter. La commande peut être aussi simple que l’impression d’un fichier, ou elle bien peut interroger une base de données ou lancer un script. Les sorties (fichier texte, fichier binaire gzip, fichier binaire lzop ou fichier binaire bzip2) doivent être sous une forme que la commande COPY Amazon Redshift peut intégrer. Pour plus d'informations, consultez [Préparation de vos données d’entrée](t_preparing-input-data.md).  
publickey  <a name="copy-ssh-manifest-publickey"></a>
(Facultatif) La clé publique de l’hôte. Si la clé est fournie, Amazon Redshift l’utilise pour identifier l’hôte. Si la clé publique n’est pas fournie, Amazon Redshift n’essaie pas d’identifier l’hôte. Par exemple, si la clé publique l’hôte distant est `ssh-rsa AbcCbaxxx…Example root@amazon.com`, tapez le texte suivant dans le champ de clé publique : `"AbcCbaxxx…Example"`  
mandatory  <a name="copy-ssh-manifest-mandatory"></a>
(Facultatif) Clause qui indique si la commande COPY doit échouer en cas d’échec de la tentative de connexion. La valeur par défaut est `false`. Si Amazon Redshift n’établit pas au moins une connexion, la commande COPY échoue.  
nom d’utilisateur  <a name="copy-ssh-manifest-username"></a>
(Facultatif) Nom d’utilisateur qui sera utilisé pour vous connecter au système hôte et exécuter la commande à distance. Le nom de connexion d’utilisateur doit être le même que la connexion qui a été utilisée pour ajouter la clé publique du cluster Amazon Redshift au fichier de clés autorisé de l’hôte. Le nom d’utilisateur par défaut est `redshift`.
Pour plus d’informations sur la création d’un fichier manifeste, consultez [Processus de chargement de données](loading-data-from-remote-hosts.md#load-from-host-process).  
Pour exécuter la commande COPY d’un hôte distant, le paramètre SSH doit être spécifié avec la commande COPY. Si le paramètre SSH n’est pas spécifié, la commande COPY suppose que le fichier spécifié avec FROM est un fichier de données et échoue.   
Si vous utilisez la compression automatique, la commande COPY effectue deux opérations de lecture des données, ce qui signifie qu’elle va exécuter la commande à distance à deux reprises. La première opération de lecture vise à fournir un échantillon de données pour l’analyse de la compression, et la deuxième opération de lecture charge réellement les données. Si l’exécution de la commande à distance à deux reprises est susceptible d’entraîner un problème, vous devez désactiver la compression automatique. Pour désactiver la compression automatique, exécutez la commande COPY avec le paramètre COMPUPDATE défini sur OFF. Pour plus d'informations, consultez [Chargement des tables avec compression automatique](c_Loading_tables_auto_compress.md).  
Pour connaître les procédures détaillées de l’utilisation de la commande COPY dans SSH, consultez [Chargement des données à partir des hôtes distants](loading-data-from-remote-hosts.md).

*authorization*  
La commande COPY a besoin de l'autorisation pour accéder aux données dans une autre ressource AWS , y compris Amazon S3, Amazon EMR, Amazon DynamoDB et Amazon EC2. Vous pouvez fournir cette autorisation en référençant un rôle Gestion des identités et des accès AWS (IAM) attaché à votre cluster (contrôle d'accès basé sur les rôles) ou en fournissant les informations d'identification d'accès d'un utilisateur (contrôle d'accès basé sur des clés). Pour plus de sécurité et de flexibilité, nous recommandons d’utiliser contrôle d’accès basé sur les rôles IAM. Pour plus d'informations, consultez [Paramètres d’autorisation](copy-parameters-authorization.md).

SSH  <a name="copy-ssh"></a>
Clause qui spécifie que les données doivent être chargées à partir d’un hôte distant à l’aide du protocole SSH. Si vous spécifiez SSH, vous devez également fournir un fichier manifeste à l’aide de l’argument [s3://copy_from_ssh_manifest_file](#copy-ssh-manifest).   
Si vous utilisez SSH pour effectuer une copie à partir d’un hôte à l’aide d’une adresse IP privée dans un VPC distant, le routage VPC amélioré doit être activé pour le VPC. Pour plus d’informations sur le routage VPC amélioré, consultez [Routage VPC amélioré Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html).

## Paramètres facultatifs
<a name="copy-parameters-data-source-ssh-optional-parms"></a>

Vous pouvez éventuellement spécifier les paramètres suivants avec la commande COPY à partir de SSH : 
+ [Options de mappage de colonnes](copy-parameters-column-mapping.md)
+ [Paramètres du format de données](copy-parameters-data-format.md#copy-data-format-parameters)
+ [Paramètres de conversion de données](copy-parameters-data-conversion.md)
+ [Opérations de chargement de données](copy-parameters-data-load.md)

## Paramètres non pris en charge
<a name="copy-parameters-data-source-ssh-unsupported-parms"></a>

Vous ne pouvez pas utiliser les paramètres suivants avec la commande COPY à partir de SSH : 
+ ENCRYPTED
+ MANIFEST
+ READRATIO

# Commande COPY depuis Amazon DynamoDB
<a name="copy-parameters-data-source-dynamodb"></a>

Pour charger les données à partir d’une table DynamoDB existante, utilisez la clause FROM pour spécifier le nom de la table DynamoDB.

**Topics**
+ [Syntaxe](#copy-parameters-data-source-dynamodb-syntax)
+ [Exemples](#copy-parameters-data-source-dynamodb-examples)
+ [Paramètres facultatifs](#copy-parameters-data-source-dynamodb-optional-parms)
+ [Paramètres non pris en charge](#copy-parameters-data-source-dynamodb-unsupported-parms)

**Important**  
Si la table DynamoDB ne réside pas dans la même région que votre cluster Amazon Redshift, vous devez utiliser le paramètre REGION pour spécifier la région dans laquelle les données se trouvent. 

## Syntaxe
<a name="copy-parameters-data-source-dynamodb-syntax"></a>

```
FROM 'dynamodb://table-name' 
authorization
READRATIO ratio
| REGION [AS] 'aws_region'  
| optional-parameters
```

## Exemples
<a name="copy-parameters-data-source-dynamodb-examples"></a>

L’exemple suivant charge des données à partir d’une table DynamoDB. 

```
copy favoritemovies from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
readratio 50;
```

### Parameters
<a name="copy-parameters-data-source-dynamodb-parameters"></a>

FROM  
Source des données à charger. 

’dynamodb://*table-name*’  <a name="copy-dynamodb"></a>
Nom de la table DynamoDB qui contient les données, par exemple, `'dynamodb://ProductCatalog'`. Pour plus d’informations sur la manière dont les attributs DynamoDB sont mappés aux colonnes Amazon Redshift, consultez [Chargement de données à partir d’une table Amazon DynamoDB](t_Loading-data-from-dynamodb.md).  
Le nom d'une table DynamoDB est propre à AWS un compte, qui est identifié par AWS les informations d'identification d'accès.

*authorization*  
La commande COPY a besoin de l’autorisation pour accéder aux données dans une autre ressource AWS , y compris Amazon S3, Amazon EMR, Amazon DynamoDB et Amazon EC2. Vous pouvez fournir cette autorisation en référençant un rôle Gestion des identités et des accès AWS (IAM) attaché à votre cluster (contrôle d'accès basé sur les rôles) ou en fournissant les informations d'identification d'accès d'un utilisateur (contrôle d'accès basé sur des clés). Pour plus de sécurité et de flexibilité, nous recommandons d’utiliser contrôle d’accès basé sur les rôles IAM. Pour plus d'informations, consultez [Paramètres d’autorisation](copy-parameters-authorization.md).

READRATIO [AS] *ratio*  <a name="copy-readratio"></a>
Pourcentage du débit alloué à la table DynamoDB à utiliser pour le chargement des données. READRATIO est nécessaire pour exécuter la commande COPY à partir de DynamoDB. Il ne peut pas être utilisé pour exécuter la commande COPY à partir d’Amazon S3. Nous vous recommandons vivement de définir le ratio avec une valeur inférieure au débit moyen alloué non utilisé. Les valeurs valides sont des nombres entiers compris entre 1 et 200.  
La définition de READRATIO sur 100 ou plus active Amazon Redshift pour tirer parti de l’intégralité du débit alloué de la table DynamoDB, ce qui dégrade considérablement les performances des opérations de lecture simultanées par rapport à la même table pendant la séance COPY. Le trafic d’écriture n’est pas affecté. Les valeurs supérieures à 100 sont autorisées pour résoudre les scénarios rares où Amazon Redshift ne respecte pas le débit alloué de la table. Si vous chargez les données de DynamoDB vers Amazon Redshift en permanence, pensez à organiser vos tables DynamoDB sous forme de série chronologique pour séparer le trafic en direct de l’opération COPY.

## Paramètres facultatifs
<a name="copy-parameters-data-source-dynamodb-optional-parms"></a>

Vous pouvez éventuellement spécifier les paramètres suivants avec la commande COPY à partir d’Amazon DynamoDB : 
+ [Options de mappage de colonnes](copy-parameters-column-mapping.md)
+ Les paramètres de conversion de données suivants sont pris en charge :
  + [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
  + [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
  + [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
  + [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
  + [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
  + [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
  + [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
  + [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 
+ [Opérations de chargement de données](copy-parameters-data-load.md)

## Paramètres non pris en charge
<a name="copy-parameters-data-source-dynamodb-unsupported-parms"></a>

Vous ne pouvez pas utiliser les paramètres suivants avec la commande COPY à partir de DynamoDB : 
+ Paramètres du format de toutes les données
+ ESCAPE
+ FILLRECORD
+ IGNOREBLANKLINES
+ IGNOREHEADER
+ NULL
+ REMOVEQUOTES
+ ACCEPTINVCHARS
+ MANIFEST
+ ENCRYPTED

# Paramètres d’autorisation
<a name="copy-parameters-authorization"></a>

La commande COPY nécessite une autorisation pour accéder aux données d'une autre AWS ressource, notamment Amazon S3, Amazon EMR, Amazon DynamoDB et Amazon EC2. Vous fournissez cette autorisation en référençant un [rôle Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) qui est attaché à votre cluster (*contrôle d’accès basé sur le rôle*). Vous pouvez chiffrer vos données de chargement sur Amazon S3. 

Les rubriques suivantes fournissent plus de détails et des exemples d’options d’authentification:
+ [Autorisations IAM pour les commandes COPY, UNLOAD et CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)
+ [Contrôle d’accès basé sur les rôles](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)
+ [Contrôle d’accès basé sur les clés](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based)

Utilisez l’un des paramètres suivants pour autoriser la commande COPY : 
+ [Utilisation du paramètre IAM\$1ROLE](#copy-iam-role) paramètre
+ Paramètres dans l’[Utilisation des paramètres ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY](#copy-access-key-id)
+ [Utilisation du paramètre CREDENTIALS](#copy-credentials)Clause 

## Utilisation du paramètre IAM\$1ROLE
<a name="copy-iam-role"></a>

### IAM\$1ROLE
<a name="copy-iam-role-iam"></a>

Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini par défaut et associé au cluster lorsque la commande COPY s’exécute. 

Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. Si vous spécifiez IAM\$1ROLE, vous ne pouvez pas utiliser ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN ni CREDENTIALS.

L’exemple suivant montre la syntaxe du paramètre IAM\$1ROLE. 

```
IAM_ROLE { default | 'arn:aws:iam::<Compte AWS-id>:role/<role-name>' }
```

Pour plus d’informations, consultez [Contrôle d’accès basé sur les rôles](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

## Utilisation des paramètres ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id"></a>

### Utilisation de ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id-access"></a>

Cette méthode d’autorisation n’est pas recommandée. 

**Note**  
Plutôt que de fournir des informations d’identification d’accès sous forme de texte brut, nous vous recommandons vivement d’utiliser l’authentification basée sur les rôles en spécifiant le paramètre IAM\$1ROLE. Pour plus d’informations, consultez [Contrôle d’accès basé sur les rôles](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

### SESSION\$1TOKEN
<a name="copy-token"></a>

Le jeton de séance à utiliser avec les informations d’identification d’accès temporaires. Lorsque SESSION\$1TOKEN est spécifié, vous devez également utiliser ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY afin de fournir des informations d’identification de clé d’accès temporaire. Si vous spécifiez SESSION\$1TOKEN, vous ne pouvez utiliser ni IAM\$1ROLE, ni CREDENTIALS. Pour plus d’informations, consultez [informations d’identification de sécurité temporaires](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials) dans le Guide de l’utilisateur IAM.

**Note**  
Plutôt que de créer des informations d’identification de sécurité temporaires, nous vous recommandons vivement d’utiliser l’authentification basée sur les rôles. Lorsque vous autorisez l’accès à l’aide d’un rôle IAM, Amazon Redshift crée automatiquement des informations d’identification utilisateur temporaires à chaque séance. Pour plus d'informations, consultez [Contrôle d’accès basé sur les rôles](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based). 

L’exemple suivant illustre la syntaxe du paramètre SESSION\$1TOKEN avec les paramètres ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY. 

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

Si vous spécifiez SESSION\$1TOKEN, vous ne pouvez utiliser ni IAM\$1ROLE, ni CREDENTIALS. 

## Utilisation du paramètre CREDENTIALS
<a name="copy-credentials"></a>

### CREDENTIALS
<a name="copy-credentials-cred"></a>

Clause qui indique la méthode que votre cluster utilisera pour accéder à d'autres AWS ressources contenant des fichiers de données ou des fichiers manifestes. Vous ne pouvez pas utiliser le paramètre CREDENTIALS avec IAM\$1ROLE ou ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY.

L’exemple suivant montre la syntaxe du paramètre CREDENTIALS.

```
[WITH] CREDENTIALS [AS] 'credentials-args'
```

**Note**  
Pour une meilleure flexibilité, nous vous recommandons d’utiliser le paramètre [IAM\$1ROLE](#copy-iam-role-iam) plutôt que le paramètre CREDENTIALS.

Le cas échéant, si le paramètre [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) est utilisé, la chaîne *credentials-args* fournit également la clé de chiffrement.

La chaîne *credentials-args* est sensible à la casse et ne doit pas contenir d’espaces.

Les mots-clés WITH et AS sont facultatifs, et ils sont ignorés.

Vous pouvez spécifier [role-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based.phrase) ou [key-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based.phrase). Dans les deux cas, le rôle IAM ou l’utilisateur doit avoir les autorisations nécessaires pour accéder aux ressources AWS spécifiées. Pour de plus amples informations, veuillez consulter [Autorisations IAM pour les commandes COPY, UNLOAD et CREATE LIBRARY](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions). 

**Note**  
Pour protéger vos AWS informations d'identification et protéger les données sensibles, nous vous recommandons vivement d'utiliser un contrôle d'accès basé sur les rôles. 

Pour spécifier un contrôle d’accès basé sur les rôles, fournissez la chaîne *credentials-args* au format suivant :

```
'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
```

Pour utiliser les informations d’identification de jeton temporaires, vous devez fournir l’ID de clé d’accès temporaire, la clé d’accès secrète temporaire et le jeton temporaire. La chaîne *credentials-args* doit être au format suivant. 

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>'
```

Une commande COPY utilisant le contrôle d’accès basé sur les rôles avec des informations d’identification temporaires ressemblerait à l’exemple suivant : 

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key-id>;token=<temporary-token>'
```

 Pour de plus amples informations, veuillez consulter [informations d’identification de sécurité temporaires](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials).

Si le [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) paramètre est utilisé, la chaîne *credentials-args* est au format suivant, où *<root-key>* est la valeur de la clé racine utilisée pour chiffrer les fichiers.

```
CREDENTIALS
'<credentials-args>;master_symmetric_key=<root-key>'
```

Une commande COPY utilisant le contrôle d’accès basé sur les rôles avec une clé de chiffrement ressemblerait à l’exemple suivant :

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS 
'aws_iam_role=arn:aws:iam::<account-id>:role/<role-name>;master_symmetric_key=<root-key>'
```

# Options de mappage de colonnes
<a name="copy-parameters-column-mapping"></a>

Par défaut, la commande COPY insère des valeurs dans les colonnes de la table cible dans le même ordre que les champs se trouvent dans les fichiers de données. Si l'ordre des colonnes par défaut ne fonctionne pas, vous pouvez spécifier une liste de colonnes ou utiliser des JSONPath expressions pour mapper les champs de données source aux colonnes cibles. 
+ [Column List](#copy-column-list)
+ [JSONPaths File](#copy-column-mapping-jsonpaths)

## Liste de colonnes
<a name="copy-column-list"></a>

Vous pouvez spécifier une liste des noms de colonnes séparés par des virgules pour charger les champs de données source dans des colonnes cible spécifiques. Les colonnes peuvent être dans n’importe quel ordre dans l’instruction COPY, mais lors du chargement de fichiers plats, tels que dans un compartiment Amazon S3, leur ordre doit correspondre à celui des données sources. 

Lors du chargement d’une table Amazon DynamoDB, l’ordre n’importe pas La commande COPY met en correspondance les noms d’attribut des éléments extraits de la table DynamoDB et les noms de colonne de la table Amazon Redshift. Pour plus d'informations, consultez [Chargement de données à partir d’une table Amazon DynamoDB](t_Loading-data-from-dynamodb.md)

 Le format d’une liste de colonnes est le suivant.

```
COPY tablename (column1 [,column2, ...]) 
```

Si une colonne dans la table cible est absente de la liste de colonnes, la commande COPY charge l’expression [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) de la colonne cible.

Si la colonne cible n’a pas de valeur par défaut, la commande COPY tente de charger NULL.

Si la commande COPY tente d’affecter NULL à une colonne qui est définie comme NOT NULL, elle échoue. 

Si une colonne [IDENTITY](r_CREATE_TABLE_NEW.md#identity-clause) est incluse dans la liste de colonnes, [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) doit également être spécifié ; si une colonne IDENTITY n’est pas spécifiée, EXPLICIT\$1IDS ne peut pas être spécifié. Si aucune liste de la colonne n’est spécifiée, la commande se comporte comme si une liste de colonnes complète, dans l’ordre, a été spécifiée, avec les colonnes IDENTITY omises si EXPLICIT\$1IDS n’a pas non plus été spécifié.

Si une colonne est définie avec GENERATED BY DEFAULT AS IDENTITY, elle peut être copiée. Les valeurs sont générées ou mises à jour avec des valeurs que vous fournissez. L’option EXPLICIT\$1IDS n’est pas obligatoire. COPY ne met pas à jour le filigrane élevé d’identité. Pour de plus amples informations, veuillez consulter [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

## JSONPaths fichier
<a name="copy-column-mapping-jsonpaths"></a>

Lors du chargement des fichiers de données au format JSON ou Avro, la commande COPY mappe automatiquement les éléments de données aux données source JSON ou Avro dans les colonnes de la table cible. Pour ce faire, elle met en correspondance les noms de champs du schéma Avro avec les noms de colonnes de la liste de tables ou de colonnes cible.

Dans certains cas, vos noms de colonnes et de champs ne correspondent pas, ou vous devez mapper à des niveaux plus profonds de la hiérarchie de données. Dans ces cas, vous pouvez utiliser un JSONPaths fichier pour mapper explicitement des éléments de données JSON ou Avro à des colonnes. 

Pour de plus amples informations, veuillez consulter [JSONPaths fichier](copy-parameters-data-format.md#copy-json-jsonpaths). 

# Paramètres du format de données
<a name="copy-parameters-data-format"></a>

Par défaut, la commande COPY attend que les données source soient dans un format texte UTF-8 séparé par des caractères. Le délimiteur par défaut est une barre verticale ( \$1 ). Si les données source sont dans un autre format, utilisez les paramètres suivants pour spécifier le format des données: 
+ [FORMAT](#copy-format)
+ [CSV](#copy-csv)
+ [DELIMITER](#copy-delimiter) 
+ [FIXEDWIDTH](#copy-fixedwidth) 
+ [SHAPEFILE](#copy-shapefile) 
+ [AVRO](#copy-avro) 
+ [JSON format for COPY](#copy-json) 
+ [PARQUET](#copy-parquet) 
+ [ORC](#copy-orc) 

En plus des formats de données standard, COPY prend en charge les formats de données en colonnes suivants pour la commande COPY depuis Amazon S3 : 
+ [ORC](#copy-orc) 
+ [PARQUET](#copy-parquet) 

La commande COPY à partir du format en colonne est pris en charge avec certaines restrictions. Pour plus d'informations, consultez [COPY depuis les formats de données en colonnes](copy-usage_notes-copy-from-columnar.md). <a name="copy-data-format-parameters"></a>Paramètres du format de données

FORMAT [AS]  <a name="copy-format"></a>
(Facultatif) Identifie les mots-clés de format des données. Les arguments FORMAT sont décrits ci-après.

CSV [ QUOTE [AS] *’quote\$1character’* ]  <a name="copy-csv"></a>
Permet l’utilisation du format CSV dans les données d’entrée. Pour insérer automatiquement des délimiteurs, des caractères de saut de ligne et des retours à la ligne, entourez le champ dans le caractère spécifié par le paramètre QUOTE. Le guillemet par défaut correspond aux guillemets doubles ( " ). Lorsque le guillemet simple est utilisé dans un champ, précédez le caractère d’un guillemet simple supplémentaire. Par exemple, si les guillemets sont doubles, pour insérer la chaîne `A "quoted" word` le fichier d’entrée doit inclure la chaîne `"A ""quoted"" word"`. Lorsque le paramètre CSV est utilisé, le délimiteur par défaut est une virgule ( , ). Vous pouvez spécifier un autre délimiteur en utilisant le paramètre DELIMITER.   
Lorsqu’un champ est placé entre guillemets, l’espace blanc entre les délimiteurs et les guillemets est ignoré. Si le délimiteur est un caractère d’espace vide, comme un onglet, le délimiteur n’est pas considéré comme un espace vide.  
CSV ne peut pas être utilisé avec FIXEDWIDTH, REMOVEQUOTES ou ESCAPE.     
QUOTE [AS] *’quote\$1character’*  <a name="copy-csv-quote"></a>
Facultatif. Spécifie le caractère à utiliser comme guillemet lorsque vous utilisez le paramètre CSV. La valeur par défaut est les guillemets doubles ( " ). Si vous utilisez le paramètre QUOTE pour définir un autre guillemet que des guillemets doubles, vous n’avez pas besoin d’insérer les guillemets doubles dans le champ. Le paramètre QUOTE peut être utilisé uniquement avec le paramètre CSV. Le mot-clé AS est facultatif.

DELIMITER [AS] [’*delimiter\$1char*’]   <a name="copy-delimiter"></a>
Spécifie les caractères qui sont utilisés pour séparer les champs dans le fichier d’entrée, tels qu’une barre verticale ( `|` ), une virgule ( `,` ), une tabulation ( `\t` ) ou plusieurs caractères tels que `|~|`. Les caractères non imprimables sont pris en charge. Les caractères peuvent également être représentés en octal sous forme d’unités de code UTF-8. Pour l’octal, utilisez le format « \$1ddd », où « d » est un chiffre octal (de 0 à 7). Le délimiteur par défaut est une barre verticale ( `|` ), à moins que le paramètre CSV soit utilisé, auquel cas le délimiteur par défaut est une virgule ( `,` ). Le mot-clé AS est facultatif. DELIMITER ne peut pas être utilisé avec FIXEDWIDTH.

FIXEDWIDTH ’*fixedwidth\$1spec*’   <a name="copy-fixedwidth"></a>
Charge les données d’un fichier où la largeur de chaque colonne est une longueur fixe, plutôt que des colonnes séparées par un délimiteur. *fixedwidth\$1spec* est une chaîne qui spécifie une étiquette de colonne définie par l’utilisateur et la largeur de la colonne. L’étiquette de colonne peut être une chaîne de texte ou un nombre entier, en fonction de ce que l’utilisateur choisit. L’étiquette de colonne n’a aucun lien avec le nom de la colonne. L'ordre des label/width paires doit correspondre exactement à l'ordre des colonnes du tableau. FIXEDWIDTH ne peut pas être utilisé avec CSV ou DELIMITER. Dans Amazon Redshift la longueur des colonnes CHAR et VARCHAR est exprimée en octets, aussi n’oubliez pas que la largeur de colonne que vous spécifiez correspond à la longueur binaire de caractères sur plusieurs octets lors de la préparation du fichier à charger. Pour plus d'informations, consultez [Types caractères](r_Character_types.md).   
Le format de *fixedwidth\$1spec* apparaît comme suit :   

```
'colLabel1:colWidth1,colLabel:colWidth2, ...'
```

SHAPEFILE [ SIMPLIFY [AUTO] [*’tolerance’*] ]  <a name="copy-shapefile"></a>
Permet l’utilisation du format CSV dans les données d’entrée. Par défaut, la première colonne du shapefile est une colonne `GEOMETRY` ou `IDENTITY`. Toutes les colonnes suivantes suivent l’ordre spécifié dans le shapefile.  
Vous ne pouvez pas utiliser SHAPEFILE avec FIXEDWIDTH, REMOVEQUOTES ou ESCAPE.   
Pour utiliser des objets `GEOGRAPHY` avec `COPY FROM SHAPEFILE`, intégrez-les d’abord dans une colonne `GEOMETRY`, puis convertissez-les en objets `GEOGRAPHY`.    
SIMPLIFY [*tolerance*]  <a name="copy-shapefile-simplify"></a>
(Facultatif) Simplifie toutes les géométries pendant le processus d'ingestion à l'aide de l' Ramer-Douglas-Peuckeralgorithme et de la tolérance donnée.   
SIMPLIFY AUTO [*tolerance*]  <a name="copy-shapefile-simplify"></a>
(Facultatif) Simplifie uniquement les géométries supérieures à la taille de géométrie maximale. Cette simplification utilise l' Ramer-Douglas-Peuckeralgorithme et la tolérance calculée automatiquement si celle-ci ne dépasse pas la tolérance spécifiée. Cet algorithme calcule la taille pour stocker les objets dans la tolérance spécifiée. La valeur *tolerance* est facultative.
Pour voir des exemples de chargement de shapefiles, consultez [Chargement d’un shapefile dans Amazon Redshift](r_COPY_command_examples.md#copy-example-spatial-copy-shapefile).

AVRO [AS] ’*avro\$1option*’  <a name="copy-avro"></a>
Spécifie que les données source sont au format Avro.   
Le format Avro est pris en charge pour la commande COPY dans les services et protocoles suivants :  
+ Amazon S3 
+ Amazon EMR 
+ Hôtes distants (SSH) 
Avro n’est pas pris en charge pour la commande COPY dans DynamoDB.   
Avro est un protocole de sérialisation de données. Un fichier source Avro inclut un schéma qui définit la structure des données. Le type de schéma Avro doit être `record`. La commande COPY accepte la création de fichiers Avro à l’aide du codec non compressé par défaut, ainsi que les codecs de compression `deflate` et `snappy`. Pour plus d’informations sur Avro, accédez à [Apache Avro](https://avro.apache.org/).   
Les valeurs valides pour *avro\$1option* sont les suivantes :  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
La valeur par défaut est `'auto'`.  
COPY mappe automatiquement les éléments de données des données source Avro aux colonnes de la table cible en mettant en correspondance les noms de champs du schéma Avro avec les noms de colonnes dans la table cible. La mise en correspondance est sensible à la casse pour `'auto'` et n’est pas sensible à la casse pour `'auto ignorecase'`.   
Les noms de colonnes des tables Amazon Redshift sont toujours en lettres minuscules, aussi lorsque vous utilisez l’option `'auto'`, les noms de champs correspondants doivent être en minuscules. Si les noms de champs ne sont pas tous en minuscules, vous pouvez utiliser l’option `'auto ignorecase'`. Avec l’argument `'auto'` par défaut, la commande COPY ne reconnaît que le premier niveau de champs (ou *champs externes*) dans la structure.   
Pour mapper explicitement les noms de colonnes aux noms de champs Avro, vous pouvez utiliser [JSONPaths fichier](#copy-json-jsonpaths).   
Par défaut, la commande COPY tente de mettre en correspondance toutes les colonnes de la table cible avec les noms de champs Avro. Pour charger un sous-ensemble de colonnes, vous pouvez éventuellement spécifier une liste de colonnes. Si une colonne dans la table cible est absente de la liste de colonnes, la commande COPY charge l’expression [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) de la colonne cible. Si la colonne cible n’a pas de valeur par défaut, la commande COPY tente de charger NULL. Si une colonne est incluse dans la liste de colonnes et que la commande COPY ne trouve pas de champ correspondant dans les données Avro, la commande COPY tente de charger NULL dans la colonne.   
Si la commande COPY tente d’affecter NULL à une colonne qui est définie comme NOT NULL, elle échoue.   
<a name="copy-avro-schema"></a>**Schéma Avro**  
Un fichier de données source Avro inclut un schéma qui définit la structure des données. La commande COPY lit le schéma qui fait partie du fichier de données source Avro pour mapper des éléments de données aux colonnes de la table cible. L’exemple suivant illustre un schéma Avro.   

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"}]
}
```
Le schéma Avro est défini à l’aide du format JSON. L’objet de niveau supérieur JSON contient trois paires nom-valeur avec les noms ou *clés*, `"name"`, `"type"` et `"fields"`.   
La clé `"fields"` s’apparie à un tableau d’objets qui définissent le nom et le type de données de chaque champ dans la structure de données. Par défaut, la commande COPY met automatiquement en correspondance les noms de champs avec les noms de colonnes. Les noms de colonnes sont toujours en minuscules, les noms de champs correspondants doivent donc toujours être en minuscules, sauf si vous spécifiez l’option `‘auto ignorecase’`. Tous les noms de domaines qui ne correspondent pas à un nom de colonne sont ignorés. L’ordre n’a pas d’importance. Dans l’exemple précédent, la commande COPY mappe aux noms de colonnes `id`, `guid`, `name`, et `address`.   
Avec l’argument `'auto'` par défaut, la commande COPY met en correspondance uniquement les objets de premier niveau des colonnes. Pour effectuer un mappage vers des niveaux plus profonds du schéma, ou si les noms de champs et de colonnes ne correspondent pas, utilisez un JSONPaths fichier pour définir le mappage. Pour de plus amples informations, veuillez consulter [JSONPaths fichier](#copy-json-jsonpaths).   
Si la valeur associée à une clé est un type de données complexe Avro comme octets, tableau, enregistrement, carte ou lien, la commande COPY charge la valeur sous forme de chaîne. Ici, la chaîne est la représentation JSON des données. La commande COPY charge les types de données d’énumération Avro sous forme de chaînes dans lesquelles le contenu est le nom du type. Pour obtenir un exemple, consultez [Exécution de la commande COPY à partir du format JSON](copy-usage_notes-copy-from-json.md).  
La taille maximale de l’en-tête du fichier Avro, qui inclut les métadonnées de fichiers et de schéma, est de 1 Mo.     
La taille maximale d’un seul bloc de données Avro est de 4 Mo. Ce qui est différent de la taille de ligne maximale. Si la taille maximale d’un seul bloc de données Avro est dépassée, même si la taille de la ligne qui en résulte est inférieure à la limite de taille de ligne de 4 Mo, la commande COPY échoue.   
Lors du calcul de la taille des lignes, Amazon Redshift compte deux fois les barres verticales (\$1) en interne. Si les données entrées contiennent un très grand nombre de barres verticales, la taille des lignes peut dépasser 4 Mo même si la taille du bloc de données est inférieure à 4 Mo.

JSON [AS] ’*json\$1option*’  <a name="copy-json"></a>
Les données source sont au format JSON.   
Le format JSON est pris en charge pour la commande COPY dans ces services et protocoles :  
+ Amazon S3
+ Commande COPY depuis Amazon EMR
+ Exécution de la commande COPY depuis SSH
JSON n’est pas pris en charge pour exécuter la commande COPY dans DynamoDB.   
Les valeurs valides pour *json\$1option* sont les suivantes :  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
+ `'noshred'` 
La valeur par défaut est `'auto'`. Amazon Redshift ne déchiquète pas les attributs des structures JSON en plusieurs colonnes lors du chargement d’un document JSON.  
Par défaut, la commande COPY tente de mettre en correspondance toutes les colonnes de la table cible avec les clés de noms de champs JSON. Pour charger un sous-ensemble de colonnes, vous pouvez éventuellement spécifier une liste de colonnes. Si les clés de nom de domaine JSON ne sont pas toutes en minuscules, vous pouvez utiliser l’option `'auto ignorecase'` ou [JSONPaths fichier](#copy-json-jsonpaths) pour mapper explicitement les noms de colonnes aux clés de nom de domaine JSON.  
Si une colonne dans la table cible est absente de la liste de colonnes, la commande COPY charge l’expression [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) de la colonne cible. Si la colonne cible n’a pas de valeur par défaut, la commande COPY tente de charger NULL. Si une colonne est incluse dans la liste de colonnes et que la commande COPY ne trouve pas de champ correspondant dans les données JSON, la commande COPY tente de charger NULL dans la colonne.   
Si la commande COPY tente d’affecter NULL à une colonne qui est définie comme NOT NULL, elle échoue.   
La commande COPY mappe les éléments de données dans les données source JSON aux colonnes de la table cible. Pour cela, elle fait correspondre les *clés d’objet* (ou les noms) dans les paires nom-valeur source aux noms des colonnes de la table cible.   
Reportez-vous aux informations suivantes sur chaque valeur *json\$1option* :    
’auto’  <a name="copy-json-auto"></a>
Avec cette option, la mise en correspondance est sensible à la casse. Les noms de colonnes des tables Amazon Redshift sont toujours en lettres minuscules, aussi lorsque vous utilisez l’option `'auto'`, les noms de champs JSON correspondants doivent être en minuscules.  
’auto ignorecase’  <a name="copy-json-auto-ignorecase"></a>
Avec cette option, la mise en correspondance n’est pas sensible à la casse. Les noms de colonnes des tables Amazon Redshift étant toujours en minuscules, lorsque vous utilisez la commande `'auto ignorecase'`, les noms de champs JSON correspondants peuvent être en minuscules, en majuscules ou en casse mixte.   
’s3://*jsonpaths\$1file*’  <a name="copy-json-pathfile"></a>
Avec cette option, COPY utilise le JSONPaths fichier nommé pour mapper les éléments de données des données sources JSON aux colonnes de la table cible. L’argument *`s3://jsonpaths_file`* doit être une clé d’objet Amazon S3 faisant explicitement référence à un seul fichier. Par exemple : `'s3://amzn-s3-demo-bucket/jsonpaths.txt`’. L’argument ne peut pas être un préfixe de clé. Pour plus d'informations sur l'utilisation d'un JSONPaths fichier, consultez[JSONPaths fichier](#copy-json-jsonpaths).  
Dans certains cas, le fichier spécifié par `jsonpaths_file` a le même préfixe que le chemin spécifié par `copy_from_s3_objectpath` pour les fichiers de données. Dans ce cas, COPY lit le JSONPaths fichier sous forme de fichier de données et renvoie des erreurs. Supposons, par exemple, que vos fichiers de données utilisent le chemin de l'objet `s3://amzn-s3-demo-bucket/my_data.json` et que votre JSONPaths fichier le soit`s3://amzn-s3-demo-bucket/my_data.jsonpaths`. Dans ce cas, la commande COPY tente de charger `my_data.jsonpaths` en tant que fichier de données.  
’noshred’  <a name="copy-json-noshred"></a>
Avec cette option, Amazon Redshift ne déchiquète pas les attributs des structures JSON en plusieurs colonnes lors du chargement d’un document JSON.

## Fichier de données JSON
<a name="copy-json-data-file"></a>

Le fichier de données JSON contient un ensemble d’objets ou tableaux. La commande COPY charge chaque objet ou tableau JSON dans une seule ligne de la table cible. Chaque objet ou tableau correspondant à une ligne doit être une structure autonome, de niveau racine, autrement dit, il ne doit être membre d’une autre structure JSON.

Un *objet* JSON commence et finit par des accolades ( \$1 \$1 ) et contient une collection non ordonnée de paires nom-valeur. Chaque paire de nom et de valeur est séparée par deux points, et les paires sont séparées par des virgules. Par défaut, la *clé d’objet*, ou le nom, dans les paires nom-valeur, doit correspondre au nom de la colonne correspondante dans la table. Les noms de colonnes des tables Amazon Redshift étant toujours en minuscules, les clés des noms de champs JSON correspondants doivent également être en minuscules. Si vos noms de colonnes et clés JSON ne correspondent pas, utilisez un [JSONPaths fichier](#copy-json-jsonpaths) pour mapper explicitement les colonnes aux clés. 

L’ordre d’un objet JSON n’est pas important. Tous les noms qui ne correspondent pas à un nom de colonne sont ignorés. L’exemple suivant illustre la structure d’un objet JSON simple.

```
{
  "column1": "value1",
  "column2": value2,
  "notacolumn" : "ignore this value"
}
```

Un *tableau* JSON commence et finit par des crochets ( [  ] ) et contient une collection ordonnée de valeurs séparées par des virgules. Si vos fichiers de données utilisent des tableaux, vous devez spécifier un JSONPaths fichier pour faire correspondre les valeurs aux colonnes. L’exemple suivant illustre la structure d’un tableau JSON simple. 

```
["value1", value2]
```

Le JSON doit être dans un format correct. Par exemple, les objets ou les tableaux ne peuvent pas être séparés par des virgules ou tout autre caractère à l’exception des espaces vides. Les chaînes doivent être placées entre guillemets doubles. Les guillemets doivent être des guillemets simples (0x22), ni culbutés, ni courbes.

La taille maximale d’un seul objet ou tableau JSON, y compris les accolades ou les crochets, est de 4 Mo. Ce qui est différent de la taille de ligne maximale. Si la taille maximale d’un seul objet ou tableau JSON est dépassée, même si la taille de la ligne qui en résulte est inférieure à la limite de taille de ligne de 4 Mo, la commande COPY échoue. 

Lors du calcul de la taille des lignes, Amazon Redshift compte deux fois les barres verticales (\$1) en interne. Si les données entrées contiennent un très grand nombre de barres verticales, la taille des lignes peut dépasser 4 Mo même si la taille de l’objet est inférieure à 4 Mo.

La commande COPY charge `\n` comme un caractère de saut de ligne et charge `\t` comme un caractère de tabulation. Pour charger une barre oblique inverse, précédez-la d’une barre oblique inverse ( `\\` ).

La commande COPY recherche la source JSON spécifiée pour un objet ou tableau JSON bien formé et valide. Si la commande COPY rencontre des caractères qui ne sont pas des espaces vides avant de localiser une structure JSON utilisable, ou entre des objets ou tableaux JSON valides, elle renvoie une erreur pour chaque instance. Ces erreurs sont prises en compte dans le nombre d’erreurs MAXERROR. Lorsque le nombre d’erreurs est égal ou supérieur à MAXERROR, la commande COPY échoue. 

Pour chaque erreur, Amazon Redshift enregistre une ligne dans la table système STL\$1LOAD\$1ERRORS. La colonne LINE\$1NUMBER enregistre la dernière ligne de l’objet JSON qui a provoqué l’erreur. 

Si IGNOREHEADER est spécifié, la commande COPY ignore le nombre de lignes dans les données JSON spécifiées. Les caractères de saut de ligne dans les données JSON comptent toujours pour les calculs IGNOREHEADER. 

La commande COPY charge des chaînes vides dans les champs vides par défaut. Si EMPTYASNULL est spécifié, la commande COPY charge des chaînes vides dans les champs CHAR et VARCHAR comme NULL. Les chaînes vides d’autres types de données, tels que INT, sont toujours chargées avec NULL. 

Les options suivantes ne sont pas prises en charge avec JSON : 
+ CSV
+ DELIMITER 
+ ESCAPE
+ FILLRECORD 
+ FIXEDWIDTH
+ IGNOREBLANKLINES
+ NULL AS
+ READRATIO
+ REMOVEQUOTES 

Pour plus d'informations, consultez [Exécution de la commande COPY à partir du format JSON](copy-usage_notes-copy-from-json.md). Pour plus d’informations sur les structures de données JSON, accédez à [www.json.org](https://www.json.org/). 

## JSONPaths fichier
<a name="copy-json-jsonpaths"></a>

Si vous chargez depuis des données source au format JSON ou Avro, la commande COPY mappe par défaut les éléments de données de premier niveau dans les données source aux colonnes de la table cible. Pour ce faire, elle met en correspondance chaque nom (ou clé d’objet) dans une paire nom-valeur avec le nom d’une colonne de la table cible. 

Si les noms de vos colonnes et vos clés d'objet ne correspondent pas, ou pour les mapper à des niveaux plus profonds de la hiérarchie des données, vous pouvez utiliser un JSONPaths fichier pour mapper explicitement des éléments de données JSON ou Avro à des colonnes. Le JSONPaths fichier mappe les éléments de données JSON aux colonnes en faisant correspondre l'ordre des colonnes dans la table ou la liste de colonnes cible.

Le JSONPaths fichier ne doit contenir qu'un seul objet JSON (pas un tableau). L’objet JSON est une paire nom-valeur. La *clé d’objet*, qui est le nom de la paire nom-valeur, doit être `"jsonpaths"`. *La *valeur* de la paire nom-valeur est un tableau d'JSONPath expressions.* Chaque JSONPath expression fait référence à un seul élément de la hiérarchie de données JSON ou du schéma Avro, de la même manière qu'une XPath expression fait référence aux éléments d'un document XML. Pour de plus amples informations, veuillez consulter [JSONPath expressions](#copy-json-jsonpath-expressions).

Pour utiliser un JSONPaths fichier, ajoutez le mot clé JSON ou AVRO à la commande COPY. Spécifiez le nom du compartiment S3 et le chemin de l'objet du JSONPaths fichier en utilisant le format suivant.

```
COPY tablename 
FROM 'data_source' 
CREDENTIALS 'credentials-args' 
FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';
```

La valeur `s3://jsonpaths_file` doit être une clé d’objet Amazon S3 faisant explicitement référence à un seul fichier, tel que `'s3://amzn-s3-demo-bucket/jsonpaths.txt'`. Elle ne pas être un préfixe de clé. 

Dans certains cas, si vous chargez à partir d’Amazon S3, le fichier spécifié par `jsonpaths_file` a le même préfixe que le chemin spécifié par `copy_from_s3_objectpath` pour les fichiers de données. Dans ce cas, COPY lit le JSONPaths fichier sous forme de fichier de données et renvoie des erreurs. Supposons, par exemple, que vos fichiers de données utilisent le chemin de l'objet `s3://amzn-s3-demo-bucket/my_data.json` et que votre JSONPaths fichier le soit`s3://amzn-s3-demo-bucket/my_data.jsonpaths`. Dans ce cas, la commande COPY tente de charger `my_data.jsonpaths` en tant que fichier de données.

 Si le nom de clé est une chaîne autre que `"jsonpaths"`, la commande COPY ne renvoie pas d’erreur, mais elle ignore *jsonpaths\$1file* et utilise l’argument `'auto'` à la place. 

Si l’une des actions suivantes se produit, la commande COPY échoue :
+ Le JSON est incorrect.
+ Il existe plusieurs objets JSON.
+ Tous les caractères sauf les espaces vides existent en dehors de l’objet.
+ Un élément de tableau est une chaîne vide ou n’est pas une chaîne.

MAXERROR ne s'applique pas au JSONPaths fichier. 

Le JSONPaths fichier ne doit pas être chiffré, même si l'[ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted)option est spécifiée.

Pour de plus amples informations, veuillez consulter [Exécution de la commande COPY à partir du format JSON](copy-usage_notes-copy-from-json.md). 

## JSONPath expressions
<a name="copy-json-jsonpath-expressions"></a>

Le JSONPaths fichier utilise des JSONPath expressions pour mapper les champs de données aux colonnes cibles. Chaque JSONPath expression correspond à une colonne de la table cible Amazon Redshift. L'ordre des éléments du JSONPath tableau doit correspondre à l'ordre des colonnes de la table cible ou de la liste des colonnes, si une liste de colonnes est utilisée. 

Les guillemets doubles sont obligatoires comme illustré, aussi bien pour les noms de champ que pour les valeurs. Les guillemets doivent être des guillemets simples (0x22), ni culbutés, ni courbes.

Si aucun élément d'objet référencé par une JSONPath expression n'est trouvé dans les données JSON, COPY tente de charger une valeur NULL. Si l’objet référencé est incorrect, la commande COPY renvoie une erreur de chargement. 

Si aucun élément de tableau référencé par une JSONPath expression n'est trouvé dans les données JSON ou Avro, COPY échoue avec l'erreur suivante : `Invalid JSONPath format: Not an array or index out of range.` Supprimez tous les éléments du tableau JSONPaths qui n'existent pas dans les données sources et vérifiez que les tableaux des données sources sont bien formés.  

Les JSONPath expressions peuvent utiliser la notation entre crochets ou la notation par points, mais vous ne pouvez pas mélanger les notations. L'exemple suivant montre des JSONPath expressions utilisant la notation entre crochets. 

```
{
    "jsonpaths": [
        "$['venuename']",
        "$['venuecity']",
        "$['venuestate']",
        "$['venueseats']"
    ]
}
```

L'exemple suivant montre des JSONPath expressions utilisant la notation par points. 

```
{
    "jsonpaths": [
        "$.venuename",
        "$.venuecity",
        "$.venuestate",
        "$.venueseats"
    ]
}
```

Dans le contexte de la syntaxe COPY d'Amazon Redshift, une JSONPath expression doit spécifier le chemin explicite vers un élément de nom unique dans une structure de données hiérarchique JSON ou Avro. Amazon Redshift ne prend en charge aucun JSONPath élément, tel que les caractères génériques ou les expressions de filtre, susceptibles de donner lieu à un chemin ambigu ou à plusieurs éléments de nom.

Pour de plus amples informations, veuillez consulter [Exécution de la commande COPY à partir du format JSON](copy-usage_notes-copy-from-json.md). 

## Utilisation JSONPaths avec Avro Data
<a name="using-jsonpath-with-avro"></a>

L’exemple suivant illustre un schéma Avro à plusieurs niveaux.

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "isActive", "type": "boolean"},
        {"name": "age", "type": "int"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"},
        {"name": "latitude", "type": "double"},
        {"name": "longitude", "type": "double"},
        {
            "name": "tags",
            "type": {
                        "type" : "array",
                        "name" : "inner_tags",
                        "items" : "string"
                    }
        },
        {
            "name": "friends",
            "type": {
                        "type" : "array",
                        "name" : "inner_friends",
                        "items" : {
                                    "name" : "friends_record",
                                    "type" : "record",
                                    "fields" : [
                                                 {"name" : "id", "type" : "int"},
                                                 {"name" : "name", "type" : "string"}
                                               ]
                                  }
                    }
        },
        {"name": "randomArrayItem", "type": "string"}
    ]
}
```

L'exemple suivant montre un JSONPaths fichier qui utilise des AvroPath expressions pour faire référence au schéma précédent. 

```
{
    "jsonpaths": [
        "$.id",
        "$.guid",
        "$.address",
        "$.friends[0].id"
    ]
}
```

L' JSONPaths exemple inclut les éléments suivants :

jsonpaths  
Nom de l'objet JSON qui contient les AvroPath expressions.

[ … ]  
Les crochets entourent le tableau JSON qui contient les éléments de chemin d’accès.

\$1  
Le symbole du dollar fait référence à l’élément racine du schéma Avro, qui est le tableau `"fields"`.

"\$1.id",  
La cible de l' AvroPath expression. Dans ce cas, la cible est l’élément dans le tableau `"fields"` avec le nom `"id"`. Les expressions sont séparées par des virgules.

"\$1.friends[0].id"  
Les crochets indiquent un index de tableau. JSONPath les expressions utilisent une indexation basée sur zéro. Cette expression fait donc référence au premier élément du `"friends"` tableau portant le nom. `"id"`

La syntaxe du schéma Avro nécessite l’utilisation de *champs internes* pour définir la structure d’enregistrement et les types de données du tableau. Les champs internes sont ignorés par les AvroPath expressions. Par exemple, le champ `"friends"` définit un tableau nommé `"inner_friends"`, qui définit à son tour un enregistrement nommé `"friends_record"`. L' AvroPath expression faisant référence au champ `"id"` peut ignorer les champs supplémentaires pour référencer directement le champ cible. Les AvroPath expressions suivantes font référence aux deux champs appartenant au `"friends"` tableau.

```
"$.friends[0].id"
"$.friends[0].name"
```

## Paramètres du format des données en colonnes
<a name="copy-parameters-columnar-data"></a>

En plus des formats de données standard, COPY prend en charge les formats de données en colonnes suivants pour la commande COPY depuis Amazon S3. La commande COPY à partir du format en colonne est pris en charge avec certaines restrictions. Pour plus d'informations, consultez [COPY depuis les formats de données en colonnes](copy-usage_notes-copy-from-columnar.md). 

ORC  <a name="copy-orc"></a>
Charge les données à partir d’un fichier qui utilise le format de fichier ORC (Optimized Row Columnar). 

PARQUET  <a name="copy-parquet"></a>
Charge les données à partir d’un fichier qui utilise le format de fichier Parquet. 

# Paramètres de compression de fichier
<a name="copy-parameters-file-compression"></a>

Vous pouvez charger à partir de fichiers de données compressés en spécifiant les paramètres suivants. Paramètres de compression de fichier

BZIP2   <a name="copy-bzip2"></a>
Valeur qui indique que le ou les fichiers d’entrée sont au format compressé bzip2 (fichiers .bz2). L’opération COPY lit chaque fichier compressé et décompresse les données qu’elle charge.

GZIP   <a name="copy-gzip"></a>
Valeur qui indique que le ou les fichiers d’entrée sont au format compressé gzip (fichiers .gz). L’opération COPY lit chaque fichier compressé et décompresse les données qu’elle charge.

LZOP   <a name="copy-lzop"></a>
Valeur qui indique que le ou les fichiers d’entrée sont au format compressé lzop (fichiers .lzo). L’opération COPY lit chaque fichier compressé et décompresse les données qu’elle charge.  
L’opération COPY ne prend pas en charge les fichiers qui sont compressés à l’aide de l’option lzop *--filter*.

ZSTD   <a name="copy-zstd"></a>
Valeur qui indique que le ou les fichiers d’entrée sont au format compressé Zstandard (fichiers .zst). L’opération COPY lit chaque fichier compressé et décompresse les données qu’elle charge.  
ZSTD est pris en charge uniquement avec la commande COPY depuis Amazon S3.

# Paramètres de conversion de données
<a name="copy-parameters-data-conversion"></a>

Lorsqu’elle charge la table, la commande COPY tente implicitement de convertir les chaînes dans les données source vers le type de données de la colonne cible. Si vous devez spécifier une conversion qui est différente du comportement par défaut, ou si la conversion par défaut entraîne des erreurs, vous pouvez gérer les conversions de données en spécifiant les paramètres suivants. Pour plus d’informations sur la syntaxe de ces paramètres, consultez [Syntaxe de la commande COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax).
+ [ACCEPTANYDATE](#copy-acceptanydate) 
+ [ACCEPTINVCHARS](#copy-acceptinvchars) 
+ [BLANKSASNULL](#copy-blanksasnull) 
+ [DATEFORMAT](#copy-dateformat) 
+ [EMPTYASNULL](#copy-emptyasnull) 
+ [ENCODING](#copy-encoding) 
+ [ESCAPE](#copy-escape) 
+ [EXPLICIT_IDS](#copy-explicit-ids) 
+ [FILLRECORD](#copy-fillrecord) 
+ [IGNOREBLANKLINES](#copy-ignoreblanklines) 
+ [IGNOREHEADER](#copy-ignoreheader) 
+ [NULL AS](#copy-null-as) 
+ [REMOVEQUOTES](#copy-removequotes) 
+ [ROUNDEC](#copy-roundec) 
+ [TIMEFORMAT](#copy-timeformat) 
+ [TRIMBLANKS](#copy-trimblanks) 
+ [TRUNCATECOLUMNS](#copy-truncatecolumns) <a name="copy-data-conversion-parameters"></a>Paramètres de conversion de données

ACCEPTANYDATE   <a name="copy-acceptanydate"></a>
Autorise n’importe quel format de date, y compris les formats non valides comme `00/00/00 00:00:00`, à charger sans générer d’erreur. Ce paramètre s’applique uniquement aux colonnes TIMESTAMP et DATE. Utilisez toujours ACCEPTANYDATE avec le paramètre DATEFORMAT. Si le format de date pour les données ne correspond pas à la spécification DATEFORMAT, Amazon Redshift insère une valeur NULL dans ce champ.

ACCEPTINVCHARS [AS] [’*replacement\$1char*’]   <a name="copy-acceptinvchars"></a>
Autorise le chargement de données dans les colonnes VARCHAR, même si les données contiennent des caractères UTF-8 non valides. Lorsque ACCEPTINVCHARS est spécifié, la commande COPY remplace chaque caractère UTF-8 non valide par une chaîne de la même longueur comprenant le caractère spécifié par *replacement\$1char*. Par exemple, si le caractère de remplacement est ’`^`’, un caractère non valide de trois octets sera remplacé par ’`^^^`’.  
 Le caractère de remplacement peut être n’importe quel caractère ASCII sauf NULL. La valeur par défaut est un point d’interrogation ( ? ). Pour plus d’informations sur les caractères UTF-8 non valides, consultez [Erreurs de chargement de caractères multioctets](multi-byte-character-load-errors.md).  
La commande COPY renvoie le nombre de lignes qui contenaient des caractères UTF-8 non valides, et ajoute une entrée à la table système [STL\$1REPLACEMENTS](r_STL_REPLACEMENTS.md) pour chaque ligne concernée, à concurrence de 100 lignes au maximum pour chaque tranche de nœud. Les caractères UTF-8 non valides supplémentaires sont également remplacés, mais ces événements de remplacement ne sont pas enregistrés.  
Si ACCEPTINVCHARS n’est pas spécifié, la commande COPY renvoie une erreur chaque fois qu’elle rencontre un caractère UTF-8 non valide.   
ACCEPTINVCHARS est valide uniquement pour les colonnes VARCHAR.

BLANKSASNULL   <a name="copy-blanksasnull"></a>
Charge les champs vides, qui comprennent des espaces vides uniquement, comme NULL. Cette option s’applique uniquement aux colonnes CHAR et VARCHAR. Les champs vides pour d’autres types de données, tels que INT, sont toujours chargés avec NULL. Par exemple, une chaîne qui contient trois espaces à la suite (et aucun autre caractère) est chargée comme une valeur NULL. Le comportement par défaut, sans cette option, consiste à charger les espaces tels quels. 

DATEFORMAT [AS] \$1’*dateformat\$1string*’ \$1 ’auto’ \$1  <a name="copy-dateformat"></a>
Si aucun DATEFORMAT n’est spécifié, le format par défaut est `'YYYY-MM-DD'`. Par exemple, un autre format valide est `'MM-DD-YYYY'`.   
Si la commande COPY ne reconnaît pas le format de vos valeurs de date ou d’heure, ou si vos valeurs de date ou d’heure utilisent des formats différents, utilisez l’argument `'auto'` avec le paramètre DATEFORMAT ou TIMEFORMAT. L’argument `'auto'` reconnaît plusieurs formats qui ne sont pas pris en charge lors de l’utilisation d’une chaîne DATEFORMAT et TIMEFORMAT. Le mot-clé `'auto'` est sensible à la casse. Pour plus d'informations, consultez [Utilisation de la reconnaissance automatique avec DATEFORMAT et TIMEFORMAT](automatic-recognition.md).   
Le format de date peut inclure des informations de temps (heure, minutes, secondes), mais ces informations sont ignorées. Le mot-clé AS est facultatif. Pour plus d'informations, consultez [Chaînes DATEFORMAT et TIMEFORMATExemple](r_DATEFORMAT_and_TIMEFORMAT_strings.md).

EMPTYASNULL   <a name="copy-emptyasnull"></a>
Indique que Amazon Redshift doit charger les champs CHAR et VARCHAR vides comme des valeurs NULL. Les champs vides pour d’autres types de données, tels que INT, sont toujours chargés avec NULL. Les champs vides surviennent lorsque les données contiennent deux délimiteurs de suite sans caractère entre les délimiteurs. EMPTYASNULL et NULL AS ’’ (chaîne vide) entraînent le même comportement.

ENCODING [AS] *file\$1encoding*  <a name="copy-encoding"></a>
Spécifie le type d’encodage des données de chargement. La commande COPY convertit les données de l’encodage spécifié dans UTF-8 pendant le chargement.   
Les valeurs valides pour *file\$1encoding* sont les suivantes :  
+ `UTF8`
+ `UTF16`
+ `UTF16LE`
+ `UTF16BE`
+ `ISO88591`
La valeur par défaut est `UTF8`.  
Les noms de fichier source doivent utiliser l’encodage UTF-8.  
Les fichiers suivants doivent utiliser l’encodage UTF-8, même si un autre encodage a été spécifié pour les données de chargement :  
+ Fichiers manifestes
+ JSONPaths fichiers
Les chaînes d’arguments fournies avec les paramètres suivants doivent utiliser UTF-8 :  
+ FIXEDWIDTH ’*fixedwidth\$1spec*’
+ ACCEPTINVCHARS ’*replacement\$1char*’
+ DATEFORMAT ’*dateformat\$1string*’
+ TIMEFORMAT ’*timeformat\$1string*’
+ NULL AS ’*null\$1string*’
Les fichiers de données de largeur fixe doivent utiliser l’encodage UTF-8. Les largeurs des champs dépendent du nombre de caractères, et non du nombre d’octets.   
Toutes les données de chargement doivent utiliser l’encodage spécifié. Si la commande COPY rencontre un autre encodage, elle ignore le fichier et renvoie une erreur.   
Si vous spécifiez `UTF16`, vos données doivent comporter une marque d’ordre d’octet. Si vous savez que vos données UTF-16 sont de poids faible (Little endian) ou de poids fort (Big endian), vous pouvez utiliser `UTF16LE` ou `UTF16BE`, indépendamment de la présence d’une marque d’ordre d’octet.   
Pour utiliser l’encodage ISO-8859-1, spécifiez `ISO88591`. Pour plus d’informations, consultez [ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1) sur *Wikipédia*.

ESCAPE   <a name="copy-escape"></a>
Lorsque ce paramètre est spécifié, la barre oblique inverse (`\`) dans les données d’entrée est considérée comme un caractère d’échappement. Le caractère qui se trouve immédiatement après la barre oblique inverse est chargé dans la table comme faisant partie de la valeur de la colonne actuelle, même s’il s’agit d’un caractère qui a normalement une fonction particulière. Par exemple, vous pouvez utiliser ce paramètre pour insérer le caractère délimiteur, un guillemet anglais, un caractère de saut de ligne intégré, ou le caractère d’échappement lui-même lorsque l’un de ces caractères fait légitimement partie d’une valeur de la colonne.  
Si vous spécifiez le paramètre ESCAPE en liaison avec le paramètre REMOVEQUOTES, vous pouvez insérer et conserver des guillemets doubles (`'` ou `"`) qui peuvent être supprimés dans le cas contraire. La chaîne vide par défaut, `\N`, fonctionne telle quelle, mais elle peut également être insérée dans les données d’entrée en tant que `\\N`. Tant que vous ne spécifiez pas d’autre chaîne nulle avec le paramètre NULL AS, `\N` et `\\N` entraînent les mêmes résultats.  
Le caractère de contrôle `0x00` (NUL) ne peut pas être inséré et doit être supprimé des données d’entrée ou converti. Ce caractère est considéré comme une marque de fin d’enregistrement, ce qui entraîne la troncation du reste de l’enregistrement.
Vous ne pouvez pas utiliser le paramètre ESCAPE pour les charges FIXEDWIDTH, et vous ne pouvez pas spécifier le caractère d’échappement lui-même ; il s’agit toujours de la barre oblique inverse. En outre, vous devez vous assurer que les données d’entrée contiennent le caractère d’échappement aux endroits appropriés.  
Voici des exemples de données d’entrée et des données chargées résultant de celles-ci lorsque le paramètre ESCAPE est spécifié. Le résultat de la ligne 4 part du principe que le paramètre REMOVEQUOTES est également spécifié. Les données d’entrée se composent de deux champs séparés par une barre verticale :   

```
1|The quick brown fox\[newline]
jumped over the lazy dog.
2| A\\B\\C
3| A \| B \| C
4| 'A Midsummer Night\'s Dream'
```
Les données chargées dans la colonne 2 ressemblent à ceci :   

```
The quick brown fox
jumped over the lazy dog.
A\B\C
A|B|C
A Midsummer Night's Dream
```
L’application du caractère d’échappement aux données d’entrée pour une charge est de la responsabilité de l’utilisateur, sauf lorsque vous rechargez les données qui ont été précédemment déchargées avec le paramètre ESCAPE. Dans ce cas, les données contiennent déjà les caractères d’échappement nécessaires.
Le paramètre ESCAPE n’interprète pas la notation de séquence d’échappement octale, hexadécimale, Unicode, ou autre. Par exemple, si vos données source contiennent la valeur de saut de ligne octale (`\012`) et que vous essayez de charger ces données avec le paramètre ESCAPE, Amazon Redshift charge la valeur `012` dans la table et ne l’interprète pas comme un saut de ligne qui est en cours d’échappement.  
Pour insérer des caractère de saut ligne dans les données qui proviennent de plateformes Microsoft Windows, vous devrez peut-être utiliser deux caractères d’échappement : un pour le retour chariot et un autre pour le saut de ligne. Sinon, vous pouvez supprimer les retours chariot avant de charger le fichier (par exemple, en utilisant l’utilitaire dos2unix).

EXPLICIT\$1IDS   <a name="copy-explicit-ids"></a>
Utilisez EXPLICIT\$1IDS avec des tables ayant des colonnes IDENTITY si vous souhaitez remplacer les valeurs générées automatiquement par des valeurs explicites dans les fichiers de données source pour les tables. Si la commande inclut une liste de colonnes, cette liste doit inclure les colonnes IDENTITY pour utiliser ce paramètre. Le format de données pour les valeurs EXPLICIT\$1IDS doit correspondre au format IDENTITY spécifié par la définition CREATE TABLE.  
Lorsque vous exécutez une commande COPY sur une table avec l’option EXPLICIT\$1IDS, Amazon Redshift ne vérifie plus l’unicité des colonnes IDENTITY dans la table.  
Si une colonne est définie avec GENERATED BY DEFAULT AS IDENTITY, elle peut être copiée. Les valeurs sont générées ou mises à jour avec des valeurs que vous fournissez. L’option EXPLICIT\$1IDS n’est pas obligatoire. COPY ne met pas à jour le filigrane élevé d’identité.  
 Pour un exemple de commande COPY utilisant EXPLICIT\$1IDS, consultez [Charger la table VENUE avec des valeurs EXPLICIT pour une colonne IDENTITY](r_COPY_command_examples.md#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column).

FILLRECORD   <a name="copy-fillrecord"></a>
Autorise le chargement des fichiers de données lorsqu’il manque des colonnes contiguës à la fin de certains des enregistrements. Les colonnes manquantes sont chargées en tant que NULLs. Pour les formats texte et CSV, si la colonne manquante est une colonne VARCHAR, des chaînes de longueur nulle sont chargées à la place de. NULLs Pour charger des colonnes NULLs dans VARCHAR à partir de texte et de CSV, spécifiez le mot clé EMPTYASNULL. La substitution NULL ne fonctionne que si la définition de colonne le permet NULLs.  
Par exemple, si la définition de table contient quatre colonnes CHAR qui autorisent la valeur Null, et qu’un enregistrement contient les valeurs `apple, orange, banana, mango`, la commande COPY peut charger et remplir un enregistrement qui contient uniquement les valeurs `apple, orange`. Les valeurs CHAR manquantes seraient chargées en tant que valeurs NULL.

IGNOREBLANKLINES   <a name="copy-ignoreblanklines"></a>
Ignore les lignes vides qui contiennent uniquement un saut de ligne dans un fichier de données et n’essaie pas de les charger.

IGNOREHEADER [ AS ] *number\$1rows*   <a name="copy-ignoreheader"></a>
Traite les *number\$1rows* spécifiées comme un en-tête de fichier et ne les charge pas. Utilisez IGNOREHEADER pour ignorer les en-têtes de fichier dans tous les fichiers d’une charge parallèle.

NULL AS ’*null\$1string*’   <a name="copy-null-as"></a>
Charge les champs qui mettent en correspondance les *null\$1string* comme NULL, où *null\$1string* peut être une chaîne. Si vos données incluent une marque de fin null, également appelée NUL (UTF-8 0000) ou zéro binaire (0x000), la commande COPY la traite comme tout autre caractère. Par exemple, un enregistrement contenant ’1’ \$1\$1 NUL \$1\$1 ’2’ est copié sous la forme d’une chaîne d’une longueur de 3 octets. Si un champ contient uniquement NUL, vous pouvez utiliser NULL AS pour remplacer la marque de fin null par NULL en spécifiant `'\0'` ou `'\000'`, par exemple, `NULL AS '\0'` ou `NULL AS '\000'`. Si un champ qui contient une chaîne qui se termine par NUL et NULL AS est spécifié, la chaîne est insérée avec NUL à la fin. N’utilisez pas ’\$1n’ (saut de ligne) pour la valeur *null\$1string*. Amazon Redshift réserve ’\$1n’ pour l’utiliser en tant que délimiteur de ligne. La valeur par défaut *null\$1string* est `'\N`’.  
Si vous essayez de charger les valeurs null dans une colonne définie comme NOT NULL, la commande COPY échoue.

REMOVEQUOTES   <a name="copy-removequotes"></a>
Supprime les guillemets des chaînes dans les données entrantes. Tous les caractères compris entre les guillemets, y compris les délimiteurs, sont conservés. Si une chaîne commence par un guillemet anglais ou des guillemets doubles, sans caractère de fin correspondant, la commande COPY échoue à charger cette ligne et renvoie une erreur. Le tableau suivant présente quelques exemples simples de chaînes contenant des guillemets et les valeurs chargées en conséquence.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/copy-parameters-data-conversion.html)

ROUNDEC   <a name="copy-roundec"></a>
Arrondit les valeurs numériques lorsque l’échelle de la valeur d’entrée est supérieure à l’échelle de la colonne. Par défaut, la commande COPY tronque les valeurs lorsque cela est nécessaire pour s’adapter à l’échelle de la colonne. Par exemple, si une valeur de `20.259` est chargée dans une colonne DECIMAL(8,2), la commande COPY tronque la valeur de `20.25` par défaut. Si ROUNDEC est spécifié, la commande COPY arrondit la valeur de `20.26`. La commande INSERT arrondit toujours les valeurs autant que possible afin de les adapter à l’échelle de la colonne. Une commande COPY avec le paramètre ROUNDEC se comporte donc de la même manière qu’une commande INSERT.

TIMEFORMAT [AS] \$1’*timeformat\$1string*’ \$1 ’auto’ \$1 ’epochsecs’ \$1 ’epochmillisecs’ \$1  <a name="copy-timeformat"></a>
Spécifie le format de l’heure. Si aucun TIMEFORMAT n’est spécifié, le format par défaut est `YYYY-MM-DD HH:MI:SS` pour les colonnes TIMESTAMP ou `YYYY-MM-DD HH:MI:SSOF` pour les colonnes TIMESTAMPTZ, `OF` correspondant au décalage par rapport à l’heure UTC (Coordinated Universal Time). Vous ne pouvez pas inclure de spécificateur de fuseau horaire dans *timeformat\$1string*. Pour charger les données TIMESTAMPTZ dont le format est différent du format par défaut, spécifiez « auto ». Pour plus d’informations, consultez [Utilisation de la reconnaissance automatique avec DATEFORMAT et TIMEFORMAT](automatic-recognition.md). Pour plus d’informations sur *timeformat\$1string*, consultez [Chaînes DATEFORMAT et TIMEFORMATExemple](r_DATEFORMAT_and_TIMEFORMAT_strings.md).  
L’argument `'auto'` reconnaît plusieurs formats qui ne sont pas pris en charge lors de l’utilisation d’une chaîne DATEFORMAT et TIMEFORMAT. Si la commande COPY ne reconnaît pas le format de vos valeurs de date ou d’heure, ou si vos valeurs de date et d’heure utilisent des formats différents les uns des autres, utilisez l’argument `'auto'` avec le paramètre DATEFORMAT ou TIMEFORMAT. Pour plus d'informations, consultez [Utilisation de la reconnaissance automatique avec DATEFORMAT et TIMEFORMAT](automatic-recognition.md).   
Si vos données source sont représentées sous la forme de l’heure d’époque, qui est le nombre de secondes ou de millisecondes depuis le 1er janvier 1970, 00:00:00 UTC, précisez `'epochsecs'` ou `'epochmillisecs'`.   
Les mots-clés `'auto'`, `'epochsecs'`, et `'epochmillisecs'` sont sensibles à la casse.  
Le mot-clé AS est facultatif.

TRIMBLANKS   <a name="copy-trimblanks"></a>
Supprime les caractères d’espace vide de fin d’une chaîne VARCHAR. Ce paramètre s’applique uniquement aux colonnes avec un type de données VARCHAR.

TRUNCATECOLUMNS   <a name="copy-truncatecolumns"></a>
Tronque les données des colonnes avec le nombre de caractères donné afin qu’il corresponde à la spécification de la colonne. S’applique uniquement aux colonnes avec un type de données VARCHAR ou CHAR et des lignes de 4 Mo ou moins.

# Opérations de chargement de données
<a name="copy-parameters-data-load"></a>

Gérez le comportement par défaut de l’opération de chargement pour le dépannage ou pour réduire les temps de chargement en spécifiant les paramètres suivants. 
+ [COMPROWS](#copy-comprows) 
+ [COMPUPDATE](#copy-compupdate) 
+ [IGNOREALLERRORS](#copy-ignoreallerrors) 
+ [MAXERROR](#copy-maxerror) 
+ [NOLOAD](#copy-noload) 
+ [STATUPDATE](#copy-statupdate) <a name="copy-data-load-parameters"></a>Parameters

COMPROWS *numrows*   <a name="copy-comprows"></a>
Permet de spécifier le nombre de lignes à utiliser comme taille d’échantillon pour l’analyse de la compression. L’analyse est exécutée sur les lignes de chaque tranche de données. Par exemple, si vous spécifiez `COMPROWS 1000000` (1 000 000) et que le système contient quatre sections totales, pas plus de 250 000 lignes par section sont lues et analysées.  
Si le paramètre COMPROWS n’est pas spécifié, la taille de l’échantillon par défaut est de 100 000 par tranche. Les valeurs du paramètre COMPROWS inférieures à la valeur par défaut de 100 000 lignes par tranche sont automatiquement mises à niveau vers la valeur par défaut. Toutefois, la compression automatique n’aura pas lieu si la quantité de données en cours de chargement n’est pas suffisante pour produire un échantillon représentatif.  
Si le nombre défini pour le paramètre COMPROWS dépasse le nombre de lignes dans le fichier d’entrée, la commande COPY produit et exécute toujours l’analyse de la compression sur toutes les lignes disponibles. La plage acceptée pour cet argument est un nombre compris entre 1000 et 2147483647 (2 147 483 647).

COMPUPDATE [ PRESET \$1 \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-compupdate"></a>
Permet de contrôler si les encodages de compression sont appliqués automatiquement pendant une exécution de la commande COPY.   
Lorsque COMPUPDATE utilise PRESET, la commande COPY choisit l’encodage de compression pour chaque colonne si la table de la cible est vide, même si les colonnes ont déjà des encodages autres que RAW. Les encodages de colonne actuellement spécifiés peuvent être remplacés. L’encodage de chaque colonne est basé sur le type de données de la colonne. Aucune donnée échantillonnée. Amazon Redshift attribue automatiquement l’encodage de compression comme suit :  
+ Les colonnes qui sont définies comme des clés de tri se voient attribuer une compression RAW.
+ Les colonnes qui sont définies comme des types de données BOOLEAN, REAL ou DOUBLE PRECISION se voient attribuer une compression RAW.
+ Les colonnes définies comme SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIMESTAMP ou TIMESTAMPTZ sont compressées. AZ64 
+ Les colonnes définies comme CHAR ou VARCHAR sont affectées à la compression LZO.
Lorsque COMPUPDATE est omis, la commande COPY choisit l’encodage de compression pour chaque colonne uniquement si la table de la cible est vide et si vous n’avez pas spécifié d’encodage (autre que BRUT) pour les colonnes. L’encodage pour chaque colonne est déterminé par Amazon Redshift. Aucune donnée échantillonnée.   
Lorsque le paramètre COMPUPDATE est défini sur ON (ou TRUE) ou que le paramètre COMPUPDATE est spécifié sans une option, la commande COPY applique la compression automatique si la table est vide, même si les colonnes de la table contiennent déjà des encodages autres que RAW. Les encodages de colonne actuellement spécifiés peuvent être remplacés. L’encodage de chaque colonne est basé sur une analyse des exemples de données. Pour plus d'informations, consultez [Chargement des tables avec compression automatique](c_Loading_tables_auto_compress.md).  
Lorsque le paramètre COMPUPDATE est défini sur OFF (ou FALSE), la compression automatique est désactivée. Les encodages de colonne ne sont pas modifiés.  
Pour plus de détails sur la table système utilisée pour analyser la compression, consultez [STL\$1ANALYZE\$1COMPRESSION](r_STL_ANALYZE_COMPRESSION.md). 

IGNOREALLERRORS   <a name="copy-ignoreallerrors"></a>
Vous pouvez spécifier cette option pour ignorer toutes les erreurs qui se produisent pendant l’opération de chargement.   
Vous ne pouvez pas spécifier l’option IGNOREALLERRORS si vous spécifiez l’option MAXERROR. Vous ne pouvez pas spécifier l’option IGNOREALLERRORS pour les formats de données en colonnes tels que ORC et Parquet.

MAXERROR [AS] *error\$1count*   <a name="copy-maxerror"></a>
Si la charge renvoie le nombre d’erreurs *error\$1count* ou un nombre supérieur, la charge échoue. Si la charge renvoie moins d’erreurs, elle continue et renvoie un message INFO qui indique le nombre de lignes qui n’a pas pu être chargé. Utilisez ce paramètre pour permettre aux charges de continuer lorsque certaines lignes échouent à se charger dans la table en raison d’erreurs de mise en forme ou d’autres incohérences dans les données.   
Définissez cette valeur sur `0` ou `1` si vous voulez que la charge échoue dès que la première erreur se produit. Le mot-clé AS est facultatif. La valeur par défaut MAXERROR est `0` et la limite est `100000`.  
 Le nombre d’erreurs réel signalé peut être supérieur à la valeur du paramètre MAXERROR spécifié en raison de la nature parallèle d’Amazon Redshift. Si un nœud dans le cluster Amazon Redshift détecte que la valeur du paramètre MAXERROR a été dépassée, chaque nœud indique toutes les erreurs qu’il a rencontrées.

NOLOAD   <a name="copy-noload"></a>
Permet de vérifier la validité du fichier de données sans réellement charger les données. Utilisez le paramètre NOLOAD pour vous assurer que votre fichier de données se charge sans erreur avant d’exécuter la charge de données réelle. L’exécution de COPY avec le paramètre NOLOAD est beaucoup plus rapide que le chargement des données, car il analyse uniquement les fichiers.

STATUPDATE [ \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-statupdate"></a>
Permet de définir le calcul automatique et l’actualisation des statistiques de l’optimiseur à la fin d’une commande COPY réussie. Par défaut, si le paramètre STATUPDATE n’est pas utilisé, les statistiques sont mises à jour automatiquement si la table est initialement vide.  
Chaque fois qu’une intégration de données dans une table non vide modifie considérablement la taille de la table, nous recommandons la mise à jour des statistiques en exécutant une commande [ANALYSE](r_ANALYZE.md) ou en utilisant l’argument STATUPDATE ON.  
Avec le paramètre STATUPDATE ON (ou TRUE), les statistiques sont mises à jour automatiquement, que la table soit initialement vide ou non. Si le paramètre STATUPDATE est utilisé, l’utilisateur actuel doit être soit propriétaire de la table soit un super-utilisateur. Si le paramètre STATUPDATE n’est pas spécifié, seule l’autorisation INSERT est obligatoire.  
Avec le paramètre STATUPDATE OFF (ou FALSE), les statistiques ne sont jamais mises à jour.  
Pour plus d’informations, consultez [Analyse des tables](t_Analyzing_tables.md).

# Liste alphabétique des paramètres
<a name="r_COPY-alphabetical-parm-list"></a>

La liste suivante fournit des liens vers chaque description du paramètre de commande COPY, par ordre alphabétique.
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate)
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars)
+ [Utilisation de ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id-access)
+ [AVRO](copy-parameters-data-format.md#copy-avro)
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull)
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows)
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate)
+ [CREDENTIALS](copy-parameters-authorization.md#copy-credentials-cred)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter)
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull)
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding)
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted)
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape)
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth)
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [FROM](copy-parameters-data-source-s3.md#copy-parameters-from)
+ [GZIP](copy-parameters-file-compression.md#copy-gzip)
+ [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role-iam)
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors)
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines)
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader)
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json)
+ [LZOP](copy-parameters-file-compression.md#copy-lzop)
+ [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
+ [MASTER_SYMMETRIC_KEY](copy-parameters-data-source-s3.md#copy-master-symmetric-key)
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror)
+ [NOLOAD](copy-parameters-data-load.md#copy-noload)
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as)
+ [READRATIO](copy-parameters-data-source-dynamodb.md#copy-readratio)
+ [REGION](copy-parameters-data-source-s3.md#copy-region)
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes)
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec)
+ [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token)
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile)
+ [SSH](copy-parameters-data-source-ssh.md#copy-ssh)
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate)
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat)
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks)
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns)
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd)

# Notes d’utilisation
<a name="r_COPY_usage_notes"></a>

**Topics**
+ [Autorisations d'accès à d'autres AWS ressources](copy-usage_notes-access-permissions.md)
+ [Utilisation de COPY avec des alias de point d’accès Amazon S3](copy-usage_notes-s3-access-point-alias.md)
+ [Chargement de données multioctets à partir d’Amazon S3](copy-usage_notes-multi-byte.md)
+ [Chargement d’une colonne avec le type de données GEOMETRY ou GEOGRAPHY](copy-usage_notes-spatial-data.md)
+ [Chargement du type de données HLLSKETCH](copy-usage_notes-hll.md)
+ [Chargement d’une colonne avec le type de données VARBYTE](copy-usage-varbyte.md)
+ [Erreurs survenant lors de la lecture de plusieurs fichiers](copy-usage_notes-multiple-files.md)
+ [Exécution de la commande COPY à partir du format JSON](copy-usage_notes-copy-from-json.md)
+ [COPY depuis les formats de données en colonnes](copy-usage_notes-copy-from-columnar.md)
+ [Chaînes DATEFORMAT et TIMEFORMAT](r_DATEFORMAT_and_TIMEFORMAT_strings.md)
+ [Utilisation de la reconnaissance automatique avec DATEFORMAT et TIMEFORMAT](automatic-recognition.md)

# Autorisations d'accès à d'autres AWS ressources
<a name="copy-usage_notes-access-permissions"></a>

 Pour déplacer des données entre votre cluster et une autre AWS ressource, telle qu'Amazon S3, Amazon DynamoDB, Amazon EMR ou Amazon EC2, votre cluster doit être autorisé à accéder à la ressource et à effectuer les actions nécessaires. Par exemple, pour charger des données depuis Amazon S3, la commande COPY doit disposer de l’accès LIST au compartiment et de l’accès GET pour les objets du compartiment. Pour plus d’informations sur les autorisations minimales, consultez [Autorisations IAM pour les commandes COPY, UNLOAD et CREATE LIBRARY](#copy-usage_notes-iam-permissions).

Pour obtenir l’autorisation d’accéder à la ressource, votre cluster doit être authentifié. Vous pouvez choisir l’une des méthodes d’authentification suivantes : 
+ [Contrôle d’accès basé sur les rôles](#copy-usage_notes-access-role-based)— Pour le contrôle d'accès basé sur les rôles, vous spécifiez un rôle Gestion des identités et des accès AWS (IAM) que votre cluster utilise pour l'authentification et l'autorisation. Pour protéger vos AWS informations d'identification et vos données sensibles, nous vous recommandons vivement d'utiliser l'authentification basée sur les rôles.
+ [Contrôle d’accès basé sur les clés](#copy-usage_notes-access-key-based)— Pour le contrôle d'accès par clé, vous fournissez les informations d' AWS accès (ID de clé d'accès et clé d'accès secrète) d'un utilisateur sous forme de texte brut.

## Contrôle d’accès basé sur les rôles
<a name="copy-usage_notes-access-role-based"></a>

Avec un <a name="copy-usage_notes-access-role-based.phrase"></a>contrôle d’accès basé sur les rôles, votre cluster assume temporairement un rôle IAM en votre nom. Puis, selon les autorisations accordées au rôle, votre cluster peut accéder aux ressources AWS requises.

La création d’un *rôle* IAM est similaire à l’octroi d’autorisations à un utilisateur, car il s’agit d’une identité AWS avec des politiques d’autorisation qui déterminent ce que l’identité peut et ne peut pas faire dans AWS. En revanche, plutôt que d’être associé de manière unique à un utilisateur, un rôle peut être assumé par toute entité le nécessitant. En outre, aucune information d’identification (mot de passe ou clés d’accès) n’est associée à celui-ci. Au lieu de cela, si un rôle est associé à un cluster, les clés d’accès sont créées de manière dynamique et fournies au cluster.

Nous vous recommandons d'utiliser le contrôle d'accès basé sur les rôles, car il permet un contrôle plus sûr et plus précis de l'accès aux AWS ressources et aux données utilisateur sensibles, en plus de protéger vos informations d'identification. AWS 

L’authentification basée sur les rôles offre les avantages suivants :
+ Vous pouvez utiliser les outils IAM AWS standard pour définir un rôle IAM et l'associer à plusieurs clusters. Lorsque vous modifiez la stratégie d’accès d’un rôle, les modifications sont automatiquement appliquées à tous les clusters qui utilisent ce rôle.
+ Vous pouvez définir des politiques IAM détaillées qui accordent des autorisations à des clusters et à des utilisateurs de base de données spécifiques pour accéder à des AWS ressources et à des actions spécifiques.
+ Votre cluster obtient les informations d’identification de séance temporaires au moment de l’exécution et les actualise en fonction des besoins jusqu’à la fin de l’opération. Si vous utilisez les informations d’identification temporaires basées sur la clé, l’opération échoue si celles-ci expirent avant la fin.
+ Votre ID de clé d’accès et ID de clé d’accès secrète ne sont pas stockés ou transmis dans votre code SQL.

Pour utiliser le contrôle d’accès basé sur les rôles, vous devez d’abord créer un rôle IAM à l’aide du type de rôle de service Amazon Redshift, puis attacher le rôle à votre cluster. Le rôle doit avoir, au minimum, les autorisations répertoriées dans [Autorisations IAM pour les commandes COPY, UNLOAD et CREATE LIBRARY](#copy-usage_notes-iam-permissions). Pour savoir comment créer un rôle IAM et l'associer à votre cluster, consultez la section [Autoriser Amazon Redshift à accéder à AWS d'autres services en votre nom dans le guide](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) de gestion Amazon *Redshift*.

Vous pouvez ajouter un rôle à un cluster ou afficher les rôles associés à un cluster à l’aide de la console de gestion, de la CLI ou de l’API Amazon Redshift. Pour plus d’informations, consultez [Associer un rôle IAM à un cluster](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html) dans le *Guide de gestion Amazon Redshift*.

Lorsque vous créez un rôle IAM, IAM renvoie un Amazon Resource Name (ARN) pour le rôle. Pour spécifier un rôle IAM, indiquez l’ARN de rôle avec le paramètre [Utilisation du paramètre IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role) ou le paramètre [Utilisation du paramètre CREDENTIALS](copy-parameters-authorization.md#copy-credentials). 

Par exemple, supposons que le rôle suivant est attaché au cluster.

```
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
```

L’exemple suivant de commande COPY utilise le paramètre IAM\$1ROLE avec l’ARN dans l’exemple précédent pour l’authentification et l’accès à Amazon S3.

```
copy customer from 's3://amzn-s3-demo-bucket/mydata'  
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

L’exemple suivant de commande COPY utilise le paramètre CREDENTIALS pour spécifier le rôle IAM.

```
copy customer from 's3://amzn-s3-demo-bucket/mydata' 
credentials 
'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

En outre, un super-utilisateur peut accorder le privilège ASSUMEROLE à des utilisateurs et groupes de base de données afin de fournir l’accès à un rôle pour les opérations COPY. Pour plus d'informations, consultez [GRANT](r_GRANT.md).

## Contrôle d’accès basé sur les clés
<a name="copy-usage_notes-access-key-based"></a>

Avec le <a name="copy-usage_notes-access-key-based.phrase"></a>contrôle d'accès basé sur les clés, vous fournissez l'ID de clé d'accès et la clé d'accès secrète à un utilisateur IAM autorisé à accéder aux AWS ressources contenant les données. Vous pouvez utiliser les paramètres [Utilisation des paramètres ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id) ensemble ou le paramètre [Utilisation du paramètre CREDENTIALS](copy-parameters-authorization.md#copy-credentials).

**Note**  
Nous vous recommandons vivement d’utiliser un rôle IAM pour l’authentification au lieu de fournir une clé d’accès secrète et un ID de clé d’accès en texte brut. Si vous optez pour le contrôle d'accès par clé, n'utilisez jamais les informations d'identification de votre AWS compte (root). Créez toujours un utilisateur IAM et fournissez l’ID de clé d’accès et la clé d’accès secrète de cet utilisateur. Pour connaître les étapes à suivre pour créer un utilisateur IAM, consultez [Création d’un utilisateur IAM dans votre compte AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html).

Pour vous authentifier à l'aide de ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY, remplacez et par l'ID de clé d'accès *<access-key-id>* et la clé *<secret-access-key>* d'accès secrète complète d'un utilisateur autorisé, comme indiqué ci-dessous. 

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>';
```

Pour vous authentifier à l'aide du paramètre CREDENTIALS, remplacez *<access-key-id>* et *<secret-access-key>* par l'ID de clé d'accès d'un utilisateur autorisé et la clé d'accès secrète complète, comme indiqué ci-dessous.

```
CREDENTIALS
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';
```

L’utilisateur IAM doit avoir, au minimum, les autorisations répertoriées dans [Autorisations IAM pour les commandes COPY, UNLOAD et CREATE LIBRARY](#copy-usage_notes-iam-permissions).

### informations d’identification de sécurité temporaires
<a name="r_copy-temporary-security-credentials"></a>

 Si vous utilisez un contrôle d’accès basé sur la clé, vous pouvez limiter davantage l’accès dont disposent les utilisateurs à vos données en utilisant des informations d’identification de sécurité temporaires. L’authentification basée sur les rôles utilise automatiquement des informations d’identification temporaires. 

**Note**  
Nous vous recommandons vivement d’utiliser [role-based access control](#copy-usage_notes-access-role-based.phrase) plutôt que de créer des identifiants temporaires et de fournir un ID de clé d’accès et une clé d’accès secrète sous forme de texte brut. Le contrôle d’accès basé sur les rôles utilise automatiquement des informations d’identification temporaires. 

Les informations d’identification de sécurité temporaires offrent une sécurité améliorée parce qu’elles sont de courte durée et ne peuvent pas être réutilisées après leur expiration. L’ID de clé d’accès et la clé d’accès secrète générés avec le jeton ne peuvent pas être utilisés sans le jeton et un utilisateur qui dispose de ces informations d’identification de sécurité temporaires peut accéder à vos ressources uniquement jusqu’à ce que les informations d’identification expirent.

Pour accorder aux utilisateurs un accès temporaire à vos ressources, vous devez appeler les opérations d'API AWS Security Token Service (AWS STS). Les opérations AWS STS d'API renvoient des informations d'identification de sécurité temporaires composées d'un jeton de sécurité, d'un identifiant de clé d'accès et d'une clé d'accès secrète. Vous pouvez délivrer des informations d’identification de sécurité temporaires aux utilisateurs qui doivent accéder temporairement à vos ressources. Ces utilisateurs peuvent être des utilisateurs IAM existants, ou bien ils peuvent être des utilisateurs non-AWS . Pour plus d’informations sur les informations d’identification de sécurité temporaires, consultez [Informations d’identification de sécurité temporaires](https://docs.aws.amazon.com/STS/latest/UsingSTS/Welcome.html) dans le Guide de l’utilisateur IAM.

Vous pouvez utiliser les paramètres [Utilisation des paramètres ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id) ensemble avec le paramètre [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token) ou le paramètre [Utilisation du paramètre CREDENTIALS](copy-parameters-authorization.md#copy-credentials). Vous devez également fournir l’ID de clé d’accès et la clé d’accès secrète qui ont été fournis avec le jeton.

Pour vous authentifier à l'aide de ACCESS\$1KEY\$1ID, SECRET\$1ACCESS\$1KEY et SESSION\$1TOKEN, remplacez et comme indiqué ci-dessous. *<temporary-access-key-id>* *<temporary-secret-access-key>* *<temporary-token>* 

```
ACCESS_KEY_ID '<temporary-access-key-id>'
SECRET_ACCESS_KEY '<temporary-secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

Pour vous authentifier à l’aide de CREDENTIALS, ajoutez `session_token=<temporary-token>` dans la chaîne d’informations d’identification, comme indiqué ci-après. 

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>';
```

Une commande COPY avec des informations d’identification de sécurité temporaires est indiquée dans l’exemple suivant.

```
copy table-name
from 's3://objectpath'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>';
```

L’exemple suivant charge la table LISTING à l’aide des informations d’identification temporaires et de chiffrement de fichier.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>'
master_symmetric_key '<root-key>'
encrypted;
```

L’exemple suivant charge la table LISTING à l’aide du paramètre CREDENTIALS avec des informations d’identification temporaires et de chiffrement de fichier.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
credentials 
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>;master_symmetric_key=<root-key>'
encrypted;
```

**Important**  
Les informations d’identification de sécurité temporaires doivent être valides pour toute la durée de l’opération COPY ou UNLOAD. Si les informations d’identification de sécurité temporaires arrivent à expiration au cours de l’opération, la commande échoue et la transaction est annulée. Par exemple, si les informations d’identification de sécurité temporaires expirent au bout de 15 minutes et que l’opération COPY dure une heure, cette dernière échouera avant d’être terminée. Si vous utilisez l’accès basé sur les rôles, les informations d’identification de sécurité temporaires sont automatiquement actualisées jusqu’à la fin de l’opération.

## Autorisations IAM pour les commandes COPY, UNLOAD et CREATE LIBRARY
<a name="copy-usage_notes-iam-permissions"></a>

Le rôle IAM ou l’utilisateur référencé par le paramètre CREDENTIALS doit disposer, au minimum, des autorisations suivantes :
+ Pour exécuter la commande COPY depuis Amazon S3, l’autorisation d’exécuter LIST sur le compartiment Amazon S3 et d’exécuter GET sur les objets Amazon S3 en cours de chargement, ainsi que le fichier manifeste, le cas échéant.
+ Pour COPIER depuis Amazon S3, Amazon EMR et des hôtes distants (SSH) avec des données au format JSON, autorisation de LISTER et d'OBTENIR le fichier sur JSONPaths Amazon S3, le cas échéant. 
+ Pour exécuter la commande COPY depuis DynamoDB, l’autorisation d’exécuter SCAN et DESCRIBE sur la table DynamoDB qui est en cours de chargement. 
+ Pour exécuter la commande COPY depuis un cluster Amazon EMR, l’autorisation pour l’action `ListInstances` sur le cluster Amazon EMR. 
+ Pour exécuter la commande UNLOAD sur Amazon S3, les autorisations d’exécuter GET, LIST et PUT pour le compartiment Amazon S3 vers lequel les fichiers de données sont en cours de déchargement.
+ Pour exécuter la commande CREATE LIBRARY depuis Amazon S3, l’autorisation d’exécuter LIST sur le compartiment Amazon S3 et d’exécuter GET sur les objets Amazon S3 qui sont importés

**Note**  
Si vous recevez le message d’erreur `S3ServiceException: Access Denied`, lorsque vous exécutez une commande COPY, UNLOAD ou CREATE LIBRARY, votre cluster ne dispose pas des autorisations d’accès appropriées pour Amazon S3.

Vous pouvez gérer les autorisations IAM en attachant une politique IAM à un rôle IAM attaché à votre cluster, à votre utilisateur ou au groupe auquel appartient votre utilisateur. Par exemple, la politique gérée par `AmazonS3ReadOnlyAccess` accorde les autorisations LIST et GET aux ressources Amazon S3. Pour plus d’informations sur les politiques IAM, consultez [Gestion des politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) dans le *Guide de l’utilisateur IAM*. 

# Utilisation de COPY avec des alias de point d’accès Amazon S3
<a name="copy-usage_notes-s3-access-point-alias"></a>

COPY prend en charge les alias de point d’accès Amazon S3. Pour plus d’informations, consultez [Utilisation d’un alias de type compartiment pour votre point d’accès](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.

# Chargement de données multioctets à partir d’Amazon S3
<a name="copy-usage_notes-multi-byte"></a>

Si vos données incluent des caractères non-ASCII codés sur plusieurs octets (par exemple, les caractères chinois ou cyrilliques), vous devez charger les données dans des colonnes VARCHAR. Le type de données VARCHAR prend en charge les caractères UTF-8 codés sur quatre octets, mais le type de données CHAR n’accepte que les caractères ASCII codés sur un octet. Vous ne pouvez pas charger de caractères codés sur cinq octets ou plus dans des tables Amazon Redshift. Pour plus d'informations, consultez [Caractères multioctets](c_Supported_data_types.md#c_Supported_data_types-multi-byte-characters). 

# Chargement d’une colonne avec le type de données GEOMETRY ou GEOGRAPHY
<a name="copy-usage_notes-spatial-data"></a>

Vous ne pouvez exécuter la commande COPY vers des colonnes `GEOMETRY` ou `GEOGRAPHY` qu’à partir de données d’un fichier texte séparé par des caractères, tel qu’un fichier CSV. Les données doivent être sous la forme hexadécimale du format well-known binary (WKB ou EWKB) ou du format well-known text (WKT ou EWKT) et correspondre à la taille maximale d’une ligne d’entrée unique à la commande COPY. Pour plus d'informations, consultez [COPY](r_COPY.md). 

Pour plus d’informations sur la façon de charger à partir d’un fichier de formes, consultez [Chargement d’un shapefile dans Amazon Redshift](spatial-copy-shapefile.md).

Pour plus d’informations sur le type de données `GEOMETRY` ou `GEOGRAPHY`, consultez [Interrogation des données spatiales dans Amazon Redshift](geospatial-overview.md).

# Chargement du type de données HLLSKETCH
<a name="copy-usage_notes-hll"></a>

Vous pouvez copier les esquisses HLL uniquement dans un format fragmenté ou dense pris en charge par Amazon Redshift. Pour utiliser la commande COPY sur HyperLogLog des esquisses, utilisez le format Base64 pour les HyperLogLog esquisses denses et le format JSON pour les esquisses clairsemées. HyperLogLog Pour de plus amples informations, veuillez consulter [HyperLogLog fonctions](hyperloglog-functions.md). 

L’exemple suivant importe les données d’un fichier CSV dans une table à l’aide des commandes CREATE TABLE et COPY. Tout d’abord, l’exemple crée la table `t1` à l’aide de la commande CREATE TABLE.

```
CREATE TABLE t1 (sketch hllsketch, a bigint);
```

Ensuite, il utilise la commande COPY pour importer des données d’un fichier CSV dans la table `t1`. 

```
COPY t1 FROM s3://amzn-s3-demo-bucket/unload/' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' CSV;
```

# Chargement d’une colonne avec le type de données VARBYTE
<a name="copy-usage-varbyte"></a>

Vous pouvez charger des données à partir d’un fichier au format CSV, Parquet et ORC. Pour CSV, les données sont chargées à partir d’un fichier en représentation hexadécimale des données VARBYTE. Vous ne pouvez pas charger les données VARBYTE avec l’option `FIXEDWIDTH`. L’option `ADDQUOTES` ou `REMOVEQUOTES` de COPY n’est pas prise en charge. Une colonne VARBYTE ne peut pas être utilisée comme colonne de partition. 

# Erreurs survenant lors de la lecture de plusieurs fichiers
<a name="copy-usage_notes-multiple-files"></a>

La commande COPY est atomique et transactionnelle. En d’autres termes, même lorsque la commande COPY lit des données de plusieurs fichiers, l’ensemble du processus est considéré comme une seule opération. Si la commande COPY rencontre une erreur de lecture d’un fichier, elle refait automatiquement des tentatives jusqu’à ce que le processus expire (voir [statement\$1timeout](r_statement_timeout.md)) ou si les données ne peuvent pas être téléchargées depuis Amazon S3 pendant une période prolongée (entre 15 et 30 minutes), en s’assurant que chaque fichier est chargé une seule fois. En cas d’échec de la commande COPY, l’ensemble de la transaction est annulé et toutes les modifications sont annulées. Pour plus d’informations sur la gestion des erreurs de chargement, consultez [Résolution des problèmes de chargement de données](t_Troubleshooting_load_errors.md). 

Une fois qu’une commande COPY est lancée avec succès, elle n’échoue pas si la séance s’arrête, par exemple lorsque le client se déconnecte. Toutefois, si la commande COPY se trouve dans bloc de transaction BEGIN … END qui ne se termine pas, car la séance s’arrête, toute la transaction, y compris la commande COPY, est annulée. Pour plus d’informations sur les transactions, consultez [BEGIN](r_BEGIN.md).

# Exécution de la commande COPY à partir du format JSON
<a name="copy-usage_notes-copy-from-json"></a>

La structure des données JSON se compose d’un ensemble d’objets ou de tableaux. Un *objet* JSON commence et finit par des accolades, et contient une collection non ordonnée de paires nom-valeur. Chaque paire de nom et de valeur est séparée par deux points, et les paires sont séparées par des virgules. Le nom est une chaîne entre guillemets doubles. Les guillemets doivent être des guillemets simples (0x22), ni culbutés, ni courbes. 

Un *tableau* JSON commence et finit par des crochets, et contient une collection ordonnée de valeurs séparées par des virgules. Une valeur peut être une chaîne comprise entre des guillemets doubles, un nombre, une valeur booléenne true ou false, null, un objet JSON ou tableau. 

Les tableaux et objets JSON peuvent être imbriqués, ce qui permet d’obtenir une structure de données hiérarchique. L’exemple suivant illustre une structure de données JSON avec deux objets valides. 

```
{
    "id": 1006410,
    "title": "Amazon Redshift Database Developer Guide"
}
{
    "id": 100540,
    "name": "Amazon Simple Storage Service User Guide"
}
```

L’exemple suivant illustre les mêmes données sous forme de deux tableaux JSON.

```
[
    1006410,
    "Amazon Redshift Database Developer Guide"
]
[
    100540,
    "Amazon Simple Storage Service User Guide"
]
```

## Options COPY pour JSON
<a name="copy-usage-json-options"></a>

Vous pouvez spécifier les options suivantes lorsque vous utilisez la commande COPY avec des données au format JSON : 
+ `'auto' ` – La commande COPY charge automatiquement les champs à partir du fichier JSON. 
+ `'auto ignorecase'` – La commande COPY charge automatiquement les champs à partir du fichier JSON tout en ignorant la casse des noms de champs.
+ `s3://jsonpaths_file`— COPY utilise un JSONPaths fichier pour analyser les données source JSON. Un *JSONPaths fichier* est un fichier texte qui contient un seul objet JSON dont le nom est `"jsonpaths"` associé à un tableau d' JSONPath expressions. Si le nom est une chaîne autre que`"jsonpaths"`, COPY utilise l'`'auto'`argument au lieu du JSONPaths fichier. 

Pour des exemples montrant comment charger des données à l'aide de `'auto'``'auto ignorecase'`, ou d'un JSONPaths fichier, et à l'aide d'objets ou de tableaux JSON, consultez[Copier à partir d’exemples JSON](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json). 

## JSONPath option
<a name="copy-usage-json-options"></a>

Dans la syntaxe COPY d'Amazon Redshift, une JSONPath expression indique le chemin explicite vers un élément de nom unique dans une structure de données hiérarchique JSON, en utilisant soit la notation entre crochets, soit la notation par points. Amazon Redshift ne prend en charge aucun JSONPath élément, tel que les caractères génériques ou les expressions de filtre, susceptibles de donner lieu à un chemin ambigu ou à plusieurs éléments de nom. Par conséquent, Amazon Redshift ne peut pas analyser des structures de données complexes, à plusieurs niveaux.

Voici un exemple de JSONPaths fichier contenant des JSONPath expressions utilisant la notation entre crochets. Le symbole du dollar (\$1) représente la structure de niveau racine. 

```
{
    "jsonpaths": [
       "$['id']",
       "$['store']['book']['title']",
	"$['location'][0]" 
    ]
}
```

 Dans l’exemple précédent, `$['location'][0]` fait référence au premier élément d’un tableau. JSON utilise l’indexation de tableau de base zéro. Les index du tableau doivent être des nombres entiers positifs (supérieurs ou égaux à zéro).

L'exemple suivant montre le JSONPaths fichier précédent en utilisant la notation par points. 

```
{
    "jsonpaths": [
       "$.id",
       "$.store.book.title",
	"$.location[0]"
    ]
}
```

Vous ne pouvez pas combiner la notation d’accolades et la notation de points dans le tableau `jsonpaths`. Les accolades peuvent être utilisées dans la notation d’accolades et la notation de points pour faire référence à un élément du tableau. 

Lorsque vous utilisez la notation par points, les JSONPath expressions ne peuvent pas contenir les caractères suivants : 
+ Guillemet anglais (’) 
+ Point ( . ) 
+ Crochets ([ ]), sauf pour faire référence à un élément de tableau 

Si la valeur de la paire nom-valeur référencée par une JSONPath expression est un objet ou un tableau, l'objet ou le tableau entier est chargé sous forme de chaîne, y compris les accolades. Par exemple, supposons que vos données JSON contiennent l’objet suivant. 

```
{
    "id": 0,
    "guid": "84512477-fa49-456b-b407-581d0d851c3c",
    "isActive": true,
    "tags": [
        "nisi",
        "culpa",
        "ad",
        "amet",
        "voluptate",
        "reprehenderit",
        "veniam"
    ],
    "friends": [
        {
            "id": 0,
            "name": "Martha Rivera"
        },
        {
            "id": 1,
            "name": "Renaldo"
        }
    ]
}
```

L' JSONPath expression renvoie `$['tags']` ensuite la valeur suivante. 

```
"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]" 
```

L' JSONPath expression renvoie `$['friends'][1]` ensuite la valeur suivante. 

```
"{"id": 1,"name": "Renaldo"}" 
```

Chaque JSONPath expression du `jsonpaths` tableau correspond à une colonne de la table cible Amazon Redshift. L’ordre des éléments du tableau `jsonpaths` doit correspondre à celui des colonnes de la table cible ou de la liste de colonnes, si une liste de colonnes est utilisée. 

Pour des exemples montrant comment charger des données à l'aide de l'`'auto'`argument ou d'un JSONPaths fichier, et à l'aide d'objets ou de tableaux JSON, consultez[Copier à partir d’exemples JSON](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json). 

Pour plus d’informations sur la copie de plusieurs fichiers JSON, consultez [Utilisation d’un manifeste pour spécifier les fichiers de données](loading-data-files-using-manifest.md).

## Caractères d’échappement dans JSON
<a name="copy-usage-json-escape-characters"></a>

La commande COPY charge `\n` comme un caractère de saut de ligne et charge `\t` comme un caractère de tabulation. Pour charger une barre oblique inverse, précédez-la d’une barre oblique inverse ( `\\` ).

Par exemple, supposons que le JSON suivant se trouve dans un fichier nommé `escape.json` dans le compartiment `s3://amzn-s3-demo-bucket/json/`.

```
{
  "backslash": "This is a backslash: \\",
  "newline": "This sentence\n is on two lines.",
  "tab": "This sentence \t contains a tab."
}
```

Exécutez les commandes suivantes pour créer la table ESCAPES et charger le fichier JSON.

```
create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35));

copy escapes from 's3://amzn-s3-demo-bucket/json/escape.json' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as json 'auto';
```

Interrogez la table ESCAPES pour afficher les résultats.

```
select * from escapes;

       backslash        |      newline      |               tab
------------------------+-------------------+----------------------------------
 This is a backslash: \ | This sentence     | This sentence    contains a tab.
                        :  is on two lines.
(1 row)
```

## Perte de précision numérique
<a name="copy-usage-json-rounding"></a>

Vous pouvez perdre de la précision lors du chargement de nombres à partir de fichiers de données en format JSON dans une colonne qui est définie comme un type de données numérique. Certaines valeurs en virgule flottantes ne seront pas représentées de manière exacte sur les systèmes informatiques. De ce fait, des données que vous copiez depuis un fichier JSON sont susceptibles de ne pas être arrondies comme vous vous y attendez. Pour éviter une perte de précision, nous recommandons l’utilisation d’une des autres solutions suivantes :
+ Représenter le nombre sous la forme d’une chaîne en plaçant la valeur entre guillemets doubles.
+ Utiliser [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) pour arrondir le nombre au lieu de le tronquer.
+ Plutôt que des fichiers JSON ou Avro, utiliser des fichiers CSV, délimités par un caractère, ou des fichiers texte à largeur fixe.

# COPY depuis les formats de données en colonnes
<a name="copy-usage_notes-copy-from-columnar"></a>

COPY peut charger les données depuis Amazon S3 dans les formats en colonnes suivants :
+ ORC
+ Parquet

Pour des exemples d’utilisation de la commande COPY à partir de formats de données en colonnes, consultez [Exemples de commandes COPY](r_COPY_command_examples.md).

La commande COPY prend en charge les données mises en forme en colonnes avec les considérations suivantes :
+ Le compartiment Amazon S3 doit se trouver dans la même AWS région que la base de données Amazon Redshift. 
+ Pour accéder à vos données Amazon S3 via un point de terminaison de VPC, configurez l’accès à l’aide de politiques IAM et de rôles IAM, comme décrit dans [Utilisation d’Amazon Redshift Spectrum avec le routage VPC amélioré](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html) dans le *Guide de gestion Amazon Redshift*. 
+ La commande COPY n’applique pas automatiquement l’encodage de compression. 
+ Seuls les paramètres COPY suivants sont pris en charge : 
  + [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars) lors de la copie à partir d’un fichier ORC ou Parquet.
  + [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
  + [FROM](copy-parameters-data-source-s3.md#copy-parameters-from)
  + [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role)
  + [CREDENTIALS](copy-parameters-authorization.md#copy-credentials)
  + [STATUPDATE ](copy-parameters-data-load.md#copy-statupdate)
  + [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
  + [EXPLICIT\$1IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ Si la commande COPY rencontre une erreur lors du chargement, la commande échoue. ACCEPTANYDATE et MAXERROR ne sont pas pris en charge pour les types de données en colonnes.
+ Les messages d’erreur sont envoyés au client SQL. Certaines erreurs sont consignées dans STL\$1LOAD\$1ERRORS et STL\$1ERROR.
+ La commande COPY insère les valeurs dans les colonnes de la table cible dans le même ordre que celui où les colonnes se trouvent dans les fichiers de données en colonnes. Le nombre de colonnes de la table cible et le nombre de colonnes du fichier de données doivent correspondre.
+ Si le fichier que vous spécifiez pour l’opération COPY inclut l’une des extensions ci-après, nous décompressons les données sans avoir besoin d’ajouter des paramètres : 
  + `.gz`
  + `.snappy`
  + `.bz2`
+ La commande COPY à partir des formats de fichiers Parquet et ORC utilise Redshift Spectrum et l’accès au compartiment. Pour utiliser COPY pour ces formats, assurez-vous qu'aucune politique IAM ne bloque l'utilisation d'Amazon S3 URLs présigné. Les fichiers présignés URLs générés par Amazon Redshift sont valides pendant 1 heure afin qu'Amazon Redshift ait suffisamment de temps pour charger tous les fichiers depuis le compartiment Amazon S3. Une URL présignée unique est générée pour chaque fichier scanné par COPY à partir de formats de données en colonnes. Pour les stratégies de compartiment qui incluent une action `s3:signatureAge`, veillez à définir la valeur sur au moins 3 600 000 millisecondes. Pour plus d’informations, consultez [Utilisation d’Amazon Redshift Spectrum avec le routage VPC amélioré](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html).
+ Le paramètre REGION n’est pas pris en charge avec COPY à partir de formats de données en colonnes. Même si votre compartiment Amazon S3 et votre base de données se trouvent dans le même emplacement Région AWS, vous pouvez rencontrer une erreur, telle que l'argument REGION n'est pas pris en charge pour le COPY basé sur PARQUET.
+ COPY à partir de formats colonnaires prend désormais en charge la mise à l’échelle de la simultanéité. Pour activer la mise à l’échelle de la simultanéité, consultez [Configuration des files d’attente de mise à l’échelle de la simultanéité](https://docs.aws.amazon.com/redshift/latest/dg/concurrency-scaling.html#concurrency-scaling-queues).

# Chaînes DATEFORMAT et TIMEFORMAT
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings"></a>

La commande COPY utilise les options DATEFORMAT et TIMEFORMAT pour analyser les valeurs de date et d’heure de vos données sources. DATEFORMAT et TIMEFORMAT sont des chaînes formatées qui doivent correspondre au format des valeurs de date et d’heure de vos données source. Par exemple, une commande COPY chargeant des données source avec la valeur de date `Jan-01-1999` doit inclure la chaîne DATEFORMAT suivante :

```
COPY ...
            DATEFORMAT AS 'MON-DD-YYYY'
```

Pour plus d’informations sur la gestion des conversions de données COPY, consultez [Paramètres de conversion de données](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html). 

Les chaînes DATEFORMAT et TIMEFORMAT peuvent contenir des séparateurs date/heure (tels que « `-` », « `/` » ou « `:` »), ainsi que les formats datepart et timepart présentés dans la table suivante.

**Note**  
Si vous ne pouvez pas faire correspondre le format de vos valeurs de date ou d’heure avec les dateparts et timeparts suivants, ou si vos valeurs de date et d’heure utilisent des formats différents les uns des autres, utilisez l’argument `'auto'` avec le paramètre DATEFORMAT ou TIMEFORMAT. L’argument `'auto'` reconnaît plusieurs formats qui ne sont pas pris en charge lors de l’utilisation d’une chaîne DATEFORMAT ou TIMEFORMAT. Pour plus d’informations, consultez [Utilisation de la reconnaissance automatique avec DATEFORMAT et TIMEFORMAT](automatic-recognition.md).

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

Le format de date par défaut est YYYY-MM-DD. Le format d'horodatage sans fuseau horaire (TIMESTAMP) par défaut est HH:MI:SS. YYYY-MM-DD L'horodatage par défaut avec fuseau horaire (TIMESTAMPTZ) est YYYY-MM-DD HH:MI:SSOF, où OF est le décalage par rapport à UTC (par exemple, - 8:00. Vous ne pouvez pas inclure de spécificateur de fuseau horaire (TZ, tz ou OF) dans le timeformat\$1string. Le champ des secondes (SS) prend également en charge les fractions de secondes jusqu'à un niveau de détail de la microseconde. Pour charger les données TIMESTAMPTZ qui sont dans un format différent du format par défaut, spécifiez « auto ».

Vous trouverez ci-dessous des exemples de dates ou d’heures que vous pouvez trouver dans vos données sources, ainsi que les chaînes DATEFORMAT ou TIMEFORMAT correspondantes.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

## Exemple
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings-examples"></a>

Pour obtenir un exemple d’utilisation de TIMEFORMAT, consultez [Charger un horodatage ou une datation](r_COPY_command_examples.md#r_COPY_command_examples-load-a-time-datestamp).

# Utilisation de la reconnaissance automatique avec DATEFORMAT et TIMEFORMAT
<a name="automatic-recognition"></a>

Si vous spécifiez `'auto'` comme argument pour le paramètre DATEFORMAT ou TIMEFORMAT, Amazon Redshift détecte et convertit automatiquement le format de date ou d’heure de vos données sources. Vous en trouverez un exemple ci-dessous.

```
copy favoritemovies from 'dynamodb://ProductCatalog' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
dateformat 'auto';
```

Lorsqu’elle est utilisée avec l’argument `'auto'` pour DATEFORMAT et TIMEFORMAT, la commande COPY reconnaît et convertit les formats de date et d’heure répertoriés dans la table de [Chaînes DATEFORMAT et TIMEFORMATExemple](r_DATEFORMAT_and_TIMEFORMAT_strings.md). En outre, l’argument `'auto'` reconnaît les formats suivants qui ne sont pas pris en charge lors de l’utilisation d’une chaîne DATEFORMAT et TIMEFORMAT.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/automatic-recognition.html)

La reconnaissance automatique ne prend pas en charge epochsecs et epochmillisecs.

Pour vérifier si une valeur de date ou d’horodatage est automatiquement convertie, utilisez une fonction CAST pour tenter de convertir la chaîne en une valeur de date ou d’horodatage. Par exemple, les commandes suivantes testent la valeur d’horodatage `'J2345678 04:05:06.789'` :

```
create table formattest (test char(21));
insert into formattest values('J2345678 04:05:06.789');
select test, cast(test as timestamp) as timestamp, cast(test as date) as date from formattest;

        test          |      timestamp      |	date
----------------------+---------------------+------------
J2345678 04:05:06.789   1710-02-23 04:05:06	1710-02-23
```

Si les données source d’une colonne DATE comprennent des informations sur l’heure, le composant est tronqué. Si les données source d’une colonne TIMESTAMP omettent des informations sur l’heure, 00:00:00 est utilisé comme composant d’heure.

# Exemples de commandes COPY
<a name="r_COPY_command_examples"></a>

**Note**  
Ces exemples contiennent des sauts de ligne pour faciliter la lecture. N’incluez pas de sauts de ligne, ni d’espaces dans votre chaîne *credentials-args*.

**Topics**
+ [Charger FAVORITEMOVIES depuis une table DynamoDB](#r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table)
+ [Charger la table LISTING depuis un compartiment Amazon S3](#r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket)
+ [Charger la table LISTING depuis un cluster Amazon EMR](#copy-command-examples-emr)
+ [Example: COPY from Amazon S3 using a manifest](#copy-command-examples-manifest)
+ [Charger la table LISTING à partir d’un fichier séparés par une barre verticale (délimiteur par défaut)](#r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter)
+ [Charger LISTING en utilisant des données en colonnes en format Parquet](#r_COPY_command_examples-load-listing-from-parquet)
+ [Chargement du LISTING à l’aide de données en colonnes au format ORC](#r_COPY_command_examples-load-listing-from-orc)
+ [Charger la table EVENT avec des options](#r_COPY_command_examples-load-event-with-options)
+ [Charger la table VENUE à partir d’un fichier de données de largeur fixe](#r_COPY_command_examples-load-venue-from-a-fixed-width-data-file)
+ [Charger la table CATEGORY à partir d’un fichier CSV](#load-from-csv)
+ [Charger la table VENUE avec des valeurs EXPLICIT pour une colonne IDENTITY](#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column)
+ [Charger la table TIME à partir d’un fichier GZIP séparé par une barre verticale](#r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file)
+ [Charger un horodatage ou une datation](#r_COPY_command_examples-load-a-time-datestamp)
+ [Charger les données d’un fichier avec des valeurs par défaut](#r_COPY_command_examples-load-data-from-a-file-with-default-values)
+ [Exécuter la commande COPY des données avec l’option ESCAPE](#r_COPY_command_examples-copy-data-with-the-escape-option)
+ [Copier à partir d’exemples JSON](#r_COPY_command_examples-copy-from-json)
+ [Copier depuis des exemples Avro](#r_COPY_command_examples-copy-from-avro)
+ [Préparation de fichiers pour la commande COPY avec l’option ESCAPE](#r_COPY_preparing_data)
+ [Chargement d’un shapefile dans Amazon Redshift](#copy-example-spatial-copy-shapefile)
+ [Commande COPY avec l’option NOLOAD](#r_COPY_command_examples-load-noload-option)
+ [Commande COPY avec un délimiteur multioctet et l’option ENCODING](#r_COPY_command_examples-load-encoding-multibyte-delimiter-option)

## Charger FAVORITEMOVIES depuis une table DynamoDB
<a name="r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table"></a>

*Ils AWS SDKs incluent un exemple simple de création d'une table DynamoDB appelée Movies.* (Pour cet exemple, consultez [Mise en route avec DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html).) L’exemple suivant charge la table Amazon Redshift MOVIES avec les données provenant de la table DynamoDB. La table Amazon Redshift doit déjà exister dans la base de données.

```
copy favoritemovies from 'dynamodb://Movies'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
readratio 50;
```

## Charger la table LISTING depuis un compartiment Amazon S3
<a name="r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket"></a>

L’exemple suivant charge la table LISTING depuis un compartiment Amazon S3. La commande COPY charge tous les fichiers dans le dossier `/data/listing/`.

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listing/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Charger la table LISTING depuis un cluster Amazon EMR
<a name="copy-command-examples-emr"></a>

L’exemple suivant charge la table SALES avec les données délimités par des tabulations des fichiers compressés lzop dans un cluster Amazon EMR. La commande COPY charge tous les fichiers du dossier `myoutput/` qui commencent par `part-`.

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '\t' lzop;
```

L’exemple suivant charge la table SALES avec des données au format JSON dans un cluster Amazon EMR. La commande COPY charge tous les fichiers du dossier `myoutput/json/`.

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/json/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON 's3://amzn-s3-demo-bucket/jsonpaths.txt';
```

## Utilisation d’un manifeste pour spécifier les fichiers de données
<a name="copy-command-examples-manifest"></a>

Vous pouvez utiliser un manifeste pour vous assurer que votre commande COPY charge tous les fichiers requis et uniquement les fichiers requis, à partir d’Amazon S3. Vous pouvez également utiliser un manifeste lorsque vous avez besoin de charger plusieurs fichiers de différents compartiments ou des fichiers qui ne partagent pas le même préfixe. 

Par exemple, supposons que vous devez charger les trois fichiers suivants : `custdata1.txt`, `custdata2.txt` et `custdata3.txt`. Vous pouvez utiliser la commande suivante pour charger tous les fichiers qui commencent par `amzn-s3-demo-bucket` dans `custdata` en spécifiant un préfixe : 

```
copy category
from 's3://amzn-s3-demo-bucket/custdata' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

S’il n’existe que deux des fichiers en raison d’une erreur, la commande COPY charge uniquement ces deux fichiers et se termine correctement, ce qui entraîne une charge de données incomplète. Si le compartiment contient également un fichier indésirable qui utilise le même préfixe, par exemple, un fichier nommé `custdata.backup`, la commande COPY charge ce fichier également, ce qui entraîne le chargement de données indésirables.

Pour vous assurer que tous les fichiers nécessaires sont chargés et pour empêcher que des fichiers indésirables soient chargés, vous pouvez utiliser un fichier manifeste. Le manifeste est un fichier texte au format JSON qui répertorie les fichiers à traiter par la commande COPY. Par exemple, le manifeste suivant charge les trois fichiers dans l’exemple précédent.

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.1",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.2",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.3",
         "mandatory":true
      }
   ]
}
```

L’indicateur `mandatory` facultatif indique si la commande COPY doit s’arrêter si le fichier n’existe pas. La valeur par défaut est `false`. Quels que soient les paramètres obligatoires, la commande COPY s’arrête si aucun fichier n’est trouvé. Dans cet exemple, la commande COPY renvoie une erreur si l’un des fichiers est introuvable. Les fichiers indésirables qui peuvent avoir été collectés si vous avez spécifié uniquement un préfixe de clé, comme `custdata.backup`, sont ignorés, car ils ne sont pas sur le manifeste. 

Lors du chargement des fichiers de données au format ORC or Parquet, le champ `meta` est obligatoire, comme illustré dans l’exemple suivant.

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```

L’exemple suivant utilise un manifeste nommé `cust.manifest`. 

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc
manifest;
```

Vous pouvez utiliser un manifeste pour charger les fichiers de différents compartiments ou les fichiers qui ne partagent pas le même préfixe. L’exemple suivant illustre le format JSON permettant de charger des données avec des fichiers dont les noms commencent par un horodatage.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/2013-10-04-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-05-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-06-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-07-custdata.txt","mandatory":true}
  ]
}
```

Le manifeste peut répertorier les fichiers qui se trouvent dans différents compartiments, à condition que les compartiments se trouvent dans la même AWS région que le cluster. 

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata2.txt","mandatory":false}
  ]
}
```

## Charger la table LISTING à partir d’un fichier séparés par une barre verticale (délimiteur par défaut)
<a name="r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter"></a>

L’exemple suivant est un cas très simple dans lequel aucune option n’est spécifiée et le fichier d’entrée contient le délimiteur par défaut, une barre verticale (’\$1’). 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Charger LISTING en utilisant des données en colonnes en format Parquet
<a name="r_COPY_command_examples-load-listing-from-parquet"></a>

L’exemple suivant charge des données depuis un dossier sur Amazon S3 nommé parquet. 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/parquet/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as parquet;
```

## Chargement du LISTING à l’aide de données en colonnes au format ORC
<a name="r_COPY_command_examples-load-listing-from-orc"></a>

L’exemple suivant charge des données depuis un dossier sur Amazon S3 nommé `orc`. 

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/orc/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc;
```

## Charger la table EVENT avec des options
<a name="r_COPY_command_examples-load-event-with-options"></a>

L’exemple suivant charge des données séparées par une barre verticale dans la table EVENT et applique les règles suivantes : 
+ Si des paires de guillemets anglais sont utilisées pour entourer des chaînes de caractères, elles sont supprimées.
+ Les chaînes vides et les chaînes qui contiennent des espaces vides sont chargées en tant que valeurs NULL.
+ La charge échoue si plus de 5 erreurs sont renvoyées.
+ Les valeurs d’horodatage doivent être conformes au format spécifié ; par exemple, un horodatage valide est `2008-09-26 05:43:12`.

```
copy event
from 's3://amzn-s3-demo-bucket/data/allevents_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
removequotes
emptyasnull
blanksasnull
maxerror 5
delimiter '|'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

## Charger la table VENUE à partir d’un fichier de données de largeur fixe
<a name="r_COPY_command_examples-load-venue-from-a-fixed-width-data-file"></a>

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue_fw.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';
```

L’exemple précédent suppose un fichier de données au format identique à celui des exemples de données affichés. Dans le prochain exemple, les espaces se comportent comme des espaces réservés afin que toutes les colonnes soient de la même largeur, tel qu’indiqué dans la spécification : 

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
```

## Charger la table CATEGORY à partir d’un fichier CSV
<a name="load-from-csv"></a>

Supposons que vous voulez charger la table CATEGORY avec les valeurs indiquées dans le tableau suivant.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_COPY_command_examples.html)

L’exemple suivant montre le contenu d’un fichier texte avec les champs de valeurs séparés par des virgules.

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,All "non-musical" theatre  
14,Shows,Opera,All opera, light, and "rock" opera
15,Concerts,Classical,All symphony, concerto, and choir concerts
```

Si vous chargez le fichier à l’aide du paramètre DELIMITER pour spécifier des entrées séparées par des virgules, la commande COPY échoue parce que certains champs d’entrée contiennent des virgules. Vous pouvez éviter ce problème en utilisant le paramètre CSV et en entourant les champs qui contiennent des virgules de guillemets. Si le guillemet s’affiche au sein d’une chaîne entre guillemets, vous devez doubler le guillemet. Le guillemet par défaut est double. Vous devez donc ajouter à tous les guillemets doubles des guillemets doubles supplémentaires. Votre nouveau fichier d’entrée ressemble à quelque chose comme ça. 

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,"All ""non-musical"" theatre"
14,Shows,Opera,"All opera, light, and ""rock"" opera"
15,Concerts,Classical,"All symphony, concerto, and choir concerts"
```

En supposant que le nom du fichier est `category_csv.txt`, vous pouvez charger le fichier en utilisant la commande COPY suivante :

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv;
```

Sinon, pour éviter d’avoir à doubler les guillemets doubles de votre entrée, vous pouvez spécifier un guillemet différent à l’aide du paramètre QUOTE AS. Par exemple, la version suivante de `category_csv.txt` utilise ’`%`’ comme caractère de citation :

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,%All "non-musical" theatre%
14,Shows,Opera,%All opera, light, and "rock" opera%
15,Concerts,Classical,%All symphony, concerto, and choir concerts%
```

La commande COPY suivante utilise QUOTE AS pour charger `category_csv.txt` :

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv quote as '%';
```

## Charger la table VENUE avec des valeurs EXPLICIT pour une colonne IDENTITY
<a name="r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column"></a>

L’exemple suivant suppose que lorsque la table VENUE a été créée, au moins une colonne (telle que la colonne `venueid`) a été désignée comme colonne IDENTITY. Cette commande se substitue au comportement IDENTITY par défaut pour la génération automatique de valeurs pour une colonne IDENTITY et charge à la place des valeurs explicites depuis le fichier venue.txt. Amazon Redshift ne vérifie pas si des valeurs IDENTITY dupliquées sont chargées dans la table lors de l’utilisation de l’option EXLICIT\$1IDS. 

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
explicit_ids;
```

## Charger la table TIME à partir d’un fichier GZIP séparé par une barre verticale
<a name="r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file"></a>

L’exemple suivant charge la table TIME à partir d’un fichier GZIP séparé par une barre verticale :

```
copy time
from 's3://amzn-s3-demo-bucket/data/timerows.gz' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
gzip
delimiter '|';
```

## Charger un horodatage ou une datation
<a name="r_COPY_command_examples-load-a-time-datestamp"></a>

L’exemple suivant charge les données avec un horodatage formaté.

**Note**  
Le TIMEFORMAT de `HH:MI:SS` peut également prendre en charge des fractions de secondes au-delà de `SS` jusqu’aux microsecondes. Le fichier `time.txt` utilisé dans cet exemple contient une seule ligne, `2009-01-12 14:15:57.119568`.

```
copy timestamp1 
from 's3://amzn-s3-demo-bucket/data/time.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

Le résultat de cette copie est le suivant : 

```
select * from timestamp1;
c1
----------------------------
2009-01-12 14:15:57.119568
(1 row)
```

## Charger les données d’un fichier avec des valeurs par défaut
<a name="r_COPY_command_examples-load-data-from-a-file-with-default-values"></a>

L’exemple suivant utilise une variation de la table VENUE dans la base de données TICKIT. Prenons une table VENUE\$1NEW définie avec l’instruction suivante : 

```
create table venue_new(
venueid smallint not null,
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

Imaginons un fichier de données venue\$1noseats.txt qui ne contient aucune valeur pour la colonne VENUESEATS, comme illustré dans l’exemple suivant : 

```
1|Toyota Park|Bridgeview|IL|
2|Columbus Crew Stadium|Columbus|OH|
3|RFK Stadium|Washington|DC|
4|CommunityAmerica Ballpark|Kansas City|KS|
5|Gillette Stadium|Foxborough|MA|
6|New York Giants Stadium|East Rutherford|NJ|
7|BMO Field|Toronto|ON|
8|The Home Depot Center|Carson|CA|
9|Dick's Sporting Goods Park|Commerce City|CO|
10|Pizza Hut Park|Frisco|TX|
```

L’instruction COPY suivante charge correctement la table depuis le fichier et applique la valeur DEFAULT (’1000’) à la colonne omise : 

```
copy venue_new(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_noseats.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

Maintenant, affichez la table chargée : 

```
select * from venue_new order by venueid;
venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |       1000
2 | Columbus Crew Stadium      | Columbus        | OH         |       1000
3 | RFK Stadium                | Washington      | DC         |       1000
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |       1000
5 | Gillette Stadium           | Foxborough      | MA         |       1000
6 | New York Giants Stadium    | East Rutherford | NJ         |       1000
7 | BMO Field                  | Toronto         | ON         |       1000
8 | The Home Depot Center      | Carson          | CA         |       1000
9 | Dick's Sporting Goods Park | Commerce City   | CO         |       1000
10 | Pizza Hut Park             | Frisco          | TX         |       1000
(10 rows)
```

Pour l’exemple suivant, en plus de supposer qu’aucune donnée VENUESEATS n’est incluse dans le fichier, supposons également qu’aucune donnée VENUENAME n’est incluse : 

```
1||Bridgeview|IL|
2||Columbus|OH|
3||Washington|DC|
4||Kansas City|KS|
5||Foxborough|MA|
6||East Rutherford|NJ|
7||Toronto|ON|
8||Carson|CA|
9||Commerce City|CO|
10||Frisco|TX|
```

 A l’aide de la même définition de table, l’instructions COPY suivante échoue, car aucune valeur DEFAULT n’a été spécifié pour VENUENAME et VENUENAME est une colonne NOT NULL : 

```
copy venue(venueid, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

Maintenant, prenons une variation de la table VENUE qui utilise une colonne IDENTITY : 

```
create table venue_identity(
venueid int identity(1,1),
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

Comme dans l’exemple précédent, supposons que la colonne VENUESEATS n’a aucune valeur correspondante dans le fichier source. L’instruction COPY suivante charge la table avec succès, y compris les valeurs de données IDENTITY prédéfinies au lieu de générer ces valeurs : 

```
copy venue(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

Cette instruction échoue, car elle n’inclut pas la colonne IDENTITY (VENUEID est manquante dans la liste de colonnes) mais inclut un paramètre EXPLICIT\$1IDS : 

```
copy venue(venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

Cette instruction échoue, car elle n’inclut pas un paramètre EXPLICIT\$1IDS : 

```
copy venue(venueid, venuename, venuecity, venuestate)
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

## Exécuter la commande COPY des données avec l’option ESCAPE
<a name="r_COPY_command_examples-copy-data-with-the-escape-option"></a>

L’exemple suivant présente le chargement des caractères qui correspondent au délimiteur (dans ce cas, la barre verticale). Dans le fichier d’entrée, assurez-vous qu’une barre oblique inverse (\$1) est ajoutée à toutes les barres verticales (\$1) que vous voulez charger. Puis chargez le fichier avec le paramètre ESCAPE. 

```
$ more redshiftinfo.txt
1|public\|event\|dwuser
2|public\|sales\|dwuser

create table redshiftinfo(infoid int,tableinfo varchar(50));

copy redshiftinfo from 's3://amzn-s3-demo-bucket/data/redshiftinfo.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
delimiter '|' escape;

select * from redshiftinfo order by 1;
infoid |       tableinfo
-------+--------------------
1      | public|event|dwuser
2      | public|sales|dwuser
(2 rows)
```

Sans le paramètre ESCAPE, cette commande COPY échoue avec une erreur `Extra column(s) found`.

**Important**  
Si vous chargez vos données à l’aide d’une commande COPY avec le paramètre ESCAPE, vous devez également spécifier le paramètre ESCAPE avec votre commande UNLOAD pour générer le fichier de sortie réciproque. De même, si vous exécuter la commande UNLOAD à l’aide du paramètre ESCAPE, vous devez utiliser la commande ESCAPE lorsque vous exécutez la commande COPY sur les mêmes données.

## Copier à partir d’exemples JSON
<a name="r_COPY_command_examples-copy-from-json"></a>

Dans les exemples suivants, vous chargez la table CATEGORY avec les données suivantes. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ [Charger des données JSON à l’aide de l’option ’auto’](#copy-from-json-examples-using-auto)
+ [Charger des données JSON à l’aide de l’option ’auto ignorecase’](#copy-from-json-examples-using-auto-ignorecase)
+ [Charger à partir de données JSON à l'aide d'un JSONPaths fichier](#copy-from-json-examples-using-jsonpaths)
+ [Chargement à partir de tableaux JSON à l'aide d'un JSONPaths fichier](#copy-from-json-examples-using-jsonpaths-arrays)

### Charger des données JSON à l’aide de l’option ’auto’
<a name="copy-from-json-examples-using-auto"></a>

Pour charger des données JSON à l’aide de l’option `'auto'`, les données JSON doivent consister en un ensemble d’objets. Les noms de clés doivent correspondre aux noms de colonnes, mais dans ce cas, l’ordre n’a pas d’importance. Ce qui suit montre le contenu d’un fichier nommé `category_object_auto.json`.

```
{
    "catdesc": "Major League Baseball",
    "catid": 1,
    "catgroup": "Sports",
    "catname": "MLB"
}
{
    "catgroup": "Sports",
    "catid": 2,
    "catname": "NHL",
    "catdesc": "National Hockey League"
}
{
    "catid": 3,
    "catname": "NFL",
    "catgroup": "Sports",
    "catdesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "catid": 4,
    "catgroup": "Sports",
    "catname": "NBA",
    "catdesc": "National Basketball Association"
}
{
    "catid": 5,
    "catgroup": "Shows",
    "catname": "Musicals",
    "catdesc": "All symphony, concerto, and choir concerts"
}
```

Pour charger depuis le fichier de données JSON dans l’exemple précédent, exécutez la commande COPY suivante.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto';
```

### Charger des données JSON à l’aide de l’option ’auto ignorecase’
<a name="copy-from-json-examples-using-auto-ignorecase"></a>

Pour charger des données JSON à l’aide de l’option `'auto ignorecase'`, les données JSON doivent consister en un ensemble d’objets. Le cas des noms de clés n’a pas besoin de correspondre aux noms de colonnes et l’ordre n’a pas d’importance. Ce qui suit montre le contenu d’un fichier nommé `category_object_auto-ignorecase.json`.

```
{
    "CatDesc": "Major League Baseball",
    "CatID": 1,
    "CatGroup": "Sports",
    "CatName": "MLB"
}
{
    "CatGroup": "Sports",
    "CatID": 2,
    "CatName": "NHL",
    "CatDesc": "National Hockey League"
}
{
    "CatID": 3,
    "CatName": "NFL",
    "CatGroup": "Sports",
    "CatDesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "CatID": 4,
    "CatGroup": "Sports",
    "CatName": "NBA",
    "CatDesc": "National Basketball Association"
}
{
    "CatID": 5,
    "CatGroup": "Shows",
    "CatName": "Musicals",
    "CatDesc": "All symphony, concerto, and choir concerts"
}
```

Pour charger depuis le fichier de données JSON dans l’exemple précédent, exécutez la commande COPY suivante.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto ignorecase.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto ignorecase';
```

### Charger à partir de données JSON à l'aide d'un JSONPaths fichier
<a name="copy-from-json-examples-using-jsonpaths"></a>

Si les objets de données JSON ne correspondent pas directement aux noms de colonnes, vous pouvez utiliser un JSONPaths fichier pour mapper les éléments JSON aux colonnes. L'ordre n'a pas d'importance dans les données source JSON, mais l'ordre des expressions de JSONPaths fichier doit correspondre à l'ordre des colonnes. Supposons que vous ayez le fichier de données suivant, nommé `category_object_paths.json`.

```
{
    "one": 1,
    "two": "Sports",
    "three": "MLB",
    "four": "Major League Baseball"
}
{
    "three": "NHL",
    "four": "National Hockey League",
    "one": 2,
    "two": "Sports"
}
{
    "two": "Sports",
    "three": "NFL",
    "one": 3,
    "four": "National Football League"
}
{
    "one": 4,
    "two": "Sports",
    "three": "NBA",
    "four": "National Basketball Association"
}
{
    "one": 6,
    "two": "Shows",
    "three": "Musicals",
    "four": "All symphony, concerto, and choir concerts"
}
```

Le JSONPaths fichier suivant, nommé`category_jsonpath.json`, met en correspondance les données source avec les colonnes du tableau.

```
{
    "jsonpaths": [
        "$['one']",
        "$['two']",
        "$['three']",
        "$['four']"
    ]
}
```

Pour charger depuis le fichier de données JSON dans l’exemple précédent, exécutez la commande COPY suivante.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_jsonpath.json';
```

### Chargement à partir de tableaux JSON à l'aide d'un JSONPaths fichier
<a name="copy-from-json-examples-using-jsonpaths-arrays"></a>

Pour charger à partir de JSON des données constituées d'un ensemble de tableaux, vous devez utiliser un JSONPaths fichier pour mapper les éléments du tableau aux colonnes. Supposons que vous ayez le fichier de données suivant, nommé `category_array_data.json`.

```
[1,"Sports","MLB","Major League Baseball"]
[2,"Sports","NHL","National Hockey League"]
[3,"Sports","NFL","National Football League"]
[4,"Sports","NBA","National Basketball Association"]
[5,"Concerts","Classical","All symphony, concerto, and choir concerts"]
```

Le JSONPaths fichier suivant, nommé`category_array_jsonpath.json`, met en correspondance les données source avec les colonnes du tableau.

```
{
    "jsonpaths": [
        "$[0]",
        "$[1]",
        "$[2]",
        "$[3]"
    ]
}
```

Pour charger depuis le fichier de données JSON dans l’exemple précédent, exécutez la commande COPY suivante.

```
copy category
from 's3://amzn-s3-demo-bucket/category_array_data.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_array_jsonpath.json';
```

## Copier depuis des exemples Avro
<a name="r_COPY_command_examples-copy-from-avro"></a>

Dans les exemples suivants, vous chargez la table CATEGORY avec les données suivantes. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ [Charger à partir des données Avro à l’aide de l’option ’auto’](#copy-from-avro-examples-using-auto)
+ [Charger à partir des données Avro à l’aide de l’option ’auto ignorecase’](#copy-from-avro-examples-using-auto-ignorecase)
+ [Charger des données depuis Avro à l'aide d'un fichier JSONPaths](#copy-from-avro-examples-using-avropaths)

### Charger à partir des données Avro à l’aide de l’option ’auto’
<a name="copy-from-avro-examples-using-auto"></a>

Pour charger à partir des données Avro à l’aide de l’argument `'auto'`, les noms de champs du schéma Avro doivent correspondre aux noms de colonnes. Lorsque vous utilisez l’argument `'auto'`, l’ordre n’est pas important. Ce qui suit montre le schéma d’un fichier nommé `category_auto.avro`.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "catid", "type": "int"},
        {"name": "catdesc", "type": "string"},
        {"name": "catname", "type": "string"},
        {"name": "catgroup", "type": "string"},
}
```

Les données contenues dans un fichier Avro sont au format binaire, elles ne sont donc pas explicites. L’exemple suivant illustre une représentation JSON des données dans le fichier `category_auto.avro`. 

```
{
   "catid": 1,
   "catdesc": "Major League Baseball",
   "catname": "MLB",
   "catgroup": "Sports"
}
{
   "catid": 2,
   "catdesc": "National Hockey League",
   "catname": "NHL",
   "catgroup": "Sports"
}
{
   "catid": 3,
   "catdesc": "National Basketball Association",
   "catname": "NBA",
   "catgroup": "Sports"
}
{
   "catid": 4,
   "catdesc": "All symphony, concerto, and choir concerts",
   "catname": "Classical",
   "catgroup": "Concerts"
}
```

Pour charger depuis le fichier de données Avro dans l’exemple précédent, exécutez la commande COPY suivante.

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto';
```

### Charger à partir des données Avro à l’aide de l’option ’auto ignorecase’
<a name="copy-from-avro-examples-using-auto-ignorecase"></a>

Pour charger à partir des données Avro à l’aide de l’argument `'auto ignorecase'`, la casse des noms de champs du schéma Avro ne doit pas forcément correspondre à celle des noms de colonnes. Lorsque vous utilisez l’argument `'auto ignorecase'`, l’ordre n’est pas important. Ce qui suit montre le schéma d’un fichier nommé `category_auto-ignorecase.avro`.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "CatID", "type": "int"},
        {"name": "CatDesc", "type": "string"},
        {"name": "CatName", "type": "string"},
        {"name": "CatGroup", "type": "string"},
}
```

Les données contenues dans un fichier Avro sont au format binaire, elles ne sont donc pas explicites. L’exemple suivant illustre une représentation JSON des données dans le fichier `category_auto-ignorecase.avro`. 

```
{
   "CatID": 1,
   "CatDesc": "Major League Baseball",
   "CatName": "MLB",
   "CatGroup": "Sports"
}
{
   "CatID": 2,
   "CatDesc": "National Hockey League",
   "CatName": "NHL",
   "CatGroup": "Sports"
}
{
   "CatID": 3,
   "CatDesc": "National Basketball Association",
   "CatName": "NBA",
   "CatGroup": "Sports"
}
{
   "CatID": 4,
   "CatDesc": "All symphony, concerto, and choir concerts",
   "CatName": "Classical",
   "CatGroup": "Concerts"
}
```

Pour charger depuis le fichier de données Avro dans l’exemple précédent, exécutez la commande COPY suivante.

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto-ignorecase.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto ignorecase';
```

### Charger des données depuis Avro à l'aide d'un fichier JSONPaths
<a name="copy-from-avro-examples-using-avropaths"></a>

Si les noms de champs du schéma Avro ne correspondent pas directement aux noms de colonnes, vous pouvez utiliser un JSONPaths fichier pour mapper les éléments du schéma aux colonnes. L'ordre des expressions du JSONPaths fichier doit correspondre à l'ordre des colonnes. 

Supposons que vous ayez un fichier de données nommé `category_paths.avro` qui contient les mêmes données que dans l’exemple précédent, mais avec le schéma suivant.

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "desc", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "group", "type": "string"},
        {"name": "region", "type": "string"} 
     ]
}
```

Le JSONPaths fichier suivant, nommé`category_path.avropath`, met en correspondance les données source avec les colonnes du tableau.

```
{
    "jsonpaths": [
        "$['id']",
        "$['group']",
        "$['name']",
        "$['desc']"
    ]
}
```

Pour charger depuis le fichier de données Avro dans l’exemple précédent, exécutez la commande COPY suivante.

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
format avro 's3://amzn-s3-demo-bucket/category_path.avropath ';
```

## Préparation de fichiers pour la commande COPY avec l’option ESCAPE
<a name="r_COPY_preparing_data"></a>

L’exemple suivant décrit comment préparer les données pour insérer des caractères de saut de ligne avant d’importer les données dans une table Amazon Redshift à l’aide de la commande COPY avec le paramètre ESCAPE. Si vous ne préparez pas les données afin de délimiter les caractères de saut ligne, Amazon Redshift renvoie des erreurs de charge lorsque vous exécutez la commande COPY, car le caractère de saut de ligne est généralement utilisé comme séparateur d’enregistrements. 

Par exemple, prenons un fichier ou une colonne dans une table externe que vous voulez copier dans une table Amazon Redshift. Si le fichier ou la colonne contient des données de contenu au format XML ou similaires, vous devez vous assurer que tous les caractères de saut de ligne (\$1n) qui font partie du contenu sont insérés avec la barre oblique inverse (\$1). 

Si un fichier ou une table contient des caractères de saut de ligne imbriqués, cela offre un modèle relativement facile à mettre en correspondance. Chaque caractère de saut de ligne imbriqué suit presque toujours un caractère `>` avec, potentiellement, des caractères d’espace (`' '` ou une tabulation) entre les deux, comme vous pouvez le voir dans l’exemple suivant d’un fichier texte intitulé `nlTest1.txt`. 

```
$ cat nlTest1.txt
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>|1000
<xml>
</xml>|2000
```

Avec l’exemple suivant, vous pouvez exécuter un utilitaire de traitement de texte permettant de prétraiter le fichier source et d’insérer des caractères d’échappement si nécessaire. (Le caractère `|` est destiné à être utilisé comme délimiteur pour séparer les données de la colonne lorsqu’elles sont copiées dans une table Amazon Redshift.) 

```
$ sed -e ':a;N;$!ba;s/>[[:space:]]*\n/>\\\n/g' nlTest1.txt > nlTest2.txt
```

De même, vous pouvez utiliser Perl pour effectuer une opération similaire : 

```
cat nlTest1.txt | perl -p -e 's/>\s*\n/>\\\n/g' > nlTest2.txt
```

Pour faciliter le chargement des données à partir du fichier `nlTest2.txt` dans Amazon Redshift, nous avons créé une table à deux colonnes dans Amazon Redshift. La première colonne c1, est une colonne de caractères dont le contenu est au format XML issu du fichier `nlTest2.txt`. La deuxième colonne c2 contient des valeurs de nombres entiers chargés à partir du même fichier. 

Après avoir exécuté la commande `sed`, vous pouvez charger correctement des données à partir du fichier `nlTest2.txt` dans une table Amazon Redshift à l’aide du paramètre ESCAPE. 

**Note**  
Lorsque vous incluez le paramètre ESCAPE avec la commande COPY, il insère un certain nombre de caractères spéciaux, parmi lesquels la barre oblique (ainsi que le saut de ligne). 

```
copy t2 from 's3://amzn-s3-demo-bucket/data/nlTest2.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'  
escape
delimiter as '|';

select * from t2 order by 2;

c1           |  c2
-------------+------
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>
| 1000
<xml>
</xml>       | 2000
(2 rows)
```

Vous pouvez préparer les fichiers de données exportés à partir de bases de données externes d’une manière similaire. Par exemple, avec une base de données Oracle, vous pouvez utiliser la fonction REPLACE sur chaque colonne concernée dans une table que vous voulez copier dans Amazon Redshift. 

```
SELECT c1, REPLACE(c2, \n',\\n' ) as c2 from my_table_with_xml
```

En outre, de nombreux outils d’exportation et d’extraction, de transformation, de chargement (ETL) de la base de données qui traitent régulièrement de grandes quantités de données offrent des options permettant de spécifier des caractères d’échappement et délimiteurs. 

## Chargement d’un shapefile dans Amazon Redshift
<a name="copy-example-spatial-copy-shapefile"></a>

Les exemples suivants montrent comment charger un shapefile Esri à l’aide de la commande COPY. Pour plus d’informations sur le chargement des fichiers de forme, consultez [Chargement d’un shapefile dans Amazon Redshift](spatial-copy-shapefile.md). 

### Chargement d’un shapefile
<a name="copy-example-spatial-copy-shapefile-loading-copy"></a>

Les étapes suivantes montrent comment ingérer des OpenStreetMap données depuis Amazon S3 à l'aide de la commande COPY. Cet exemple suppose que l'archive du shapefile de Norvège [provenant du site de téléchargement de](https://download.geofabrik.de/europe.html) Geofabrik a été chargée dans un compartiment Amazon S3 privé de votre région. AWS Les fichiers `.shp`, `.shx` et `.dbf` doivent partager le même préfixe et le même nom de fichier Amazon S3.

#### Intégration des données sans simplification
<a name="spatial-copy-shapefile-loading-copy-fits"></a>

Les commandes suivantes créent des tables et intègrent des données qui peuvent s’adapter à la taille géométrique maximale sans aucune simplification. Ouvrez `gis_osm_natural_free_1.shp` dans votre logiciel SIG préféré et inspectez les colonnes de cette couche. Par défaut, les colonnes IDENTITY ou GEOMETRY sont les premières. Lorsque la première colonne est une colonne GEOMETRY, vous pouvez créer la table comme indiqué ci-dessous.

```
CREATE TABLE norway_natural (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Sinon, lorsque la première colonne est une colonne IDENTITY, vous pouvez créer la table comme indiqué ci-dessous.

```
CREATE TABLE norway_natural_with_id (
   fid INT IDENTITY(1,1),
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Maintenant, vous pouvez intégrer les données en utilisant la commande COPY.

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural' completed, 83891 record(s) loaded successfully
```

Vous pouvez également intégrer les données comme indiqué ci-dessous. 

```
COPY norway_natural_with_id FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural_with_id' completed, 83891 record(s) loaded successfully.
```

#### Intégration des données avec simplification
<a name="spatial-copy-shapefile-loading-copy-no-fit"></a>

Les commandes suivantes créent une table et tentent d’intégrer des données qui ne rentrent pas dans la taille géométrique maximale sans aucune simplification. Inspectez le shapefile `gis_osm_water_a_free_1.shp` et créez la table appropriée comme indiqué ci-dessous.

```
CREATE TABLE norway_water (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Lorsque la commande COPY s’exécute, une erreur est renvoyée.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
ERROR:  Load into table 'norway_water' failed.  Check 'stl_load_errors' system table for details.
```

L’interrogation de `STL_LOAD_ERRORS` indique que la géométrie est trop volumineuse. 

```
SELECT line_number, btrim(colname), btrim(err_reason) FROM stl_load_errors WHERE query = pg_last_copy_id();
 line_number |    btrim     |                                 btrim
-------------+--------------+-----------------------------------------------------------------------
     1184705 | wkb_geometry | Geometry size: 1513736 is larger than maximum supported size: 1048447
```

Pour résoudre ce problème, le paramètre `SIMPLIFY AUTO` est ajouté à la commande COPY afin de simplifier les géométries.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989196 record(s) loaded successfully.
```

Pour afficher les lignes et les géométries simplifiées, interrogez `SVL_SPATIAL_SIMPLIFY`.

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size |   final_tolerance
-------+-------------+-------------------+--------------+------------+------------+----------------------
    20 |     1184704 |                -1 |      1513736 | t          |    1008808 |   1.276386653895e-05
    20 |     1664115 |                -1 |      1233456 | t          |    1023584 | 6.11707814796635e-06
```

Lorsque la commande SIMPLIY AUTO *max\$1tolerance* est utilisée avec une tolérance inférieure à celle calculée automatiquement, une erreur d’ingestion est généralement renvoyée. Dans ce cas, utilisez la commande MAXERROR pour ignorer les erreurs.

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO 1.1E-05
MAXERROR 2
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989195 record(s) loaded successfully.
INFO:  Load into table 'norway_water' completed, 1 record(s) could not be loaded.  Check 'stl_load_errors' system table for details.
```

Interrogez à nouveau `SVL_SPATIAL_SIMPLIFY` pour identifier l’enregistrement que la commande COPY n’a pas réussi à charger.

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size | final_tolerance
-------+-------------+-------------------+--------------+------------+------------+-----------------
    29 |     1184704 |           1.1e-05 |      1513736 | f          |          0 |               0
    29 |     1664115 |           1.1e-05 |      1233456 | t          |     794432 |         1.1e-05
```

Dans cet exemple, le premier enregistrement n’a pas réussi à s’ajuster, c’est pourquoi la colonne `simplified` affiche false. Le deuxième enregistrement a été chargé dans la tolérance donnée. Toutefois, la taille finale est supérieure à l’utilisation de la tolérance calculée automatiquement sans spécifier la tolérance maximale. 

### Chargement à partir d’un shapefile compressé
<a name="copy-example-spatial-copy-shapefile-compressed"></a>

La commande COPY Amazon Redshift prend en charge l’ingestion de données à partir d’un shapefile compressé. Tous les composants de shapefiles doivent avoir le même préfixe Amazon S3 et le même suffixe de compression. Par exemple, supposons que vous souhaitiez charger les données de l’exemple précédent. Dans ce cas, les fichiers `gis_osm_water_a_free_1.shp.gz`, `gis_osm_water_a_free_1.dbf.gz` et `gis_osm_water_a_free_1.shx.gz` doivent partager le même répertoire Amazon S3. La commande COPY nécessite l’option GZIP, et la clause FROM doit spécifier le fichier compressé correct, comme indiqué ci-dessous.

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/compressed/gis_osm_natural_free_1.shp.gz'
FORMAT SHAPEFILE
GZIP
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural' completed, 83891 record(s) loaded successfully.
```

### Chargement des données dans une table avec un ordre de colonnes différent
<a name="copy-example-spatial-copy-shapefile-column-order"></a>

Si vous avez une table qui n’a pas `GEOMETRY` comme première colonne, vous pouvez utiliser le mappage de colonnes pour mapper des colonnes à la table cible. Par exemple, créez une table en spécifiant `osm_id` comme première colonne.

```
CREATE TABLE norway_natural_order (
   osm_id BIGINT,
   wkb_geometry GEOMETRY,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

Intégrez ensuite un shapefile à l’aide du mappage de colonnes.

```
COPY norway_natural_order(wkb_geometry, osm_id, code, fclass, name) 
FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural_order' completed, 83891 record(s) loaded successfully.
```

### Chargement de données dans une table avec une colonne de géographies
<a name="copy-example-spatial-copy-shapefile-geography"></a>

Si vous disposez d’une table avec une colonne `GEOGRAPHY`, vous devez d’abord l’intégrer à une colonne `GEOMETRY`, puis convertir les objets en objets `GEOGRAPHY`. Par exemple, après avoir copié votre shapefile dans une colonne `GEOMETRY`, modifiez le tableau pour ajouter une colonne du type de données `GEOGRAPHY`.

```
ALTER TABLE norway_natural ADD COLUMN wkb_geography GEOGRAPHY;
```

Convertissez ensuite les géométries en géographies.

```
UPDATE norway_natural SET wkb_geography = wkb_geometry::geography;
```

Vous pouvez éventuellement supprimer la colonne `GEOMETRY`.

```
ALTER TABLE norway_natural DROP COLUMN wkb_geometry;
```

## Commande COPY avec l’option NOLOAD
<a name="r_COPY_command_examples-load-noload-option"></a>

Pour valider des fichiers de données avant de charger réellement les données, utilisez l’option NOLOAD avec la commande COPY. Amazon Redshift analyse le fichier d’entrée et affiche les erreurs éventuelles. L’exemple suivant utilise l’option NOLOAD et aucune ligne n’est réellement chargée dans la table.

```
COPY public.zipcode1
FROM 's3://amzn-s3-demo-bucket/mydata/zipcode.csv' 
DELIMITER ';' 
IGNOREHEADER 1 REGION 'us-east-1'
NOLOAD
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole';

Warnings:
Load into table 'zipcode1' completed, 0 record(s) loaded successfully.
```

## Commande COPY avec un délimiteur multioctet et l’option ENCODING
<a name="r_COPY_command_examples-load-encoding-multibyte-delimiter-option"></a>

L'exemple suivant se charge LATIN1 à partir d'un fichier Amazon S3 contenant des données multioctets. La commande COPY spécifie le délimiteur sous forme octale `\302\246\303\254` pour séparer les champs du fichier d’entrée encodé au format ISO-8859-1. Pour spécifier le même délimiteur en UTF-8, spécifiez `DELIMITER '¦ì'`.

```
COPY latin1
FROM 's3://amzn-s3-demo-bucket/multibyte/myfile' 
IAM_ROLE 'arn:aws:iam::123456789012:role/myRedshiftRole'
DELIMITER '\302\246\303\254'
ENCODING ISO88591
```

# CREATE DATABASE
<a name="r_CREATE_DATABASE"></a>

Crée une nouvelle base de données.

Pour créer une base de données, vous devez être super-utilisateur ou disposer du privilège CREATEDB. Pour créer une base de données associée à une intégration zéro ETL, vous devez être super-utilisateur ou disposer des privilèges CREATEDB et CREATEUSER.

Vous ne pouvez pas exécuter CREATE DATABASE au sein d’un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

## Syntaxe
<a name="r_CREATE_DATABASE-synopsis"></a>

```
CREATE DATABASE database_name 
[ { [ 
      FROM INTEGRATION '<integration_id>'[ DATABASE '<source_database>' ]
      [ SET ]
      [ ACCEPTINVCHARS [=] { TRUE | FALSE }]
      [ QUERY_ALL_STATES [=] { TRUE | FALSE }] 
      [ REFRESH_INTERVAL <interval> ] 
      [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
      [ HISTORY_MODE [=] {TRUE | FALSE} ]
    ]
    [ WITH ]
    [ OWNER [=] db_owner ]
    [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
  }
  | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } }
  | { IAM_ROLE  {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } }
  | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid }
]
```

## Parameters
<a name="r_CREATE_DATABASE-parameters"></a>

 *database\$1name*   
Nom de la nouvelle base de données. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

FROM INTEGRATION ’<integration\$1id>’ [ DATABASE ’<source\$1database>’ ]   
Spécifie s’il faut créer la base de données à l’aide d’un identifiant d’intégration zéro ETL. Vous pouvez récupérer l’`integration_id` depuis la vue système SVV\$1INTEGRATION. Pour les intégrations zéro ETL Aurora PostgreSQL, vous devez également spécifier le nom `source_database`, qui peut également être récupéré à partir de SVV\$1INTEGRATION.  
Pour obtenir un exemple, consultez [Crée des bases de données pour recevoir les résultats des intégrations zéro ETL](#r_CREATE_DATABASE-integration). Pour plus d’informations sur la création de bases de données avec des intégrations zéro ETL, consultez [Création de bases de données de destination dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html) dans le *Guide de gestion Amazon Redshift*.

SET  
Mot-clé facultatif.

ACCEPTINVCHARS [=] \$1 TRUE \$1 FALSE \$1  
La clause ACCEPTINVCHARS indique si les tables d’intégration zéro ETL continuent à être ingérées lorsque des caractères non valides sont détectés pour le type de données VARCHAR. Lorsque des caractères non valides sont détectés, ils sont remplacés par un caractère `?` par défaut.

QUERY\$1ALL\$1STATES [=] \$1 TRUE \$1 FALSE \$1  
La clause QUERY\$1ALL\$1STATES indique si les tables d’intégration zéro ETL peuvent être interrogées dans tous les états (`Synced`, `Failed`, `ResyncRequired` et `ResyncInitiated`). Par défaut, une table d’intégration zéro ETL ne peut être interrogée que dans son état `Synced`.

REFRESH\$1INTERVAL <interval>  
La clause REFRESH\$1INTERVAL définit l’intervalle de temps approximatif, en secondes, pour actualiser les données de la source zéro ETL vers la base de données cible. La valeur peut être définie entre 0 et 432 000 secondes (5 jours) pour les intégrations zéro ETL dont le type de source est Aurora MySQL, Aurora PostgreSQL ou RDS for MySQL. Pour les intégrations zéro ETL Amazon DynamoDB, la valeur peut être définie entre 900 et 432 000 secondes (15 minutes et 5 jours). L’`interval` par défaut est zéro (0) secondes pour les intégrations zéro ETL dont le type de source est Aurora MySQL, Aurora PostgreSQL ou RDS for MySQL. Pour les intégrations Amazon DynamoDB zéro ETL, l’`interval` par défaut est de 900 secondes (15 minutes).

TRUNCATECOLUMNS [=] \$1 TRUE \$1 FALSE \$1  
La clause TRUNCATECOLUMNS indique si les tables d’intégration zéro ETL continuent à être ingérées lorsque les valeurs des attributs de colonne VARCHAR ou SUPER dépassent les limites. Avec `TRUE`, les valeurs sont tronquées pour tenir dans la colonne et les valeurs des attributs JSON débordants sont tronquées pour tenir dans la colonne SUPER.

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1  
Clause spécifiant si Amazon Redshift définira le mode historique pour toutes les nouvelles tables de la base de données spécifiée. Cette option s’applique uniquement aux bases de données créées pour une intégration zéro ETL.  
La clause HISTORY\$1MODE peut être définie sur `TRUE` ou `FALSE`. La valeur par défaut est `FALSE`. Pour plus d’informations sur HISTORY\$1MODE, consultez [Mode historique](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html) dans le *Guide de gestion Amazon Redshift*.

WITH  
Mot-clé facultatif.

OWNER [=] db\$1owner  
Spécifie le nom d’utilisateur du propriétaire de base de données.

CONNECTION LIMIT \$1 *limite* \$1 UNLIMITED \$1   
Le nombre maximum de connexions à la base de données que les utilisateurs sont autorisés à ouvrir simultanément. La limite se s’applique pas aux super-utilisateurs. Utilisez le mot-clé UNLIMITED pour autoriser le nombre maximum de connexions simultanées. Une limite sur le nombre de connexions pour chaque utilisateur peut également s’appliquer. Pour plus d'informations, consultez [CREATE USER](r_CREATE_USER.md). La valeur par défaut est UNLIMITED. Pour afficher les connexions en cours, interrogez la vue système [STV\$1SESSIONS](r_STV_SESSIONS.md).  
Si les deux limites de connexion (utilisateurs et base de données) s’appliquent, un emplacement de connexion inutilisé situé entre les deux limites doit également être disponible lorsqu’un utilisateur tente de se connecter.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Clause spécifiant si la recherche de chaînes ou la comparaison est sensible à la casse ou non. Elle est sensible à la casse par défaut.  
COLLATE n’est pas pris en charge lorsque vous créez une base de données à partir d’une unité de partage des données.  
CASE\$1SENSITIVE et CS sont interchangeables et donnent les mêmes résultats. De même, CASE\$1INSENSITIVE et CI sont interchangeables et donnent les mêmes résultats.

ISOLATION LEVEL \$1 SNAPSHOT \$1 SERIALIZABLE \$1  
Clause qui spécifie le niveau d’isolation utilisé lorsque les requêtes sont exécutées sur une base de données. Pour de plus amples informations sur les niveaux d’isolation, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md).  
+ Isolation SNAPSHOT : offre un niveau d’isolation avec protection contre les conflits de mise à jour et de suppression Il s’agit de la valeur par défaut pour une base de données créée dans un cluster alloué ou un espace de noms sans serveur. 
+ Isolation SERIALIZABLE : offre une mise en série complète pour les transactions simultanées. 

FROM ARN ’<ARN>’  
L'ARN AWS Glue de base de données à utiliser pour créer la base de données.

\$1 WITH DATA CATALOG SCHEMA ’<schema>’ \$1 WITH NO DATA CATALOG SCHEMA \$1  
Ce paramètre ne s’applique que si votre commande CREATE DATABASE utilise également le paramètre FROM ARN.
Indique si la base de données doit être créée à l’aide d’un schéma pour pouvoir accéder à des objets dans le  AWS Glue Data Catalog.

IAM\$1ROLE \$1par défaut \$1 'SESSION' \$1 'arn:aws:iam : :role/ '\$1 *<Compte AWS-id>* *<role-name>*  
Ce paramètre ne s’applique que si votre commande CREATE DATABASE utilise également le paramètre FROM ARN.
Si vous spécifiez un rôle IAM qui est associé au cluster pendant l’exécution de la commande CREATE DATABASE, Amazon Redshift utilise les informations d’identification du rôle lorsque vous exécutez des requêtes sur la base de données.  
Si le mot clé `default` est spécifié, le rôle IAM défini par défaut et qui est associé au cluster est alors utilisé.  
Utilisez `'SESSION'` si vous vous connectez à votre cluster Amazon Redshift à l’aide d’une identité fédérée et que vous accédez aux tables à partir du schéma externe créé à l’aide de cette commande. Pour voir un exemple d’utilisation d’une identité fédéré, consultez [Utilisation d’une identité fédérée pour gérer l’accès d’Amazon Redshift aux ressources locales et aux tables externes Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html), qui explique comment configurer l’identité fédérée.   
Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. Au minimum, le rôle IAM doit être autorisé à exécuter une opération LIST sur le compartiment Amazon S3 devant être accessible et une opération GET sur les objets Amazon S3 contenus dans le compartiment. Pour en savoir plus sur l'utilisation de IAM\$1ROLE lors de la création d'une base de données à des AWS Glue Data Catalog fins de partage de données, consultez la section Utilisation de partages de données gérés [par Lake Formation en tant](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html) que consommateur.  
Le code suivant montre la syntaxe de la chaîne de paramètre IAM\$1ROLE pour un seul ARN.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Vous pouvez créer des chaînes de rôles pour permettre à votre cluster d’endosser un autre rôle IAM, y compris un rôle appartenant à un autre compte. Les chaînes ainsi créées peuvent inclure jusqu’à 10 rôles. Pour plus d'informations, consultez [Créer des rôles IAM dans Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Attachez à ce rôle IAM une politique d’autorisations IAM similaire à la suivante.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Pour connaître les étapes à suivre afin de créer un rôle IAM à utiliser avec une requête fédérée, consultez [Création d’un secret et d’un rôle IAM pour utiliser des requêtes fédérées](federated-create-secret-iam-role.md).   
N’incluez pas d’espaces dans la liste des rôles chaînés.
L’exemple suivant montre la syntaxe d’une chaîne de trois rôles.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

## Syntaxe pour l’utilisation de CREATE DATABASE avec une unité de partage des données
<a name="r_CREATE_DATABASE-datashare-synopsis"></a>

La syntaxe suivante décrit la commande CREATE DATABASE utilisée pour créer des bases de données à partir d'un partage de données afin de partager des données au sein d'un même AWS compte.

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid
```

La syntaxe suivante décrit la commande CREATE DATABASE utilisée pour créer des bases de données à partir d'un partage de données afin de partager des données entre comptes. AWS 

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF ACCOUNT account_id NAMESPACE namespace_guid
```

### Paramètres pour l’utilisation de CREATE DATABASE avec une unité de partage des données
<a name="r_CREATE_DATABASE-parameters-datashare"></a>

FROM DATASHARE   
Mot-clé indiquant où se situe l’unité de partage des données externe.

 *datashare\$1name*   
Nom de la base de données sur laquelle la base de données consommateur est créée.

WITH PERMISSIONS  
Spécifie que la base de données créée à partir de l’unité de partage des données nécessite des autorisations de niveau objet pour accéder à des objets de base de données individuels. Sans cette clause, les utilisateurs ou les rôles disposant de l’autorisation USAGE sur la base de données auront automatiquement accès à tous les objets de celle-ci.

 NAMESPACE *namespace\$1guid*   
Valeur spécifiant l’espace de noms du producteur compte auquel l’unité de partage des données appartient.

ACCOUNT *account\$1id*  
Valeur spécifiant le compte du producteur auquel l’unité de partage des données appartient.

## Notes d’utilisation de la commande CREATE DATABASE pour le partage de données
<a name="r_CREATE_DATABASE-usage"></a>

En tant que superutilisateur de base de données, lorsque vous utilisez CREATE DATABASE pour créer des bases de données à partir de partages de données au sein du AWS compte, spécifiez l'option NAMESPACE. L’option ACCOUNT est facultative. Lorsque vous utilisez CREATE DATABASE pour créer des bases de données provenant d’unités de partage des données sur des comptes AWS , spécifiez les options ACCOUNT et NAMESPACE du producteur.

Vous ne pouvez créer qu’une seule base de données grand public pour une unité de partage des données sur un cluster consommateur. Vous ne pouvez pas créer plusieurs bases de données grand public faisant référence à la même unité de partage des données.

## CRÉER UNE BASE DE DONNÉES depuis AWS Glue Data Catalog
<a name="r_CREATE_DATABASE_data-catalog"></a>

Pour créer une base de données à l'aide d'un ARN AWS Glue de base de données, spécifiez cet ARN dans votre commande CREATE DATABASE.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;
```

Vous pouvez aussi éventuellement fournir une valeur dans le paramètre IAM\$1ROLE. Pour en savoir plus sur le paramètre et les valeurs acceptées, consultez [Paramètres](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html#r_CREATE_DATABASE-parameters).

Les exemples suivants montrent comment créer une base de données à partir d’un ARN en utilisant un rôle IAM.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
```

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;
```

Vous pouvez également créer une base de données en utilisant un DATA CATALOG SCHEMA.

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;
```

## Crée des bases de données pour recevoir les résultats des intégrations zéro ETL
<a name="r_CREATE_DATABASE-integration"></a>

Pour créer une base de données utilisant une identité d’intégration zéro ETL, spécifiez l’`integration_id` dans votre commande CREATE DATABASE.

```
CREATE DATABASE destination_db_name FROM INTEGRATION 'integration_id';
```

Par exemple, récupérez d’abord les identifiants d’intégration dans SVV\$1INTEGRATION ;

```
SELECT integration_id FROM SVV_INTEGRATION;
```

Utilisez ensuite l’un des identifiants d’intégration récupérés pour créer la base de données qui reçoit les intégrations zéro ETL.

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';
```

Lorsque la base de données source des intégrations zéro ETL est requise, spécifiez par exemple.

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' DATABASE sourcedb;
```

Vous pouvez également définir un intervalle d’actualisation pour la base de données. Par exemple, pour définir l’intervalle d’actualisation à 7 200 secondes pour les données provenant d’une source d’intégration zéro ETL :

```
CREATE DATABASE myacct_mysql FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET REFRESH_INTERVAL 7200;
```

Interrogez la vue du catalogue SVV\$1INTEGRATION pour obtenir des informations sur une intégration zéro ETL, telles que integration\$1id, target\$1database, source, refresh\$1interval, etc.

```
SELECT * FROM svv_integration;
```

L’exemple suivant crée une base de données à partir d’une intégration avec le mode historique activé.

```
CREATE DATABASE sample_integration_db FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET HISTORY_MODE = true;
```

## Limites de CREATE DATABASE
<a name="r_CREATE_DATABASE-create-database-limits"></a>

Amazon Redshift applique ces limites pour les bases de données :
+ Maximum de 60 bases de données définies par l’utilisateur par cluster.
+ Maximum de 127 octets pour un nom de base de données.
+ Un nom de base de données ne peut pas être un mot réservé. 

## Classement de base de données
<a name="r_CREATE_DATABASE-collation"></a>

Le classement est un ensemble de règles qui définit la façon dont le moteur de base de données compare et trie les données de type caractère dans SQL. Le classement insensible à la casse est le classement le plus utilisé. Amazon Redshift utilise un classement insensible à la casse pour faciliter la migration à partir d’autres systèmes d’entrepôts des données. Grâce à la prise en charge native du classement insensible à la casse, Amazon Redshift continue d’utiliser des méthodes de réglage ou d’optimisation importantes, telles que les clés de distribution, les clés de tri ou l’analyse à plage restreinte. 

La clause COLLATE spécifie le classement par défaut de toutes les colonnes CHAR et VARCHAR de la base de données. Si CASE\$1INSENSITIVE est spécifié, toutes les colonnes CHAR ou VARCHAR utilisent un classement insensible à la casse. Pour obtenir des informations sur le classement, consultez [Séquences de classement](c_collation_sequences.md).

Les données insérées ou intégrées dans des colonnes insensibles à la casse conserveront leur casse d’origine. Cependant, toutes les opérations de chaîne basées sur la comparaison, y compris le tri et le regroupement, sont insensibles à la casse. Les opérations de correspondance de modèles telles que les prédicats LIKE, similaire à et les fonctions d’expression régulière sont également insensibles à la casse.

Les opérations SQL suivantes prennent en charge la sémantique de classement applicable :
+ Opérateurs de comparaison : =, <>, <, <=, >, >=.
+ Opérateur LIKE
+ Clauses ORDER BY
+ Clauses GROUP BY
+ Fonctions d’agrégation qui utilisent la comparaison de chaînes, telles que MIN, MAX et LISTAGG
+ Fonctions de fenêtrage, telles que les clauses PARTITION BY et ORDER BY
+ Fonctions scalaires greatest() et least (), STRPOS(), REGEXP\$1COUNT (), REGEXP\$1REPLACE(), REGEXP\$1INSTR(), REGEXP\$1SUBSTR()
+ Clause Distinct
+ UNION, INTERSECT et EXCEPT
+ IN LIST

Pour les requêtes externes, y compris les requêtes fédérées Amazon Redshift Spectrum et Aurora PostgreSQL, le classement de la colonne VARCHAR ou CHAR est le même que le classement actuel au niveau de la base de données.

L’exemple suivant interroge une table Amazon Redshift Spectrum :

```
SELECT ci_varchar FROM spectrum.test_collation
WHERE ci_varchar = 'AMAZON';

ci_varchar
----------
amazon
Amazon
AMAZON
AmaZon
(4 rows)
```

Pour obtenir des informations sur la création de tables à l'aide du classement de bases de données, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

Pour obtenir des informations sur la fonction COLLATE, consultez [Fonction COLLATE](r_COLLATE.md).

### Limites de classement de bases de données
<a name="r_CREATE_DATABASE-collation-limitations"></a>

Les limitations suivantes concernent l’utilisation du classement de base de données dans Amazon Redshift :
+ Toutes les tables ou vues système, y compris les tables catalogue PG et les tables système Amazon Redshift, sont sensibles à la casse.
+ Lorsque la base de données consommateur et la base de données producteur ont des classements différents au niveau de la base de données, Amazon Redshift ne prend pas en charge les requêtes inter-bases de données et inter-clusters.
+ Amazon Redshift ne prend pas en charge le classement insensible à la casse dans les requêtes au nœud principal uniquement.

  L’exemple suivant montre une requête insensible à la casse non prise en charge et l’erreur envoyée par qu’Amazon Redshift :

  ```
  SELECT collate(usename, 'case_insensitive') FROM pg_user;
  ERROR:  Case insensitive collation is not supported in leader node only query.
  ```
+ Amazon Redshift ne prend pas en charge l’interaction entre les colonnes sensibles à la casse et non sensibles à la casse, telles que les opérations de comparaison, de fonction, de jointure ou d’ensembles.

  Les exemples suivants montrent des erreurs lorsque des colonnes sensibles à la casse et insensibles à la casse interagissent :

  ```
  CREATE TABLE test
    (ci_col varchar(10) COLLATE case_insensitive,
     cs_col varchar(10) COLLATE case_sensitive,
     cint int,
     cbigint bigint);
  ```

  ```
  SELECT ci_col = cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT concat(ci_col, cs_col) FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT ci_col FROM test UNION SELECT cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select Coalesce(ci_col, cs_col) from test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select case when cint > 0 then ci_col else cs_col end from test;
  ERROR:  Query with different collations is not supported yet.
  ```

Pour que ces requêtes fonctionnent, utilisez la fonction COLLATE afin de convertir le classement d’une colonne et la faire correspondre à l’autre. Pour plus d'informations, consultez [Fonction COLLATE](r_COLLATE.md).

## Exemples
<a name="r_CREATE_DATABASE-examples"></a>

**Création d’une base de données**  
L’exemple suivant crée une base de données nommée TICKIT et attribue la propriété à l’utilisateur DWUSER.

```
create database tickit
with owner dwuser;
```

Interrogez la table de catalogue PG\$1DATABASE\$1INFO afin d’afficher les détails relatifs aux bases de données. 

```
select datname, datdba, datconnlimit
from pg_database_info
where datdba > 1;

 datname     | datdba | datconnlimit
-------------+--------+-------------
 admin       |    100 | UNLIMITED
 reports     |    100 | 100
 tickit      |    100 | 100
```

L’exemple suivant crée une base de données nommée **sampledb** avec niveau d’isolation SNAPSHOT.

```
CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

L’exemple suivant crée la base de données sales\$1db à partir de l’unité de partage des données salesshare.

```
CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

### Exemple de classement de bases de données
<a name="r_CREATE_DATABASE-collation-examples"></a>

**Création d’une base de données sensible à la casse**  
L’exemple suivant crée la base de données `sampledb`, crée la table `T1` et insère des données dans la table `T1`.

```
create database sampledb collate case_insensitive;
```

Connectez-vous à la nouvelle base de données que vous venez de créer à l’aide de votre client SQL. Lorsque vous utilisez l’éditeur de requêtes Amazon Redshift, choisissez `sampledb` dans **Éditeur**. Lorsque vous utilisez RSQL, utilisez une commande similaire à celle-ci.

```
\connect sampledb;
```

```
CREATE TABLE T1 (
  col1 Varchar(20) distkey sortkey
);
```

```
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');
```

Ensuite, la requête trouve des résultats avec `John`.

```
SELECT * FROM T1 WHERE col1 = 'John';

 col1
 ------
 john
 JOHN
(2 row)
```

**Classement par sensibilité à la casse**  
L’exemple suivant montre le classement par sensibilité à la casse avec la table T1. Le classement de *Bob* et *bob* ou *John* et *john* est non déterministe, car ils sont égaux dans la colonne insensible à la casse.

```
SELECT * FROM T1 ORDER BY 1;

 col1
 ------
 bob
 Bob
 JOHN
 john
 Mary
(5 rows)
```

De même, l’exemple suivant montre un classement par sensibilité à la casse avec la clause GROUP BY. *Bob* et *bob* sont égaux et appartiennent au même groupe. Lequel des deux apparaît dans le résultat est non déterministe.

```
SELECT col1, count(*) FROM T1 GROUP BY 1;

 col1 | count
 -----+------
 Mary |  1
 bob  |  2
 JOHN |  2
(3 rows)
```

**Interrogation avec une fonction de fenêtrage sur des colonnes insensibles à la casse**  
L’exemple suivant interroge une fonction de fenêtrage sur une colonne insensible à la casse.

```
SELECT col1, rank() over (ORDER BY col1) FROM T1;

 col1 | rank
 -----+------
 bob  |   1
 Bob  |   1
 john |   3
 JOHN |   3
 Mary |   5
(5 rows)
```

**Interrogation avec le mot-clé DISTINCT**  
L’exemple suivant interroge la table `T1` avec le mot-clé DISTINCT.

```
SELECT DISTINCT col1 FROM T1;

 col1
 ------
 bob
 Mary
 john
(3 rows)
```

**Interrogation avec la clause UNION**  
L’exemple suivant illustre les résultats de la clause UNION des tables `T1` et `T2`.

```
CREATE TABLE T2 AS SELECT * FROM T1;
```

```
SELECT col1 FROM T1 UNION SELECT col1 FROM T2;

 col1
 ------
 john
 bob
 Mary
(3 rows)
```

# CREATE DATASHARE
<a name="r_CREATE_DATASHARE"></a>

Crée une nouvelle unité de partage des données dans la base de données actuelle. Le propriétaire de cette unité de partage des données est l’auteur de la commande CREATE TABLE.

Amazon Redshift associe chaque unité de partage des données à une seule base de données Amazon Redshift. Vous pouvez uniquement ajouter des objets de la base de données associée à une unité de partage des données. Vous pouvez créer plusieurs unités de partage des données sur la même base de données Amazon Redshift.

Pour obtenir des informations sur les unités de partage des données, consultez [Partage de données dans Amazon Redshift](datashare-overview.md).

Pour afficher des informations sur les unités de partage des données, utilisez [SHOW DATASHARES](r_SHOW_DATASHARES.md).

## Privilèges requis
<a name="r_CREATE_DATASHARE-privileges"></a>

Les privilèges suivants sont requis pour CREATE DATASHARE :
+ Superuser
+ Utilisateurs disposant du privilège CREATE DATASHARE
+ Propriétaire de la base de données

## Syntaxe
<a name="r_CREATE_DATASHARE-synopsis"></a>

```
CREATE DATASHARE datashare_name
[[SET] PUBLICACCESSIBLE [=] TRUE | FALSE ];
```

## Parameters
<a name="r_CREATE_DATASHARE-parameters"></a>

*datashare\$1name*  
Nom du datashare. Le nom de l’unité de partage des données doit être unique dans l’espace de noms du cluster.

[[SET] PUBLICACCESSIBLE]  
Clause spécifiant si l’unité de partage des données peut être partagée avec des clusters qui sont accessibles publiquement.  
La valeur par défaut de `SET PUBLICACCESSIBLE` est `FALSE`.

## Notes d’utilisation
<a name="r_CREATE_DATASHARE_usage"></a>

Par défaut, le propriétaire de l’unité de partage des données possède le partage, mais pas les objets dans le partage.

Seuls les super-utilisateurs et le propriétaire de la base de données peuvent utiliser CREATE DATASHARE et déléguer des privilèges ALTER à d’autres utilisateurs ou groupes. 

## Exemples
<a name="r_CREATE_DATASHARE_examples"></a>

L’exemple suivant crée l’unité de partage des données `salesshare`.

```
CREATE DATASHARE salesshare;
```

L’exemple suivant crée l’unité de partage des données `demoshare` que gère AWS Data Exchange .

```
CREATE DATASHARE demoshare SET PUBLICACCESSIBLE TRUE, MANAGEDBY ADX;
```

# CREATE EXTERNAL FUNCTION
<a name="r_CREATE_EXTERNAL_FUNCTION"></a>

Crée une fonction scalaire définie par l'utilisateur (UDF) basée sur Amazon AWS Lambda Redshift. Pour plus d’informations sur les fonctions Lambda définies par l’utilisateur, consultez [Lambda scalaire UDFs](udf-creating-a-lambda-sql-udf.md).

## Privilèges requis
<a name="r_CREATE_EXTERNAL_FUNCTION-privileges"></a>

Les privilèges suivants sont requis pour CREATE EXTERNAL FUNCTION :
+ Superuser
+ Utilisateurs possédant le privilège CREATE [ OR REPLACE ] EXTERNAL FUNCTION

## Syntaxe
<a name="r_CREATE_EXTERNAL_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] EXTERNAL FUNCTION external_fn_name ( [data_type] [, ...] )
RETURNS data_type
{ VOLATILE | STABLE }
LAMBDA 'lambda_fn_name'
IAM_ROLE { default | ‘arn:aws:iam::<Compte AWS-id>:role/<role-name>’
RETRY_TIMEOUT milliseconds
MAX_BATCH_ROWS count
MAX_BATCH_SIZE size [ KB | MB ];
```

## Parameters
<a name="r_CREATE_EXTERNAL_FUNCTION-parameters"></a>

OR REPLACE  
Clause qui spécifie que si une fonction ayant le même nom et les mêmes types de données pour les arguments en entrée, ou *signature*, existe déjà, la fonction existante est remplacée. Vous pouvez uniquement remplacer une fonction par une nouvelle fonction qui définit un ensemble identique de types de données. Vous devez être un super-utilisateur pour remplacer une fonction.  
Si vous définissez une fonction avec le même nom qu’une fonction existante, mais avec une signature différente, vous créez une nouvelle fonction. En d’autres termes, le nom de la fonction est surchargé. Pour plus d'informations, consultez [Surcharge des noms de fonctions](udf-naming-udfs.md#udf-naming-overloading-function-names).

*external\$1fn\$1name*  
Nom de la fonction externe. Si vous spécifiez un nom de schéma (tel que myschema.myfunction), la fonction est créée à l’aide du schéma spécifié. Sinon, la fonction est créée dans le schéma en cours. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).   
Nous vous recommandons de nommer toutes les fonctions UDF en utilisant le préfixe `f_`. Amazon Redshift réserve le préfixe `f_` pour les noms de fonctions UDF. En utilisant le préfixe `f_`, vous vous assurez que le nom de votre fonction UDF n’entrera pas en conflit avec le nom d’une fonction SQL intégrée pour Amazon Redshift, que ce soit maintenant ou à l’avenir. Pour plus d'informations, consultez [Prévention des conflits de dénomination des fonctions UDF](udf-naming-udfs.md).

*data\$1type*  
Type de données des arguments en entrée. Pour plus d’informations, consultez [Python scalaire UDFs](udf-creating-a-scalar-udf.md) et [Lambda scalaire UDFs](udf-creating-a-lambda-sql-udf.md).

RETURNS *type\$1données*  
Type de données de la valeur renvoyée par la fonction. Le type de données RETURNS peut être n’importe quel type de données Amazon Redshift standard. Pour plus d’informations, consultez [Python scalaire UDFs](udf-creating-a-scalar-udf.md) et [Lambda scalaire UDFs](udf-creating-a-lambda-sql-udf.md).

VOLATILE \$1 STABLE  
Informe l’optimiseur de requête à propos de l’instabilité de la fonction.   
Pour obtenir la meilleure optimisation possible, qualifiez votre fonction avec la catégorie d’instabilité la plus stricte qui s’y applique. En matière de rigueur, en commençant par la moins stricte, les catégories d’instabilité sont les suivantes :  
+ VOLATILE
+ STABLE
VOLATILE  
Soit les mêmes arguments, la fonction peut renvoyer des résultats différents sur des appels successifs, y compris pour les lignes d’une même instruction. L’optimiseur de requête ne peut pas émettre d’hypothèses concernant le comportement d’une fonction volatile. Une requête qui utilise une fonction volatile doit réévaluer la fonction pour chaque entrée.  
STABLE  
À partir des mêmes arguments, la fonction renvoie invariablement les mêmes résultats lors des appels successifs traités au sein d’une même instruction. La fonction peut renvoyer des résultats différents lorsqu’elle est appelée dans différents instructions. Cette catégorie vise ici à permettre à l’optimiseur de réduire le nombre de fois que la fonction est appelée au sein d’une même instruction.  
Notez que si la rigueur choisie n’est pas valide pour la fonction, l’optimiseur risque d’ignorer certains appels basés sur cette rigueur. Cela peut produire un jeu de résultats incorrect.  
La clause IMMUTABLE n'est actuellement pas prise en charge pour Lambda UDFs.

LAMBDA *’lambda\$1fn\$1name’*   
 Nom de la fonction qu’Amazon Redshift appelle.  
Pour connaître les étapes de création d'une AWS Lambda fonction, voir [Créer une fonction Lambda avec la console dans le](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html) Guide du *AWS Lambda développeur*.  
Pour obtenir des informations sur les autorisations requises pour la fonction Lambda, consultez [Autorisations AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html) dans le *Guide du développeur AWS Lambda *.

IAM\$1ROLE \$1par défaut \$1 'arn:aws:iam : :role/ '*<Compte AWS-id>**<role-name>*   
Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini par défaut et associé au cluster lorsque la commande CREATE EXTERNAL FUNCTION s’exécute.  
Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. La commande CREATE EXTERNAL FUNCTION est autorisée à invoquer les fonctions Lambda via ce rôle IAM. Si votre cluster dispose d’un rôle IAM existant avec les autorisations pour invoquer les fonctions Lambda attachées, vous pouvez remplacer l’ARN de votre rôle. Pour plus d'informations, consultez [Configuration du paramètre d'autorisation pour Lambda UDFs](udf-creating-a-lambda-sql-udf.md#udf-lambda-authorization).  
L’exemple suivant montre la syntaxe du paramètre IAM\$1ROLE.  

```
IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'
```

RETRY\$1TIMEOUT *millisecondes*   
Durée totale en millisecondes utilisée par Amazon Redshift pour les retards dans les interruptions de nouvelles tentatives.   
Au lieu de lancer de nouvelles tentatives immédiatement pour toute requête ayant échoué, Amazon Redshift effectue des interruptions et attend un certain temps entre les nouvelles tentatives. Amazon Redshift lance ensuite la nouvelle demande pour exécuter à nouveau la requête ayant échoué jusqu’à ce que la somme de tous les retards soit égale ou supérieure à la valeur RETRY\$1TIMEOUT que vous avez spécifiée. La valeur par défaut est de 20 000 millisecondes.  
Lorsqu’une fonction Lambda est appelée, Amazon Redshift lance une nouvelle tentative pour les requêtes qui reçoivent des erreurs telles que `TooManyRequestsException`, `EC2ThrottledException` et `ServiceException`.   
Vous pouvez définir le paramètre RETRY\$1TIMEOUT sur 0 millisecondes pour empêcher toute nouvelle tentative pour une UDF Lambda.

*Nombre de* MAX\$1BATCH\$1ROWS  
 Nombre maximum de lignes qu’Amazon Redshift envoie dans une seule demande par lot pour une seule invocation Lambda.   
 La valeur minimale pour ce paramètre est 1. La valeur maximale est INT\$1MAX ou 2 147 483 647.   
 Ce paramètre est facultatif. La valeur maximale est INT\$1MAX ou 2 147 483 647. 

*Taille* MAX\$1BATCH\$1SIZE [ KB \$1 MB ]   
 Taille maximum de la charge utile de données qu’Amazon Redshift envoie dans une seule demande par lot pour une seule invocation Lambda.   
 La valeur minimale pour ce paramètre est 1 Ko. La valeur maximale est 5 Mo.   
 La valeur par défaut de ce paramètre est 5 Mo.   
 Ko et Mo sont facultatifs. Si vous ne définissez pas l’unité de mesure, Amazon Redshift utilise Ko par défaut. 

## Notes d’utilisation
<a name="r_CREATE_FUNCTION-usage-notes"></a>

Tenez compte des points suivants lorsque vous créez Lambda UDFs : 
+ L’ordre des appels de fonctions Lambda au niveau des arguments d’entrée n’est ni fixe ni garanti. Il peut varier selon les instances de requêtes en cours d’exécution, en fonction de la configuration du cluster.
+ Il n’est pas garanti que les fonctions soient appliquées une seule fois à chaque argument d’entrée. L'interaction entre Amazon Redshift et Amazon Redshift AWS Lambda peut entraîner des appels répétitifs avec les mêmes entrées.

## Exemples
<a name="r_CREATE_FUNCTION-examples"></a>

Vous trouverez ci-dessous des exemples d'utilisation de fonctions scalaires Lambda définies par l'utilisateur (). UDFs

### Exemple de fonction scalaire UDF Lambda utilisant une fonction Node.js Lambda
<a name="r_CREATE_FUNCTION-lambda-example-node"></a>

L’exemple suivant crée une fonction externe appelée `exfunc_sum` qui prend deux entiers comme arguments d’entrée. Cette fonction renvoie la somme sous la forme d’une sortie de nombre entier. Le nom de la fonction Lambda à appeler est `lambda_sum`. Le langage utilisé pour cette fonction Lambda est Node.js 12.x. Veillez à spécifier le rôle IAM. L’exemple utilise `'arn:aws:iam::123456789012:user/johndoe'` en tant que rôle IAM.

```
CREATE EXTERNAL FUNCTION exfunc_sum(INT,INT)
RETURNS INT
VOLATILE
LAMBDA 'lambda_sum'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

La fonction Lambda prend la charge utile de la requête et effectue une itération sur chaque ligne. Toutes les valeurs d’une seule ligne sont ajoutées pour calculer la somme de cette ligne, qui est enregistrée dans la table de réponses. Le nombre de lignes dans la table de résultats est similaire au nombre de lignes reçues dans la charge utile de la requête. 

La charge utile de la réponse JSON doit avoir les données de résultat dans le champ « results » pour être reconnue par la fonction externe. Le champ arguments de la requête envoyée à la fonction Lambda contient la charge utile de données. Il peut y avoir plusieurs lignes dans la charge utile de données en cas de requête par lots. La fonction Lambda suivante effectue une itération sur toutes les lignes de la charge utile de données de la requête. Elle effectue également une itération individuelle sur toutes les valeurs d’une seule ligne.

```
exports.handler = async (event) => {
    // The 'arguments' field in the request sent to the Lambda function contains the data payload.
    var t1 = event['arguments'];

    // 'len(t1)' represents the number of rows in the request payload.
    // The number of results in the response payload should be the same as the number of rows received.
    const resp = new Array(t1.length);

    // Iterating over all the rows in the request payload.
    for (const [i, x] of t1.entries())
    {
        var sum = 0;
        // Iterating over all the values in a single row.
        for (const y of x) {
            sum = sum + y;
        }
        resp[i] = sum;
    }
    // The 'results' field should contain the results of the lambda call.
    const response = {
        results: resp
    };
    return JSON.stringify(response);
};
```

L’exemple suivant appelle la fonction externe avec des valeurs littérales.

```
select exfunc_sum(1,2);
exfunc_sum
------------
 3
(1 row)
```

L’exemple suivant crée une table appelée t\$1sum avec deux colonnes, c1 et c2, du type de données entier et insère deux lignes de données. Ensuite, la fonction externe est appelée en transmettant les noms de colonne de cette table. Les deux lignes de la table sont envoyées dans une requête par lots dans la charge utile de la requête sous la forme d’une seule invocation Lambda.

```
CREATE TABLE t_sum(c1 int, c2 int);
INSERT INTO t_sum VALUES (4,5), (6,7);
SELECT exfunc_sum(c1,c2) FROM t_sum;
 exfunc_sum
---------------
 9
 13
(2 rows)
```

### Exemple de fonction scalaire UDF Lambda utilisant l’attribut RETRY\$1TIMEOUT
<a name="r_CREATE_FUNCTION-lambda-example-retry"></a>

Dans la section suivante, vous trouverez un exemple d'utilisation de l'attribut RETRY\$1TIMEOUT dans Lambda. UDFs 

AWS Lambda les fonctions ont des limites de simultanéité que vous pouvez définir pour chaque fonction. Pour plus d'informations sur les limites de simultanéité, consultez [la section Gestion de la simultanéité pour une fonction Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) dans le *Guide du AWS Lambda développeur* et l'article [Gestion de la simultanéité des AWS Lambda fonctions sur le blog Compute](https://aws.amazon.com/blogs/compute/managing-aws-lambda-function-concurrency). AWS 

Lorsque le nombre de requêtes traitées par une fonction UDF Lambda dépasse les limites de simultanéité, les nouvelles requêtes renvoient l’erreur `TooManyRequestsException`. La fonction UDF Lambda lance une nouvelle tentative pour cette erreur jusqu’à ce que la somme de tous les retards entre les requêtes envoyées à la fonction Lambda soit égale ou supérieure à la valeur RETRY\$1TIMEOUT que vous avez définie. La valeur RETRY\$1TIMEOUT par défaut est de 20 000 millisecondes.

L’exemple suivant utilise une fonction Lambda nommée `exfunc_sleep_3`. Cette fonction prend la charge utile de la requête, effectue une itération sur chaque ligne et convertit l’entrée en majuscules. Ensuite, elle passe en veille pendant 3 secondes puis renvoie le résultat. Le langage utilisé pour cette fonction Lambda est Python 3.8. 

Le nombre de lignes dans la table de résultats est similaire au nombre de lignes reçues dans la charge utile de la requête. La charge utile de la réponse JSON doit avoir les données de résultat dans le champ `results` pour être reconnue par la fonction externe. Le champ `arguments` dans la requête envoyée à la fonction Lambda contient la charge utile de données. Dans le cas d’une requête par lots, plusieurs lignes peuvent apparaître dans la charge utile de données.

La limite de simultanéité pour cette fonction est spécifiquement définie sur 1 dans la simultanéité réservée pour démontrer l’utilisation de l’attribut RETRY\$1TIMEOUT. Lorsque l’attribut est défini sur 1, la fonction Lambda ne peut servir qu’une seule requête à la fois.

```
import json
import time
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            resp[i] = y.upper()

    time.sleep(3)
    ret = dict()
    ret['results'] = resp
    ret_json = json.dumps(ret)
    return ret_json
```

Voici deux exemples supplémentaires illustrant l’attribut RETRY\$1TIMEOUT. Ils invoquent chacun une seule fonction UDF Lambda. Lorsque la fonction UDF Lambda est appelée, chaque exemple exécute la même requête SQL pour appeler la fonction UDF Lambda à partir de deux séances de base de données simultanées. Lorsque la première requête qui appelle la fonction UDF Lambda est servie par la fonction UDF, la deuxième requête renvoie l’erreur `TooManyRequestsException`. Cela se produit parce que vous avez spécifiquement défini la simultanéité réservée dans la fonction UDF sur 1. Pour obtenir des informations sur la définition de la simultanéité réservée pour les fonctions Lambda, consultez [Configuration de la simultanéité réservée](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#configuration-concurrency-reservedconfiguration-concurrency-reserved).

Le premier exemple ci-dessous définit l’attribut RETRY\$1TIMEOUT de la fonction UDF Lambda sur 0 milliseconde. Si la requête Lambda reçoit des exceptions de la fonction Lambda, Amazon Redshift n’effectue pas de nouvelle tentative. Ce résultat se produit car l’attribut RETRY\$1TIMEOUT est défini sur 0.

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 0;
```

Lorsque la valeur RETRY\$1TIMEOUT est définie sur 0, vous pouvez exécuter les deux requêtes suivantes à partir de séances de base de données distinctes pour afficher des résultats différents.

La première requête SQL qui utilise la fonction UDF Lambda s’exécute avec succès.

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

La deuxième requête, qui est exécutée à partir d’une séance de base de données distincte en même temps, renvoie l’erreur `TooManyRequestsException`.

```
select exfunc_upper('Varchar');
ERROR:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
DETAIL:
-----------------------------------------------
error:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
code:      32103
context:query:     0
location:  exfunc_client.cpp:102
process:   padbmaster [pid=26384]
-----------------------------------------------
```

Le deuxième exemple ci-dessous définit l’attribut RETRY\$1TIMEOUT de la fonction UDF Lambda sur 3 000 millisecondes. Même si la deuxième requête est exécutée simultanément, la fonction UDF Lambda recommence jusqu’à ce que le total des délais atteigne 3 000 millisecondes. Ainsi, les deux requêtes s’exécutent avec succès.

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 3000;
```

Lorsque RETRY\$1TIMEOUT est défini sur 3 000 millisecondes, vous pouvez exécuter les deux requêtes suivantes à partir de séances de base de données distinctes pour afficher les mêmes résultats.

La première requête SQL qui exécute la fonction UDF Lambda s’exécute avec succès.

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

La deuxième requête s’exécute simultanément, et la fonction UDF Lambda lance de nouvelles tentatives jusqu’à ce que le total des délais atteigne 3 000 millisecondes.

```
select exfunc_upper('Varchar');
 exfunc_upper
--------------
 VARCHAR
(1 row)
```

### Exemple de fonction scalaire UDF Lambda utilisant une fonction Python Lambda
<a name="r_CREATE_FUNCTION-lambda-example-python"></a>

L’exemple suivant crée une fonction externe appelée `exfunc_multiplication` qui multiplie les nombres et renvoie un nombre entier. Cet exemple intègre les champs success et `error_msg` dans la réponse Lambda. Le champ success est défini sur false lorsqu’il y a un dépassement d’entier dans le résultat de la multiplication et que la valeur du message `error_msg` est définie sur `Integer multiplication overflow`. La fonction `exfunc_multiplication` prend trois nombres entiers comme arguments d’entrée et renvoie la somme sous la forme d’une sortie de nombre entier. 

Le nom de la fonction Lambda qui est appelée est `lambda_multiplication`. Le langage utilisé pour cette fonction Lambda est Python 3.8. Veillez à spécifier le rôle IAM.

```
CREATE EXTERNAL FUNCTION exfunc_multiplication(int, int, int)
RETURNS INT
VOLATILE
LAMBDA 'lambda_multiplication'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

La fonction Lambda prend la charge utile de la requête et effectue une itération sur chaque ligne. Toutes les valeurs d’une seule ligne sont multipliées pour calculer le résultat de cette ligne, qui est enregistré dans la liste de réponses. Cet exemple utilise une valeur success booléenne définie sur true par défaut. Si le résultat de multiplication d’une ligne a un dépassement d’entier, la valeur success est définie sur false. Ensuite, la boucle d’itération s’arrête. 

Lorsque la charge utile de la réponse est créée, si la valeur success est false, la fonction Lambda suivante ajoute le champ `error_msg` dans la charge utile. Elle définit également le message d’erreur sur `Integer multiplication overflow`. Si la valeur success est true, les données de résultat sont ajoutées dans le champ results. Le nombre de lignes dans la table de résultats, le cas échéant, est similaire au nombre de lignes reçues dans la charge utile de la requête. 

Le champ arguments de la requête envoyée à la fonction Lambda contient la charge utile de données. Il peut y avoir plusieurs lignes dans la charge utile de données en cas de demande par lots. La fonction Lambda suivante effectue une itération sur toutes les lignes de la charge utile de données de la requête et effectue une itération individuelle sur toutes les valeurs au sein d’une seule ligne. 

```
import json
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # By default success is set to 'True'.
    success = True
    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        mul = 1
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            mul = mul*y

        # Check integer overflow.
        if (mul >= 9223372036854775807 or mul <= -9223372036854775808):
            success = False
            break
        else:
            resp[i] = mul
    ret = dict()
    ret['success'] = success
    if not success:
        ret['error_msg'] = "Integer multiplication overflow"
    else:
        ret['results'] = resp
    ret_json = json.dumps(ret)

    return ret_json
```

L’exemple suivant appelle la fonction externe avec des valeurs littérales.

```
SELECT exfunc_multiplication(8, 9, 2);
  exfunc_multiplication
---------------------------
          144
(1 row)
```

L’exemple suivant crée une table nommée t\$1multi avec trois colonnes, c1, c2 et c3, du type de données entier. La fonction externe est appelée en transmettant les noms de colonnes de cette table. Les données sont insérées de manière à provoquer un dépassement d’entier afin de montrer comment l’erreur est propagée.

```
CREATE TABLE t_multi (c1 int, c2 int, c3 int);
INSERT INTO t_multi VALUES (2147483647, 2147483647, 4);
SELECT exfunc_multiplication(c1, c2, c3) FROM t_multi;
DETAIL:
  -----------------------------------------------
  error:  Integer multiplication overflow
  code:      32004context:
  context:
  query:     38
  location:  exfunc_data.cpp:276
  process:   query2_16_38 [pid=30494]
  -----------------------------------------------
```

# CREATE EXTERNAL MODEL
<a name="r_create_external_model"></a>

**Topics**
+ [Prérequis pour CREATE EXTERNAL MODEL](#r_create_external_model_prereqs)
+ [Privilèges requis](#r_simple_create_model-privileges)
+ [Contrôle des coûts](#r_create_model_cost)
+ [Syntaxe CREATE EXTERNAL MODEL](#r_create_external_model_syntax)
+ [Paramètres et réglages de CREATE EXTERNAL MODEL](#r_create_external_model_parameters_settings)
+ [Paramètres de la fonction d’inférence CREATE EXTERNAL MODEL](#r_create_external_model_if_parameters)

## Prérequis pour CREATE EXTERNAL MODEL
<a name="r_create_external_model_prereqs"></a>

Avant d’utiliser l’instruction CREATE EXTERNAL MODEL, suivez les étapes requises détaillées dans [Configuration du cluster pour l’utilisation d’Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup). Vous trouverez ci-dessous un résumé général des étapes requises.
+ Créez un cluster Amazon Redshift à l'aide de la console de AWS gestion ou de l'interface de ligne de AWS commande (AWS CLI).
+ Attachez la politique AWS Identity and Access Management (IAM) lors de la création du cluster.
+ Pour permettre à Amazon Redshift et Amazon Bedrock d’assumer le rôle afin d’interagir avec d’autres services, ajoutez la politique de confiance appropriée au rôle IAM.
+ Activez l'accès aux informations spécifiques LLMs que vous souhaitez utiliser depuis la console Amazon Bedrock.
+ (Facultatif) Si vous rencontrez des exceptions de limitation provenant d’Amazon Bedrock, par exemple `Too many requests, please wait before trying again`, même avec de petites quantités de données, vérifiez les quotas dans la section **Service Quotas** de votre compte Amazon Bedrock. Vérifiez que le quota appliqué au niveau du compte est au moins identique à la valeur de quota AWS par défaut pour les **InvokeModel**demandes relatives au modèle que vous utilisez.

Pour plus d’informations sur le rôle IAM, la politique d’approbation et d’autres prérequis, consultez [Configuration du cluster pour l’utilisation d’Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup).

## Privilèges requis
<a name="r_simple_create_model-privileges"></a>

Les privilèges suivants sont requis pour CREATE EXTERNAL MODEL :
+ Superuser
+ Utilisateurs disposant du privilège CREATE MODEL
+ Rôles avec le privilège GRANT CREATE MODEL

## Contrôle des coûts
<a name="r_create_model_cost"></a>

 Amazon Redshift ML utilise les ressources existantes du cluster pour créer des modèles de prédiction, de sorte que vous n’avez pas à payer de frais supplémentaires. Toutefois, les AWS frais d'utilisation d'Amazon Bedrock dépendent du modèle que vous sélectionnez. Pour obtenir plus d’informations, consultez [Costs for using Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html) (Coûts d’utilisation d’Amazon Redshift ML). 

## Syntaxe CREATE EXTERNAL MODEL
<a name="r_create_external_model_syntax"></a>

Voici la syntaxe complète de l’instruction CREATE EXTERNAL MODEL.

```
CREATE EXTERNAL MODEL model_name 
FUNCTION function_name
IAM_ROLE {default/'arn:aws:iam::<account-id>:role/<role-name>'}
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID model_id
   [, PROMPT 'prompt prefix']
   [, SUFFIX 'prompt suffix']
   [, REQUEST_TYPE {RAW|UNIFIED}]
   [, RESPONSE_TYPE {VARCHAR|SUPER}]
);
```

La commande `CREATE EXTERNAL MODEL` crée une fonction d’inférence que vous utilisez pour générer du contenu. 

Voici la syntaxe d’une fonction d’inférence que `CREATE EXTERNAL MODEL` crée à l’aide d’un `REQUEST_TYPE` de type `RAW` : 

```
SELECT inference_function_name(request_super) 
[FROM table];
```

Voici la syntaxe d’une fonction d’inférence que `CREATE EXTERNAL MODEL` crée à l’aide d’un `REQUEST_TYPE` de type `UNIFIED` : 

```
SELECT inference_function_name(input_text, [, inference_config [, additional_model_request_fields]])
[FROM table];
```

Pour en savoir plus sur la façon d’utiliser la fonction d’interférence, consultez [Utilisation d’un modèle externe pour l’intégration d’Amazon Redshift ML à Amazon Bedrock](machine-learning-br.md#machine-learning-br-use).

## Paramètres et réglages de CREATE EXTERNAL MODEL
<a name="r_create_external_model_parameters_settings"></a>

Cette section décrit les paramètres et les réglages de la commande `CREATE EXTERNAL MODEL`.

**Topics**
+ [Paramètres de CREATE EXTERNAL MODEL](#r_create_external_model_parameters)
+ [Réglages de CREATE EXTERNAL MODEL](#r_create_external_model_settings)

### Paramètres de CREATE EXTERNAL MODEL
<a name="r_create_external_model_parameters"></a>

model\$1name  
Nom du modèle externe. Le nom du modèle d’un schéma doit être unique.

FUNCTION *function\$1name (data\$1type [,...] )*  
Nom de la fonction d’inférence que `CREATE EXTERNAL MODEL` crée. Vous utilisez la fonction d’inférence pour envoyer des demandes à Amazon Bedrock et récupérer du texte généré par ML.

IAM\$1ROLE * \$1 default \$1 ’arn:aws:iam::<account-id>:role/<role-name>’ \$1*  
Rôle IAM utilisé par Amazon Redshift pour accéder à Amazon Bedrock. Pour obtenir des informations sur le rôle IAM, consultez [Création ou mise à jour d’un rôle IAM pour l’intégration d’Amazon Redshift ML à Amazon Bedrock](machine-learning-br.md#machine-learning-br-iam).

MODEL\$1TYPE BEDROCK  
Spécifie le type de modèle. La seule valeur valide est `BEDROCK`.

SETTINGS ( MODEL\$1ID model\$1id [,...] )  
Spécifie les paramètres du modèle externe. Pour plus d’informations, consultez la section.

### Réglages de CREATE EXTERNAL MODEL
<a name="r_create_external_model_settings"></a>

MODEL\$1ID model\$1id  
L’identifiant du modèle externe, par exemple, `anthropic.claude-v2`. Pour plus d'informations sur le modèle Amazon Bedrock IDs, consultez le modèle [Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html). IDs

PROMPT ’prompt prefix’  
Spécifie une invite statique qu’Amazon Redshift ajoute au début de chaque demande d’inférence. Compatible uniquement avec un `REQUEST_TYPE` de type `UNIFIED`.

SUFFIX ’prompt suffix’  
Spécifie une invite statique qu’Amazon Redshift ajoute à la fin de chaque demande d’inférence. Compatible uniquement avec un `REQUEST_TYPE` de type `UNIFIED`.

REQUEST\$1TYPE \$1 RAW \$1 UNIFIED \$1  
Spécifie le format de la demande envoyée à Amazon Bedrock. Les valeurs valides sont les suivantes :  
+ **RAW** : la fonction d’inférence prend l’entrée comme une super valeur unique et renvoie toujours une super valeur. Le format de la super valeur est spécifique au modèle Amazon Bedrock sélectionné. Un super est un modèle de prédiction qui combine plusieurs algorithmes pour produire une seule prédiction améliorée.
+ **UNIFIED** : la fonction d’inférence utilise l’API unifiée. Tous les modèles disposent d’une interface unifiée et cohérente avec Amazon Bedrock. Cela fonctionne pour tous les modèles compatibles avec les messages. Cette valeur est celle par défaut.

  Pour plus d’informations, consultez la [Documentation de l’API Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html) dans la *Documentation de l’API Amazon Bedrock*.

RESPONSE\$1TYPE \$1 VARCHAR \$1 SUPER \$1  
Spécifie le format de la réponse. Si `REQUEST_TYPE` est de type `RAW`, `RESPONSE_TYPE` est requis et la seule valeur valide est `SUPER`. Pour toutes les autres valeurs `REQUEST TYPE`, la valeur par défaut est `VARCHAR` et `RESPONSE_TYPE` est facultatif. Les valeurs valides sont les suivantes :  
+ **VARCHAR** : Amazon Redshift renvoie uniquement le texte de réponse généré par le modèle.
+ **SUPER** : Amazon Redshift renvoie l’intégralité de la réponse JSON générée par le modèle sous forme de super. Cela inclut la réponse textuelle et des informations telles que le motif de l’arrêt et l’utilisation du jeton d’entrée et de sortie du modèle. Un super est un modèle de prédiction qui combine plusieurs algorithmes pour produire une seule prédiction améliorée. 

## Paramètres de la fonction d’inférence CREATE EXTERNAL MODEL
<a name="r_create_external_model_if_parameters"></a>

Cette section décrit les paramètres valides pour la fonction d’inférence créée par la commande `CREATE EXTERNAL MODEL`. 

### Paramètres de la fonction d’inférence CREATE EXTERNAL MODEL pour `REQUEST_TYPE` de type `RAW`
<a name="r_create_external_model_if_parameters_raw"></a>

Une fonction d’inférence créée avec un `REQUEST_TYPE` de type `RAW` possède un super argument d’entrée et renvoie toujours un super type de données. La syntaxe du super d’entrée suit la syntaxe de la demande du modèle spécifique sélectionné à partir d’Amazon Bedrock.

### Paramètres de la fonction d’inférence CREATE EXTERNAL MODEL pour `REQUEST_TYPE` de type `UNIFIED`
<a name="r_create_external_model_if_parameters_unified"></a>

input\$1text  
Le texte qu’Amazon Redshift envoie à Amazon Bedrock.

inference\$1config  
Une super valeur qui contient des paramètres facultatifs qu’Amazon Redshift envoie à Amazon Bedrock. Il peut s’agir des éléments suivants :  
+ maxTokens
+ stopSequences
+ temperature
+ topP
Ces paramètres sont tous facultatifs et tous sensibles à la casse. Pour plus d'informations sur ces paramètres, consultez le [ InferenceConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html)manuel *Amazon Bedrock API Reference*.

# CREATE EXTERNAL SCHEMA
<a name="r_CREATE_EXTERNAL_SCHEMA"></a>

Crée un schéma externe dans la base de données actuelle. Vous pouvez utiliser ce schéma externe pour vous connecter à des bases de données Amazon RDS for PostgreSQL ou d’édition compatible avec Amazon Aurora PostgreSQL. Vous pouvez également créer un schéma externe qui fait référence à une base de données dans un catalogue de données externe tel qu' AWS Glue Athena ou à une base de données dans un métastore Apache Hive, tel qu'Amazon EMR.

Le propriétaire de ce schéma est l’auteur de la commande CREATE EXTERNAL SCHEMA. Pour transférer la propriété d’un schéma externe, utilisez [ALTER SCHEMA](r_ALTER_SCHEMA.md) pour modifier le propriétaire. Utilisez la commande [GRANT](r_GRANT.md) pour autoriser d’autres utilisateurs ou groupes d’utilisateurs à accéder au schéma. 

Vous ne pouvez pas utiliser les commandes GRANT ou REVOKE pour des autorisations concernant une table externe. Vous pouvez en revanche accorder ou révoquer les autorisations pour le schéma externe. 

**Note**  
Si vous disposez actuellement de tables externes Redshift Spectrum dans le catalogue de données Amazon Athena, vous pouvez procéder à la migration de votre catalogue de données Athena vers un AWS Glue Data Catalog. Pour utiliser le catalogue de AWS Glue données avec Redshift Spectrum, vous devrez peut-être modifier vos politiques Gestion des identités et des accès AWS (IAM). Pour plus d'informations, consultez la section [Mise à niveau vers le catalogue de AWS Glue données](https://docs.aws.amazon.com/athena/latest/ug/glue-athena.html#glue-upgrade) dans le guide de l'*utilisateur d'Athena*.

Pour afficher les détails relatifs aux schémas externes, interrogez la vue système [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md). 

## Syntaxe
<a name="r_CREATE_EXTERNAL_SCHEMA-synopsis"></a>

La syntaxe suivante décrit la commande CREATE EXTERNAL SCHEMA utilisée pour référencer des données à l’aide d’un catalogue de données externe. Pour plus d'informations, consultez [Amazon Redshift Spectrum](c-using-spectrum.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM [ [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT | KAFKA ]
[ DATABASE 'database_name' ]
[ SCHEMA 'schema_name' ]
[ REGION 'aws-region' ]
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<Compte AWS-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ]
[ URI ['hive_metastore_uri' [ PORT port_number ] | 'hostname' [ PORT port_number ] | 'Kafka bootstrap URL'] ] 
[ CLUSTER_ARN 'arn:aws:kafka:<region>:<Compte AWS-id>:cluster/msk/<cluster uuid>' ]
[ CATALOG_ROLE [ 'SESSION' | 'catalog-role-arn-string' ] ]
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]
[ CATALOG_ID 'Amazon Web Services account ID containing Glue or Lake Formation database' ]
```

La syntaxe suivante décrit la commande CREATE EXTERNAL SCHEMA utilisée pour référencer des données à l’aide d’une requête fédérée vers RDS POSTGRES ou Aurora PostgreSQL. Vous pouvez également créer un schéma externe qui fait référence à des sources de streaming, telles que Kinesis Data Streams. Pour plus d’informations, consultez [Interrogation de données avec requête fédérée dans Amazon Redshift](federated-overview.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM POSTGRES
DATABASE 'federated_database_name' [SCHEMA 'schema_name']
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<Compte AWS-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

La syntaxe suivante décrit la commande CREATE EXTERNAL SCHEMA utilisée pour référencer des données à l’aide d’une requête fédérée vers RDS MySQL ou Aurora MySQL. Pour plus d’informations, consultez [Interrogation de données avec requête fédérée dans Amazon Redshift](federated-overview.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM MYSQL
DATABASE 'federated_database_name'
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<Compte AWS-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

La syntaxe suivante décrit la commande CREATE EXTERNAL SCHEMA utilisée pour référencer des données dans un flux Kinesis. Pour plus d’informations, consultez [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KINESIS
IAM_ROLE [ default | 'arn:aws:iam::<Compte AWS-id>:role/<role-name>' ]
```

La syntaxe suivante décrit la commande CREATE EXTERNAL SCHEMA utilisée pour référencer le cluster Amazon Managed Streaming pour Apache Kafka ou Confluent Cloud et ses rubriques à partir desquelles s’effectue l’ingestion. Pour vous connecter, vous devez fournir l’URI de l’agent. Pour plus d’informations, consultez [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md).

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KAFKA
[ IAM_ROLE [ default | 'arn:aws:iam::<Compte AWS-id>:role/<role-name>' ] ]
URI 'Kafka bootstrap URI'
AUTHENTICATION [ none | iam | mtls ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ];
```

La syntaxe suivante décrit la commande CREATE EXTERNAL SCHEMA utilisée pour référencer des données à l’aide d’une requête entre bases de données.

```
CREATE EXTERNAL SCHEMA local_schema_name
FROM  REDSHIFT
DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'
```

## Parameters
<a name="r_CREATE_EXTERNAL_SCHEMA-parameters"></a>

IF NOT EXISTS  
Clause indiquant que si le schéma spécifié existe déjà, la commande ne doit apporter aucune modification et renvoyer un message selon lequel le schéma existe, plutôt que de s’arrêter avec une erreur. Puisque cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si CREATE EXTERNAL SCHEMA tente de créer un schéma qui existe déjà. 

local\$1schema\$1name  
Nom du nouveau schéma externe. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

FROM [ DATA CATALOG ] \$1 HIVE METASTORE \$1 POSTGRES \$1 MYSQL \$1 KINESIS \$1 MSK \$1 REDSHIFT   
Mot-clé indiquant où se situe la base de données externe.   
DATA CATALOG indique que la base de données externe est définie dans le catalogue de données Athena ou AWS Glue Data Catalog.   
Si la base de données externe est définie dans un catalogue de données externe dans une autre région AWS , le paramètre REGION est requis. La valeur par défaut est DATA CATALOG.  
HIVE METASTORE indique que la base de données externe est définie dans un metastore Apache Hive. L’URI est obligatoire si HIVE METASTORE est spécifié.   
POSTGRES indique que la base de données externe est définie dans RDS PostgreSQL ou Aurora PostgreSQL.  
MYSQL indique que la base de données externe est définie dans RDS MySQL ou Aurora MySQL.  
KINESIS indique que la source de données est un flux de Kinesis Data Streams.  
MSK indique que la source de données est un cluster Amazon MSK alloué ou sans serveur.  
KAFKA indique que la source de données est un cluster Kafka. Vous pouvez utiliser ce mot clé pour Amazon MSK et Confluent Cloud.

FROM REDSHIFT  
Mot-clé indiquant que la base de données se trouve dans Amazon Redshift.

DATABASE ’*nom\$1base\$1de\$1données\$1redshift*’ SCHEMA ’*nom\$1schéma\$1redshift*’  
Nom de la base de données Amazon Redshift.   
Le *nom\$1schéma\$1redshift* indique le schéma dans Amazon Redshift. La valeur par défaut de *nom\$1schéma\$1redshift* est `public`.

DATABASE ’*nom\$1base\$1de\$1données\$1fédérée*’  
Mot-clé qui indique le nom de la base de données externe dans un moteur de base de données PostgreSQL ou MySQL. 

[SCHEMA ’*schema\$1name*’]  
Le *nom\$1schéma* indique le schéma dans un moteur de base de données PostgreSQL pris en charge. Le *nom\$1schéma* par défaut est `public`.  
Vous ne pouvez pas spécifier de SCHEMA lorsque vous configurez une requête fédérée sur un moteur de base de données MySQL pris en charge. 

REGION ’*aws-region*’  
Si la base de données externe est définie dans un catalogue de données Athena ou dans la AWS Glue Data Catalog AWS région dans laquelle se trouve la base de données. Si la base de données est définie dans un catalogue de données externe, ce paramètre est obligatoire. 

URI [ ’hive\$1metastore\$1uri’ [ PORT port\$1number ] \$1 ’hostname’ [ PORT port\$1number ] \$1 ’Kafka bootstrap URI’ ]  
URI du nom\$1hôte et numéro\$1port d’un moteur de base de données PostgreSQL ou MySQL pris en charge. *nom\$1hôte* est le nœud principal du jeu de réplicas. Le point de terminaison doit être accessible (routable) à partir du cluster Amazon Redshift. Le numéro de port (port\$1number) par défaut pour PostgreSQL est 5432. Le numéro de port (port\$1number) par défaut pour MySQL est 3306.  
Le moteur de base de données PostgreSQL ou MySQL pris en charge doit être dans le même VPC que votre cluster Amazon Redshift avec un groupe de sécurité reliant Amazon Redshift et RDS url-rsPostgreSQL ou Aurora PostgreSQL. En outre, vous pouvez utiliser le routage VPC amélioré pour configurer un cas d’utilisation inter-VPC. Pour plus d’informations, consultez [Points de terminaison d’un VPC géré par Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html).
**Spécification d’un URI de métastore Hive**  
Si la base de données se trouve dans un metastore Hive, spécifiez l’URI et éventuellement le numéro de port du metastore. Le numéro de port par défaut est 9083.   
Un URI ne contient pas de spécification de protocole (« http:// »). Voici un exemple d’URI valide : `uri '172.10.10.10'`.   
**Spécification d’un URI d’agent pour l’ingestion en streaming**  
L’inclusion de l’URI de l’agent d’amorçage permet de se connecter à un cluster Amazon MSK ou Confluent Cloud et de recevoir des données en streaming. Pour plus d’informations et un exemple, consultez [Mise en route de l’ingestion en streaming à partir d’Amazon Managed Streaming pour Apache Kafka](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html).

IAM\$1ROLE [par défaut \$1 'SESSION' \$1 'arn:aws:iam : :role/ '] *<Compte AWS-id>* *<role-name>*  
Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini par défaut et associé au cluster lorsque la commande CREATE EXTERNAL SCHEMA s’exécute.  
Utilisez `'SESSION'` si vous vous connectez à votre cluster Amazon Redshift à l’aide d’une identité fédérée et que vous accédez aux tables à partir du schéma externe créé à l’aide de cette commande. Pour plus d’informations, consultez [Utilisation d’une identité fédérée pour gérer l’accès à Amazon Redshift aux ressources locales et aux tables externes Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html), qui explique comment configurer l’identité fédérée. Notez que cette configuration, qui utilise `'SESSION'` à la place de l’ARN, ne peut être utilisée que si le schéma est créé à l’aide de `DATA CATALOG`.   
Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. Au minimum, le rôle IAM doit être autorisé à exécuter une opération LIST sur le compartiment Amazon S3 devant être accessible et une opération GET sur les objets Amazon S3 contenus dans le compartiment.  
Le code suivant montre la syntaxe de la chaîne de paramètre IAM\$1ROLE pour un seul ARN.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Vous pouvez créer des chaînes de rôles pour permettre à votre cluster d’endosser un autre rôle IAM, y compris un rôle appartenant à un autre compte. Les chaînes ainsi créées peuvent inclure jusqu’à 10 rôles. Pour voir un exemple de création de chaîne de rôles, consultez [Créer des rôles IAM dans Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Attachez à ce rôle IAM une politique d’autorisations IAM similaire à la suivante.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Pour connaître les étapes à suivre afin de créer un rôle IAM à utiliser avec une requête fédérée, consultez [Création d’un secret et d’un rôle IAM pour utiliser des requêtes fédérées](federated-create-secret-iam-role.md).   
N’incluez pas d’espaces dans la liste des rôles chaînés.
L’exemple suivant montre la syntaxe d’une chaîne de trois rôles.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

SECRET\$1ARN « » *ssm-secret-arn*  
Le nom de ressource Amazon (ARN) d'un secret de moteur de base de données PostgreSQL ou MySQL pris en charge créé à l'aide de. AWS Secrets Manager Pour plus d’informations sur la création et la récupération d’un ARN pour un secret, consultez [Gérer les secrets avec AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) dans le *Guide de l’utilisateur AWS Secrets Manager * et [Récupération de l’Amazon Resource Name (ARN) du secret dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html). 

CATALOG\$1ROLE ['SESSION' \$1] *catalog-role-arn-string*  
`'SESSION'`À utiliser pour vous connecter à votre cluster Amazon Redshift à l’aide d’une identité fédérée à des fins d’authentification et d’autorisation du catalogue de données. Pour plus d’informations sur la réalisation des étapes relatives à l’identité fédérée, consultez [Utilisation d’une identité fédérée pour gérer l’accès d’Amazon Redshift aux ressources locales et aux tables externes Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). Notez que le`'SESSION'` rôle ne peut être utilisé que si le schéma est créé dans DATA CATALOG.  
Nom Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation.   
Si CATALOG\$1ROLE n’est pas spécifié, Amazon Redshift utilise la valeur IAM\$1ROLE spécifiée. Le rôle du catalogue doit être autorisé à accéder au catalogue de données dans AWS Glue ou Athena. Pour de plus amples informations, veuillez consulter [Politiques IAM pour Amazon Redshift Spectrum](c-spectrum-iam-policies.md).   
Le code suivant montre la syntaxe de la chaîne de paramètre CATALOG\$1ROLE pour un seul ARN.  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role>'
```
Vous pouvez créer des chaînes de rôles pour permettre à votre cluster d’endosser un autre rôle IAM, y compris un rôle appartenant à un autre compte. Les chaînes ainsi créées peuvent inclure jusqu’à 10 rôles. Pour plus d'informations, consultez [Créer des rôles IAM dans Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
La liste des rôles de la chaîne ne doit pas inclure d’espaces.
L’exemple suivant montre la syntaxe d’une chaîne de trois rôles.  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role-1-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-2-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-3-name>'
```


CREATE EXTERNAL DATABASE IF NOT EXISTS  
Clause qui crée une base de données externe avec le nom spécifié par l’argument DATABASE, si la base de données externe spécifiée n’existe pas. La commande n’apporte aucune modification si la base de données externe spécifiée existe. Dans ce cas, la commande renvoie un message indiquant que la base de données externe existe, plutôt que de s’arrêter avec une erreur.  
La clause CREATE EXTERNAL DATABASE IF NOT EXISTS ne peut pas être utilisée avec HIVE METASTORE.  
Pour utiliser CREATE EXTERNAL DATABASE IF NOT EXISTS avec un catalogue de données activé pour AWS Lake Formation, vous devez disposer de l’autorisation `CREATE_DATABASE` sur le catalogue de données. 

CATALOG\$1ID « ID de *compte Amazon Web Services contenant la base de données Glue ou Lake Formation* »  
L’identifiant du compte sur lequel la base de données du catalogue de données est stockée.  
`CATALOG_ID`peut être spécifiée uniquement si vous prévoyez de vous connecter à votre cluster Amazon Redshift ou à Amazon Redshift sans serveur à l’aide d’une identité fédérée pour l’authentification et l’autorisation du catalogue de données en définissant l’une des options suivantes :   
+ `CATALOG_ROLE` sur `'SESSION'`
+ `IAM_ROLE`à`'SESSION'` et`'CATALOG_ROLE'` régler sur sa valeur par défaut 
Pour plus d’informations sur la réalisation des étapes relatives à l’identité fédérée, consultez [Utilisation d’une identité fédérée pour gérer l’accès d’Amazon Redshift aux ressources locales et aux tables externes Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html). 

AUTHENTICATION  
Type d’authentification défini pour l’ingestion en streaming. L’ingestion en streaming assortie de types d’authentification fonctionne avec Amazon Managed Streaming for Apache Kafka. Les types `AUTHENTICATION` sont les suivants :  
+ **none** : indique l’absence de toute authentification requise. Cela correspond à un accès non authentifié sur MSK ou en texte brut avec TLS sur Apache Kafka.
+ **iam** – Indique une authentification IAM. Lorsque vous choisissez cette option, vérifiez que le rôle IAM dispose des autorisations nécessaires à l’authentification IAM. Pour en savoir plus sur la définition du schéma externe, consultez [Mise en route de l’ingestion en streaming à partir de sources Apache Kafka](materialized-view-streaming-ingestion-getting-started-MSK.md).
+ **mtls** : indique que le protocole mTLS (Mutual Transport Layer Security) assure une communication sécurisée en facilitant l’authentification entre un client et un serveur. Dans ce cas, le client est Redshift et le serveur est Amazon MSK. Pour de plus amples informations sur la configuration de l’ingestion en streaming avec mTLS, consultez [Authentification avec mTLS pour l’ingestion en streaming Redshift à partir de sources Apache Kafka](materialized-view-streaming-ingestion-mtls.md).


AUTHENTICATION\$1ARN  
L'ARN du AWS Certificate Manager certificat utilisé par Amazon Redshift pour l'authentification MTLS avec Amazon MSK. L’ARN est disponible dans la console ACM lorsque vous choisissez le certificat émis.

CLUSTER\$1ARN  
Pour l’ingestion en streaming, CLUSTER\$1ARN est l’identifiant de cluster Amazon Managed Streaming pour Apache Kafka à partir duquel vous effectuez le streaming. Lorsque vous utilisez CLUSTER\$1ARN, une politique de rôle IAM incluant l’autorisation `kafka:GetBootstrapBrokers` est requise. Cette option est fournie à des fins de rétrocompatibilité. Actuellement, nous recommandons d’utiliser l’option d’URI de l’agent d’amorçage pour vous connecter aux clusters Amazon Managed Streaming pour Apache Kafka. Pour plus d’informations, consultez [Ingestion en streaming (version préliminaire)](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html).

## Notes d’utilisation
<a name="r_CREATE_EXTERNAL_SCHEMA_usage"></a>

Pour connaître les restrictions relatives à l’utilisation du catalogue de données Athena, consultez [Athena Limits](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#amazon-athena-limits) dans Références générales AWS.

Pour connaître les limites d'utilisation du AWS Glue Data Catalog, voir [AWS Glue Limites](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_glue) dans le Références générales AWS.

Ces restrictions ne s’appliquent pas à un metastore Hive.

Il y a un maximum de 9 900 schémas par base de données. Pour plus d’informations, consultez [Quotas et limites](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dans le *Guide de gestion Amazon Redshift*.

Pour annuler l’enregistrement du schéma, utilisez la commande [DROP SCHEMA](r_DROP_SCHEMA.md). 

Pour afficher les détails relatifs aux schémas externes, interrogez les vues système suivantes : 
+ [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md) 
+ [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) 
+ [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) 

## Exemples
<a name="r_CREATE_EXTERNAL_SCHEMA_examples"></a>

L’exemple suivant permet de créer un schéma externe en utilisant une base de données dans un catalogue de données nommé `sampledb` dans la région USA Ouest (Oregon). Utilisez cet exemple avec un catalogue de données Athena ou AWS Glue .

```
create external schema spectrum_schema
from data catalog
database 'sampledb'
region 'us-west-2'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

L’exemple suivant permet de créer un schéma externe ainsi qu’une base de données externe nommée `spectrum_db`.

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole'
create external database if not exists;
```

L’exemple suivant permet de créer un schéma externe en utilisant une base de données de metastore Hive nommée `hive_db`.

```
create external schema hive_schema
from hive metastore
database 'hive_db'
uri '172.10.10.10' port 99
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

L’exemple suivant établit une chaîne de rôles afin d’utiliser le rôle `myS3Role` pour accéder à Amazon S3 et `myAthenaRole` pour l’accès au catalogue de données. Pour plus d'informations, consultez [Créer des rôles IAM dans Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myRedshiftRole,arn:aws:iam::123456789012:role/myS3Role'
catalog_role 'arn:aws:iam::123456789012:role/myAthenaRole'
create external database if not exists;
```

L’exemple suivant crée un schéma externe qui référence une base de données Aurora PostgreSQL. 

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM POSTGRES
DATABASE 'my_aurora_db' SCHEMA 'my_aurora_schema'
URI 'endpoint to aurora hostname' PORT 5432  
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

L’exemple suivant crée un schéma externe pour renvoyer à la base de données sales\$1db importée sur le cluster consommateur.

```
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
```

L’exemple suivant crée un schéma externe qui référence une base de données Aurora MySQL. 

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM MYSQL
DATABASE 'my_aurora_db'
URI 'endpoint to aurora hostname'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

# CREATE EXTERNAL TABLE
<a name="r_CREATE_EXTERNAL_TABLE"></a>

Crée une table externe dans le schéma spécifié. Toutes les tables externes doivent être créées dans un schéma externe. Le chemin de recherche n’est pas pris en charge pour les schémas et tables externes. Pour de plus amples informations, veuillez consulter [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md).

Outre les tables externes créées à l'aide de la commande CREATE EXTERNAL TABLE, Amazon Redshift peut faire référence à des tables externes définies dans un AWS Lake Formation catalogue AWS Glue ou un métastore Apache Hive. Utilisez la commande [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md) pour enregistrer une base de données externe définie dans un catalogue de données externe, et faites en sorte que les tables externes puissent être utilisées dans Amazon Redshift. Si la table externe existe dans un AWS Lake Formation catalogue AWS Glue ou un métastore Hive, vous n'avez pas besoin de créer la table à l'aide de CREATE EXTERNAL TABLE. Pour afficher les tables externes, interrogez la vue système [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md). 

En exécutant la commande CREATE EXTERNAL TABLE AS, vous pouvez créer une table externe basée sur la définition de colonne d’une requête et écrire les résultats de cette requête dans Amazon S3. Les résultats sont au format Apache Parquet ou au format texte délimité. Si la table externe possède une ou plusieurs clés de partition, Amazon Redshift partitionne les nouveaux fichiers en fonction de ces clés de partition et enregistre automatiquement les nouvelles partitions dans le catalogue externe. Pour plus d’informations sur la commande CREATE EXTERNAL TABLE AS, consultez [Notes d’utilisation](r_CREATE_EXTERNAL_TABLE_usage.md). 

Vous pouvez interroger une table externe en utilisant la même syntaxe SELECT que celle que vous utilisez avec d’autres tables Amazon Redshift. Vous pouvez également utiliser la syntaxe INSERT pour écrire de nouveaux fichiers à l’emplacement de la table externe sur Amazon S3. Pour plus d'informations, consultez [INSERT (table externe)](r_INSERT_external_table.md).

Pour créer une vue avec une table externe, incluez la clause WITH NO SCHEMA BINDING dans l’instruction [CREATE VIEW](r_CREATE_VIEW.md).

Vous ne pouvez pas exécuter CREATE EXTERNAL TABLE à l’intérieur d’une transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

## Privilèges requis
<a name="r_CREATE_EXTERNAL_TABLE-privileges"></a>

Pour créer des tables externes, vous devez être le propriétaire du schéma externe ou un superutilisateur. Pour transférer la propriété d’un schéma externe, utilisez ALTER SCHEMA pour modifier le propriétaire. L’accès aux tables externes est contrôlé par l’accès au schéma externe. Vous ne pouvez pas accorder [GRANT](r_GRANT.md) ni révoquer [REVOKE](r_REVOKE.md) des autorisations pour une table externe. A la place, accordez ou révoquez USAGE sur le schéma externe.

Vous trouverez dans les [Notes d’utilisation](r_CREATE_EXTERNAL_TABLE_usage.md) des informations complémentaires sur les autorisations spécifiques des tables externes.

## Syntaxe
<a name="r_CREATE_EXTERNAL_TABLE-synopsis"></a>

```
CREATE EXTERNAL TABLE
external_schema.table_name
(column_name data_type [, …] )
[ PARTITIONED BY (col_name data_type [, … ] )]
[ { ROW FORMAT DELIMITED row_format |
  ROW FORMAT SERDE 'serde_name'
  [ WITH SERDEPROPERTIES ( 'property_name' = 'property_value' [, ...] ) ] } ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
```

Voici la syntaxe de la commande CREATE EXTERNAL TABLE AS.

```
CREATE EXTERNAL TABLE
external_schema.table_name
[ PARTITIONED BY (col_name [, … ] ) ]
[ ROW FORMAT DELIMITED row_format ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
 AS
 { select_statement }
```

## Parameters
<a name="r_CREATE_EXTERNAL_TABLE-parameters"></a>

 *schéma\$1externe.nom\$1table*   
Nom de la table à créer, qualifié par un nom de schéma externe. Les tables externes doivent être créées dans un schéma externe. Pour plus d'informations, consultez [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md).  
La longueur maximale d’un nom de table est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Vous pouvez utiliser des caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Amazon Redshift impose une limite de 9 900 tables par cluster, y compris les tables temporaires définies par l’utilisateur et les tables temporaires créées par Amazon Redshift lors du traitement des requêtes ou de la maintenance du système. Le cas échéant, le nom de la table peut être qualifié avec le nom de la base de données. Dans l’exemple suivant, le nom de base de données est `spectrum_db`, le nom du schéma externe est `spectrum_schema` et le nom de la table est `test`.  

```
create external table spectrum_db.spectrum_schema.test (c1 int)
stored as parquet
location 's3://amzn-s3-demo-bucket/myfolder/';
```
Si la base de données ou le schéma spécifié n’existe pas, la table n’est pas créée et l’instruction renvoie une erreur. Vous ne pouvez pas créer de tables ni de vues dans les bases de données système `template0`, `template1`, `padb_harvest` ou `sys:internal`.  
Le nom de la table doit être un nom unique pour le schéma spécifié.   
Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

( *nom\$1colonne* *type\$1données* )  
Nom et type de données de chaque colonne en cours de création.  
La longueur maximale d’un nom de colonne est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Vous pouvez utiliser des caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Vous ne pouvez pas spécifier de noms de colonne `"$path"` ou `"$size"`. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).  
Par défaut, Amazon Redshift crée les tables externes avec les pseudo-colonnes `$path` et `$size`. Vous pouvez désactiver la création de pseudo-colonnes d’une séance en définissant le paramètre de configuration `spectrum_enable_pseudo_columns` avec la valeur `false`. Pour plus d'informations, consultez [Pseudocolonnes](r_CREATE_EXTERNAL_TABLE_usage.md#r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns).  
Si les pseudo-colonnes sont activées, le nombre maximal de colonnes que vous pouvez définir dans une seule table est 1 598. Si les pseudo-colonnes ne sont pas activées, le nombre maximal de colonnes que vous pouvez définir dans une seule table est 1 600.   
Si vous créez une grande table, assurez-vous que la liste de colonnes ne dépasse pas les limites de largeur de ligne pour les résultats intermédiaires pendant le traitement des charges et des requêtes. Pour plus d'informations, consultez [Notes d’utilisation](r_CREATE_TABLE_NEW.md#r_CREATE_TABLE_usage).  
Pour une commande CREATE EXTERNAL TABLE AS, aucune liste de colonnes n’est requise, car les colonnes sont dérivées de la requête.

 *data\$1type*   
Les encodages [Types de données](c_Supported_data_types.md) suivants sont pris en charge :  
+ PETITE MENTHE () INT2
+ ENTIER (INT, INT4)
+ BIGINT () INT8
+ DECIMAL (NUMERIC)
+ RÉEL (FLOAT4)
+ DOUBLE PRÉCISION (FLOAT8)
+ BOOLEAN (BOOL)
+ CHAR (CHARACTER)
+ VARCHAR (CHARACTER VARYING)
+ VARBYTE (CHARACTER VARYING) : peut être utilisé avec des fichiers de données Parquet et ORC, et uniquement avec des tables non partitionnées.
+ DATE : peut être utilisé uniquement avec du texte ou des fichiers de données Parquet ou ORC, ou comme colonne de partition.
+ TIMESTAMP
  
Pour DATE, vous pouvez utiliser les formats décrits ci-dessous. Pour les valeurs de mois représentées à l’aide de chiffres, les formats suivants sont pris en charge :  
+ `mm-dd-yyyy` Par exemple, `05-01-2017`. Il s’agit de l’option par défaut.
+ `yyyy-mm-dd`, où l’année est représentée par plus de deux chiffres. Par exemple, `2017-05-01`.
Pour les valeurs de mois représentées à l’aide de l’abréviation de trois lettres, les formats suivants sont pris en charge :  
+ `mmm-dd-yyyy` Par exemple, `may-01-2017`. Il s’agit de l’option par défaut.
+ `dd-mmm-yyyy`, où l’année est représentée par plus de deux chiffres. Par exemple, `01-may-2017`.
+ `yyyy-mmm-dd`, où l’année est représentée par plus de deux chiffres. Par exemple, `2017-may-01`.
Pour les valeurs d’années qui sont constamment inférieures à 100, l’année est calculée de la manière suivante :  
+ Si l’année est inférieure à 70, elle est calculée comme l’année plus 2000. Par exemple, la date 05-01-17 au format `mm-dd-yyyy` est convertie au format `05-01-2017`.
+ Si l’année est inférieure à 100 et supérieure à 69, l’année est calculée comme l’année plus 1900. Par exemple, la date 05-01-89 au format `mm-dd-yyyy` est convertie au format `05-01-1989`.
+ Pour les valeurs d’année représentées par deux chiffres, ajoutez les zéros de tête pour représenter l’année en quatre chiffres.
Les valeurs d’horodatage dans les fichiers texte doivent être au format `yyyy-mm-dd HH:mm:ss.SSSSSS`, comme illustré par la valeur d’horodatage suivante : `2017-05-01 11:30:59.000000`.  
La longueur d’une colonne VARCHAR est définie en octets et non pas en caractères. Par exemple, une colonne VARCHAR(12) peut contenir 12 caractères codés sur un octet ou 6 caractères codés sur deux octets. Lorsque vous interrogez une table externe, les résultats sont tronqués pour s’adapter à la taille définie de la colonne sans renvoyer d’erreur. Pour plus d'informations, consultez [Stockage et plages](r_Character_types.md#r_Character_types-storage-and-ranges).   
Pour de meilleures performances, nous vous recommandons de spécifier la plus petite taille de colonne adaptée à vos données. Pour rechercher la taille maximale en octets des valeurs d’une colonne, utilisez la fonction [OCTET\$1LENGTH](r_OCTET_LENGTH.md). L’exemple suivant renvoie la taille maximale des valeurs de la colonne EMAIL.  

```
select max(octet_length(email)) from users;

max
---
 62
```

PARTITIONED BY (*nom\$1col* *type\$1données* [, … ] )  
Clause qui définit une table partitionnée avec une ou plusieurs colonnes de partition. Un répertoire de données distinct est utilisé pour chaque combinaison spécifiée, ce qui dans certains cas améliore la performance des requêtes. Les colonnes partitionnées n’existent pas au sein même des données de la table. Si la valeur de *nom\$1col* est identique à celle d’une colonne de table, une erreur est renvoyée.   
Après avoir créé une table partitionnée, modifiez-la à l’aide d’une instruction [ALTER TABLE](r_ALTER_TABLE.md) ... ADD PARTITION pour enregistrer de nouvelles partitions dans le catalogue externe. Lorsque vous ajoutez une partition, vous définissez l’emplacement du sous-dossier sur Amazon S3 qui contient les données de partition.  
Par exemple, si la table `spectrum.lineitem_part` est définie avec `PARTITIONED BY (l_shipdate date)`, exécutez la commande ALTER TABLE suivante pour ajouter une partition.  

```
ALTER TABLE spectrum.lineitem_part ADD PARTITION (l_shipdate='1992-01-29')
LOCATION 's3://spectrum-public/lineitem_partition/l_shipdate=1992-01-29';
```
Si vous utilisez la commande CREATE EXTERNAL TABLE AS, vous n’avez pas besoin d’exécuter la commande ALTER TABLE...ADD PARTITION. Amazon Redshift enregistre automatiquement les nouvelles partitions dans le catalogue externe. Amazon Redshift écrit également automatiquement les données correspondantes dans les partitions d’Amazon S3 en fonction de la ou des clés de partition définies dans la table.  
Pour afficher les partitions, interrogez la vue système [SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md).  
Pour une commande CREATE EXTERNAL TABLE AS, vous n’avez pas besoin de spécifier le type de données de la colonne de partition car cette colonne est dérivée de la requête. 

ROW FORMAT DELIMITED *format\$1ligne*  
Clause qui spécifie le format des données sous-jacentes. Les valeurs possibles pour *format\$1ligne* sont les suivantes :  
+ LINES TERMINATED BY ’*délimiteur*’ 
+ FIELDS TERMINATED BY ’*délimiteur*’ 
Spécifiez un caractère ASCII unique pour ’*délimiteur*’. Vous pouvez spécifier des caractères ASCII non imprimables en octal, au format `'\`*`ddd`*`'`, où *`d`* est un chiffre octal (de 0 à 7) jusqu’à « \$1177 ». L’exemple suivant spécifie le caractère BEL (bell) en octal.   

```
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
```
Si ROW FORMAT est omis, le format par défaut est DELIMITED FIELDS TERMINATED BY ’\$1A’ (début d’en-tête)et LINES TERMINATED BY ’\$1n’ (nouvelle ligne). 

ROW FORMAT SERDE ’*nom\$1sérialisation\$1désérialisation*’ [WITH SERDEPROPERTIES ( ’*nom\$1propriété*’ = ’*valeur\$1propriété*’ [, ...] ) ]  
Clause qui spécifie le format SERDE des données sous-jacentes.     
’*nom\$1sérialisation\$1désérialisation*’  
Le nom de l' SerDe. Vous pouvez spécifier les formats suivants :  
+ org.apache.hadoop.hive.serde2. RegexSerDe 
+ com.amazonaws.glue.serde. GrokSerDe 
+ org.apache.hadoop.hive.serde2.ouvrir CSVSerde 

  Ce paramètre prend en charge la SerDe propriété suivante pour Open CSVSerde : 

  ```
  'wholeFile' = 'true' 
  ```

  Définissez la propriété `wholeFile` sur `true` pour analyser correctement les caractères de nouvelle ligne (\$1n) dans les chaînes entre guillemets pour les requêtes OpenCSV. 
+ org.openx.data.json. JsonSerDe
  + Le SERDE JSON prend également en charge les fichiers Ion. 
  + Le JSON doit être dans un format correct. 
  + Les horodatages dans Ion et JSON doivent utiliser ISO8601 le format.
  + Ce paramètre prend en charge les SerDe propriétés suivantes pour JsonSerDe : 

    ```
    'strip.outer.array'='true' 
    ```

     Ion/JSON Traite les fichiers contenant un très grand tableau entre crochets ([...]) comme s'il contenait plusieurs enregistrements JSON dans le tableau. 
+ com.amazon.ionhiveserde. IonHiveSerDe

  Le format Amazon ION fournit des formats texte et binaire, en plus des types de données. Pour une table externe qui fait référence à des données au format ION, vous mappez chaque colonne de la table externe à l’élément correspondant dans les données au format ION. Pour plus d’informations, consultez [Amazon Ion](https://amzn.github.io/ion-docs/). Vous devez également spécifier les formats d’entrée et de sortie.  
WITH SERDEPROPERTIES ( ’*nom\$1propriété*’ = ’*valeur\$1propriété*’ [, ...] ) ]  
À titre facultatif, spécifiez les noms et valeurs des propriétés, séparés par des virgules.
Si ROW FORMAT est omis, le format par défaut est DELIMITED FIELDS TERMINATED BY ’\$1A’ (début d’en-tête)et LINES TERMINATED BY ’\$1n’ (nouvelle ligne). 

STORED AS *format\$1fichier*  
Format des fichiers de données.   
Les formats valides sont les suivants :  
+ PARQUET
+ RCFILE (pour l'utilisation des données ColumnarSerDe uniquement, pas LazyBinaryColumnarSerDe)
+ SEQUENCEFILE
+ TEXTFILE (pour les fichiers texte, y compris les fichiers JSON).
+ ORC 
+ AVRO 
+ INPUTFORMAT ’*nom\$1classe\$1format\$1entrée*’ OUTPUTFORMAT ’*nom\$1classe\$1format\$1sortie*’ 
La commande CREATE EXTERNAL TABLE AS prend uniquement en charge deux formats de fichiers, TEXTFILE et PARQUET.  
Pour INPUTFORMAT et OUTPUTFORMAT, indiquez un nom de classe comme dans l’exemple suivant.   

```
'org.apache.hadoop.mapred.TextInputFormat'
```

LOCATION \$1 ’s3://*bucket/folder*/’ \$1 ’s3://*bucket/manifest\$1file*’\$1  <a name="create-external-table-location"></a>
Chemin menant au compartiment Amazon S3 ou au dossier qui contient les fichiers de données ou un fichier manifeste qui contient une liste de chemins d’objets Amazon S3. Les compartiments doivent se trouver dans la même AWS région que le cluster Amazon Redshift. Pour obtenir une liste des régions AWS prises en charge, consultez [Limitations propres à Amazon Redshift Spectrum](c-spectrum-considerations.md).  
Si le chemin précise un compartiment ou un dossier, par exemple, `'s3://amzn-s3-demo-bucket/custdata/'`, Redshift Spectrum analyse les fichiers qui se trouvent dans le compartiment ou dossier spécifié et dans tous les sous-dossiers. Redshift Spectrum ignore les fichiers masqués ainsi que les fichiers dont le nom commence par un point ou un trait de soulignement.   
Si le chemin indique un fichier manifeste, l’argument `'s3://bucket/manifest_file'` doit explicitement faire référence à un seul fichier, par exemple, `'s3://amzn-s3-demo-bucket/manifest.txt'`. Il ne peut pas faire référence à un préfixe de clé.   
Le manifeste est un fichier texte au format JSON qui répertorie l’URL de chaque fichier qui doit être chargé à partir d’Amazon S3, ainsi que la taille du fichier, en octets. L’URL inclut le nom du compartiment et le chemin d’objet complet du fichier. Les fichiers spécifiés dans le manifeste peuvent se trouver dans différents compartiments, mais tous les compartiments doivent se trouver dans la même AWS région que le cluster Amazon Redshift. Si un fichier est répertorié deux fois, le fichier est chargé deux fois. L’exemple suivant illustre le format JSON pour un manifeste qui charge trois fichiers.   

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
Vous pouvez rendre obligatoire l’inclusion d’un fichier particulier. Pour ce faire, incluez une option `mandatory` au niveau du fichier dans le manifeste. Lorsque vous interrogez une table externe avec un fichier obligatoire manquant, l’instruction SELECT échoue. Assurez-vous que tous les fichiers inclus dans la définition de la table externe sont présents. S’ils ne sont pas tous présents, une erreur apparaît, indiquant le premier fichier obligatoire introuvable. L’exemple suivant montre le fichier JSON d’un manifeste dont l’ `mandatory` option est définie sur `true`.  

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "mandatory":true, "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "mandatory":false, "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
Pour référencer les fichiers créés à l’aide de la commande UNLOAD, vous devez utiliser le manifeste créé à l’aide de la commande [UNLOAD](r_UNLOAD.md) avec le paramètre MANIFEST. Le fichier manifeste est compatible avec un fichier manifeste pour [Commande COPY depuis Amazon S3](copy-parameters-data-source-s3.md), mais il n’utilise pas les mêmes clés. Les clés inutilisées sont ignorées. 

TABLE PROPERTIES ( ’*nom\$1propriété*’=’*valeur\$1propriété*’ [, ...] )   
Clause qui définit la définition de table pour des propriétés de table.   
Les propriétés de table sont sensibles à la casse.  
 ’compression\$1type’=’*valeur*’   
 Propriété qui définit le type de compression à utiliser si le nom de fichier ne contient aucune extension. Si vous définissez cette propriété et que le nom de fichier contient une extension, celle-ci est ignorée et la valeur définie par la propriété est utilisée. Les valeurs valides pour chaque type de compression sont les suivantes :  
+ bzip2
+ gzip
+ none
+ snappy  
’data\$1cleansing\$1enabled’=’true / false’  
Cette propriété définit si la gestion des données est activée pour la table. Lorsque ’data\$1cleansing\$1enabled’ est définie sur « true », la gestion des données est activée pour la table. Lorsque ’data\$1cleansing\$1enabled’ est définie sur « false », la gestion des données est désactivée pour la table. Vous trouverez ci-dessous la liste des propriétés de gestion des données au niveau de la table contrôlées par cette propriété :  
+ column\$1count\$1mismatch\$1handling
+ invalid\$1char\$1handling
+ numeric\$1overflow\$1handling
+ replacement\$1char
+ surplus\$1char\$1handling
Pour obtenir des exemples, consultez [Exemples de gestion des données](r_CREATE_EXTERNAL_TABLE_examples.md#r_CREATE_EXTERNAL_TABLE_examples-data-handling).  
’invalid\$1char\$1handling’=’*value*’   
Spécifie l’action à effectuer lorsque les résultats de la requête contiennent des valeurs de caractères UTF-8 non valides. Vous pouvez spécifier les actions suivantes :    
DISABLED  
N’effectue pas de gestion des caractères non valides.  
FAIL  
Annule les requêtes renvoyant des données contenant des valeurs UTF-8 non valides.  
SET\$1TO\$1NULL   
Remplace les valeurs UTF-8 non valides par null.  
DROP\$1ROW  
Remplace chaque valeur de la ligne par null.  
REPLACE  
Remplace le caractère non valide par le caractère de remplacement que vous spécifiez à l’aide de `replacement_char`.  
’replacement\$1char’=’*character*’  
Spécifie le caractère de remplacement à utiliser lorsque vous définissez `invalid_char_handling` sur `REPLACE`.  
’numeric\$1overflow\$1handling’=’value’  
Spécifie l’action à effectuer lorsque les données ORC contiennent un entier (par exemple, BIGINT ou int64) supérieur à la définition de colonne (par exemple, SMALLINT ou int16). Vous pouvez spécifier les actions suivantes :    
DISABLED  
La gestion des caractères non valide est désactivée.  
FAIL  
Annulez la requête lorsque les données contiennent des caractères non valides.  
SET\$1TO\$1NULL  
Définissez les caractères non valides sur null.  
DROP\$1ROW  
Définissez chaque valeur de la ligne sur null.  
’surplus\$1bytes\$1handling’=’*value*’  
Spécifie comment traiter les données chargées qui dépassent la longueur du type de données défini pour les colonnes contenant des données VARBYTE. Par défaut, Redshift Spectrum définit la valeur sur null pour les données qui dépassent la largeur de la colonne.  
Vous pouvez spécifier les actions suivantes à effectuer lorsque la requête renvoie des données qui dépassent la longueur du type de données :    
SET\$1TO\$1NULL  
Remplace les données qui dépassent la largeur de colonne par null.  
DISABLED  
N’effectue pas de gestion des octets excédentaires.  
FAIL  
Annule les requêtes qui renvoient des données dépassant la largeur de colonne.  
DROP\$1ROW  
Supprime toutes les lignes qui contiennent des données qui dépassent la largeur de la colonne.  
TRUNCATE  
Supprime les caractères qui dépassent le nombre maximal de caractères défini pour la colonne.  
’surplus\$1char\$1handling’=’*value*’  
Spécifie comment gérer les données chargées qui dépassent la longueur du type de données défini pour les colonnes contenant des données VARCHAR, CHAR ou chaîne. Par défaut, Redshift Spectrum définit la valeur sur null pour les données qui dépassent la largeur de la colonne.  
Vous pouvez spécifier les actions suivantes à effectuer lorsque la requête renvoie des données qui dépassent la largeur de la colonne :    
SET\$1TO\$1NULL  
Remplace les données qui dépassent la largeur de colonne par null.  
DISABLED  
N’effectue pas de gestion des caractères excédentaires.  
FAIL  
Annule les requêtes qui renvoient des données dépassant la largeur de colonne.  
DROP\$1ROW  
Remplace chaque valeur de la ligne par null.  
TRUNCATE  
Supprime les caractères qui dépassent le nombre maximal de caractères défini pour la colonne.  
’column\$1count\$1mismatch\$1handling’=’value’  
Indique si le fichier contient moins ou plus de valeurs pour une ligne que le nombre de colonnes spécifié dans la définition de la table externe. Cette propriété est disponible uniquement pour un format de fichier texte non compressé. Vous pouvez spécifier les actions suivantes :    
DISABLED  
La gestion des non-correspondances du nombre de colonnes est désactivée.  
FAIL  
Fait échouer la requête si la non-correspondance du nombre de colonnes est détectée.  
SET\$1TO\$1NULL  
Remplit les valeurs manquantes avec NULL et ignore les valeurs supplémentaires de chaque ligne.  
DROP\$1ROW  
Supprime de l’analyse toutes les lignes qui contiennent une erreur de non-correspondance du nombre de colonnes.  
’numRows’=’*nombre\$1lignes*’   
Propriété qui définit la valeur numRows de la définition de table. Afin de mettre à jour explicitement les statistiques d’une table externe, définissez la propriété numRows pour indiquer la taille de la table. Amazon Redshift n'analyse pas les tables externes pour générer les statistiques de table utilisées par l'optimiseur de requête afin de générer un plan de requête. Si des statistiques de table ne sont pas définies pour une table externe, Amazon Redshift génère un plan d’exécution de requête d’après l’hypothèse selon laquelle les tables externes sont les tables les plus volumineuses et les tables locales les tables les plus petites.  
’skip.header.line.count’=’*nombre\$1lignes*’  
Propriété qui définit le nombre de lignes à ignorer au début de chaque fichier source.  
’serialization.null.format’=’ ’  
Propriété qui spécifie que Spectrum doit renvoyer une valeur `NULL` lorsqu’il y a une correspondance exacte avec le texte fourni dans un champ.  
’orc.schema.resolution’=’type\$1mappage’  
Propriété qui définit le type de mappage de colonne sur le mappage pour des tables qui utilisent le format de données ORC. Cette propriété est ignorée pour tous les autres formats de données.  
Les valeurs valides pour le type de mappage de colonne sont les suivantes :   
+ name 
+ position 
Si la propriété *orc.schema.resolution* est omise, les colonnes sont mappées par nom par défaut. Si la propriété *orc.schema.resolution* est définie sur une autre valeur que *’name’* ou *’position’*, les colonnes sont mappées par position. Pour en savoir plus sur le mappage des colonnes, consultez [Mappage de colonnes de table externe à des colonnes ORC](c-spectrum-external-tables.md#c-spectrum-column-mapping-orc).  
La commande COPY mappe aux fichiers de données ORC uniquement par position. La propriété de table *orc.schema.resolution* n’a aucun effet sur le comportement de la commande COPY.   
’write.parallel’=’on / off’  
Propriété qui définit si la commande CREATE EXTERNAL TABLE AS doit écrire les données en parallèle. Par défaut, CREATE EXTERNAL TABLE AS écrit les données en parallèle dans plusieurs fichiers, en fonction du nombre de tranches du cluster. Par défaut, l’option est activée. Lorsque ’write.parallel’ est désactivé, CREATE EXTERNAL TABLE AS écrit en série dans un ou plusieurs fichiers de données sur Amazon S3. Cette propriété de table s’applique également à toute instruction INSERT ultérieure dans la même table externe.  
‘write.maxfilesize.mb’=‘size’  
Propriété qui définit la taille maximale (en Mo) de chaque fichier écrit dans Amazon S3 par la commande CREATE EXTERNAL TABLE AS. La taille doit être un entier valide compris entre 5 et 6 200. La taille maximale par défaut du fichier est de 6 200 Mo. Cette propriété de table s’applique également à toute instruction INSERT ultérieure dans la même table externe.  
‘write.kms.key.id’=‘*value*’  
Vous pouvez spécifier une AWS Key Management Service clé pour activer le chiffrement côté serveur (SSE) pour les objets Amazon S3, dont *la valeur* est l'une des suivantes :   
+ `auto`pour utiliser la AWS KMS clé par défaut stockée dans le compartiment Amazon S3.
+ *kms-key* que vous spécifiez pour chiffrer les données.  
*select\$1statement*  
Instruction qui insère une ou plusieurs lignes dans la table externe en définissant une requête. Toutes les lignes produites par la requête sont écrites dans Amazon S3 au format texte ou Parquet en fonction de la définition de la table.

## Exemples
<a name="r_CREATE_EXTERNAL_TABLE_examples_link"></a>

Divers exemples sont disponibles à la page [Exemples](r_CREATE_EXTERNAL_TABLE_examples.md).

# Notes d’utilisation
<a name="r_CREATE_EXTERNAL_TABLE_usage"></a>

Cette rubrique contient des notes d’utilisation pour [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). Vous ne pouvez pas afficher les détails des tables Amazon Redshift Spectrum en utilisant les mêmes ressources que pour les tables Amazon Redshift standard, telles que [PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md), [STV\$1TBL\$1PERM](r_STV_TBL_PERM.md), PG\$1CLASS ou information\$1schema. Si votre outil de Business Intelligence ou d’analyse ne reconnaît pas les tables externes Redshift Spectrum, configurez votre application de façon à interroger [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) et [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md).

## CREATE EXTERNAL TABLE AS
<a name="r_CETAS"></a>

Dans certains cas, vous pouvez exécuter la commande CREATE EXTERNAL TABLE AS sur un catalogue de AWS Glue données, un catalogue AWS Lake Formation externe ou un métastore Apache Hive. Dans ce cas, vous utilisez un rôle Gestion des identités et des accès AWS (IAM) pour créer le schéma externe. Ce rôle IAM doit disposer d’autorisations de lecture et d’écriture sur Amazon S3. 

Si vous utilisez un catalogue Lake Formation, le rôle IAM doit être autorisé à créer une table dans le catalogue. Dans ce cas, il doit également disposer de l’autorisation d’emplacement du lac de données sur le chemin Amazon S3 cible. Ce rôle IAM devient le propriétaire de la nouvelle table AWS Lake Formation .

Pour vous assurer que les noms de fichiers sont uniques, Amazon Redshift utilise le format suivant pour le nom de chaque fichier téléchargé dans Amazon S3 par défaut.

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

 Par exemple : `20200303_004509_810669_1007_0001_part_00.parquet`.

Tenez compte des éléments suivants lors de l’exécution de la commande CREATE EXTERNAL TABLE AS :
+ L’emplacement Amazon S3 doit être vide.
+ Amazon Redshift prend uniquement en charge les formats PARQUET et TEXTFILE lors de l’utilisation de la clause STORED AS.
+ Vous n’avez pas besoin de définir une liste de définitions de colonne. Les noms de colonnes et les types de données de colonne de la nouvelle table externe sont dérivés directement de la requête SELECT.
+ Vous n’avez pas besoin de définir le type de données de la colonne de partition dans la clause PARTITIONED BY. Si vous spécifiez une clé de partition, le nom de cette colonne doit exister dans le résultat de la requête SELECT. Lorsque vous avez plusieurs colonnes de partition, leur ordre dans la requête SELECT n’a pas d’importance. Amazon Redshift utilise l’ordre défini dans la clause PARTITIONED BY pour créer la table externe.
+ Amazon Redshift partitionne automatiquement les fichiers de sortie dans des dossiers de partition en fonction des valeurs de clé de partition. Par défaut, Amazon Redshift supprime les colonnes de partition des fichiers de sortie.
+ La clause ’delimiter’ LINES TERMINATED BY n’est pas prise en charge.
+ La clause ’serde\$1name’ ROW FORMAT SERDE n’est pas prise en charge.
+ L’utilisation de fichiers manifestes n’est pas prise en charge. Ainsi, vous ne pouvez pas définir la clause LOCATION sur un fichier manifeste dans Amazon S3.
+ Amazon Redshift met automatiquement à jour la propriété de table ’numRows’ à la fin de la commande.
+ La propriété de table ’compression\$1type’ accepte uniquement ’none’ ou ’snappy’ pour le format de fichier PARQUET.
+ Amazon Redshift n’autorise pas la clause LIMIT dans la requête SELECT externe. Au lieu de cela, vous pouvez utiliser une clause LIMIT imbriquée.
+ Vous pouvez utiliser STL\$1UNLOAD\$1LOG pour suivre les fichiers écrits dans Amazon S3 par chaque opération CREATE EXTERNAL TABLE AS.

## Autorisations pour créer et interroger des table externes
<a name="r_CREATE_EXTERNAL_TABLE_usage-permissions"></a>

Pour créer des tables externes, vérifiez que vous êtes le propriétaire du schéma externe ou un superutilisateur. Pour transférer la propriété d’un schéma externe, utilisez [ALTER SCHEMA](r_ALTER_SCHEMA.md). L’exemple suivant remplace le propriétaire du schéma `spectrum_schema` par `newowner`.

```
alter schema spectrum_schema owner to newowner;
```

Pour exécuter une requête Redshift Spectrum, vous devez avoir les autorisations suivantes :
+ Autorisations d’utilisation du schéma 
+ Autorisation de créer des tables temporaires dans la base de données actuelle 

L’exemple suivant accorde l’autorisation d’utiliser le schéma `spectrum_schema` au groupe d’utilisateurs `spectrumusers`.

```
grant usage on schema spectrum_schema to group spectrumusers;
```

L’exemple suivant accorde une autorisation temporaire concernant la base de données `spectrumdb` au groupe d’utilisateurs `spectrumusers`. 

```
grant temp on database spectrumdb to group spectrumusers;
```

## Pseudocolonnes
<a name="r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns"></a>

Par défaut, Amazon Redshift crée les tables externes avec les pseudo-colonnes *\$1path* et *\$1size*. Sélectionnez ces colonnes pour afficher le chemin d’accès aux fichiers de données sur Amazon S3 et la taille des fichiers de données de chaque ligne retournée par une requête. Les noms de colonne *\$1path* et *\$1size* doivent être délimités par des guillemets doubles. Une clause *SELECT \$1* ne renvoie pas de pseudo-colonnes. Vous devez inclure explicitement les noms de colonne *\$1path* et *\$1size* dans votre requête, comme l’illustre l’exemple suivant.

```
select "$path", "$size"
from spectrum.sales_part
where saledate = '2008-12-01';
```

Vous pouvez désactiver la création de pseudo-colonnes d’une séance en définissant le paramètre de configuration *spectrum\$1enable\$1pseudo\$1columns* avec la valeur *false*. 

**Important**  
La sélection de *\$1size* ou *\$1path* entraîne des frais, car Redshift Spectrum analyse les fichiers de données dans Amazon S3 pour déterminer la taille du jeu de résultats. Pour plus d’informations, consultez la section [Tarification Amazon Redshift](https://aws.amazon.com/redshift/pricing/).

## Définition des options de gestion des données
<a name="r_CREATE_EXTERNAL_TABLE_usage-data-handling"></a>

Vous pouvez définir des paramètres de table pour spécifier la gestion des entrées pour les données interrogées dans les tables externes, notamment : 
+ Caractères excédentaires dans les colonnes contenant des données VARCHAR, CHAR et chaîne. Pour plus d’informations, consultez la propriété de table externe `surplus_char_handling`.
+ Caractères non valides dans les colonnes contenant des données VARCHAR, CHAR et chaîne. Pour plus d’informations, consultez la propriété de table externe `invalid_char_handling`.
+ Caractère de remplacement à utiliser lorsque vous spécifiez REPLACE pour la propriété de table externe `invalid_char_handling`.
+ Gestion des débordements de distribution dans les colonnes contenant des données entières et décimales. Pour plus d’informations, consultez la propriété de table externe `numeric_overflow_handling`.
+ Surplus\$1bytes\$1handling pour spécifier la gestion des entrées pour les octets excédentaires dans les colonnes contenant des données VARBYTE. Pour plus d’informations, consultez la propriété de table externe `surplus_bytes_handling`.

# Exemples
<a name="r_CREATE_EXTERNAL_TABLE_examples"></a>

L’exemple suivant crée une table nommée SALES dans le schéma externe Amazon Redshift nommé `spectrum`. Les données figurent dans des fichiers texte délimités par des tabulations. La clause TABLE PROPERTIES définit la valeur numRows sur 170 000 lignes.

Selon l’identité que vous utilisez pour exécuter CREATE EXTERNAL TABLE, vous devrez peut-être configurer des autorisations IAM. Il est recommandé d’associer des politiques d’autorisation à un rôle IAM, puis de l’attribuer à des utilisateurs et à des groupes, le cas échéant. Pour plus d’informations, consultez [Identity and Access Management dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html).

```
create external table spectrum.sales(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
saledate date,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
row format delimited
fields terminated by '\t'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales/'
table properties ('numRows'='170000');
```

L'exemple suivant crée une table qui utilise le JsonSerDe pour référencer les données au format JSON.

```
create external table spectrum.cloudtrail_json (
event_version int,
event_id bigint,
event_time timestamp,
event_type varchar(10),
awsregion varchar(20),
event_name varchar(max),
event_source varchar(max),
requesttime timestamp,
useragent varchar(max),
recipientaccountid bigint)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties (
'dots.in.keys' = 'true',
'mapping.requesttime' = 'requesttimestamp'
) location 's3://amzn-s3-demo-bucket/json/cloudtrail';
```

L’exemple CREATE EXTERNAL TABLE AS suivant crée une table externe non partitionnée. Ensuite, il écrit le résultat de la requête SELECT au format Apache Parquet à l’emplacement Amazon S3 cible.

```
CREATE EXTERNAL TABLE spectrum.lineitem
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/lineitem/'
AS SELECT * FROM local_lineitem;
```

L’exemple suivant crée une table externe partitionnée et inclut les colonnes de partition dans la requête SELECT. 

```
CREATE EXTERNAL TABLE spectrum.partitioned_lineitem
PARTITIONED BY (l_shipdate, l_shipmode)
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/partitioned_lineitem/'
AS SELECT l_orderkey, l_shipmode, l_shipdate, l_partkey FROM local_table;
```

Pour obtenir la liste des bases de données existantes dans le catalogue de données externes, interrogez la vue système [SVV\$1EXTERNAL\$1DATABASES](r_SVV_EXTERNAL_DATABASES.md). 

```
select eskind,databasename,esoptions from svv_external_databases order by databasename;
```

```
eskind | databasename | esoptions
-------+--------------+----------------------------------------------------------------------------------
     1 | default      | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | sampledb     | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | spectrumdb   | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
```

Pour afficher les détails des tables externes, interrogez les vues système [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) et [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md).

L’exemple suivant interroge la vue SVV\$1EXTERNAL\$1TABLES.

```
select schemaname, tablename, location from svv_external_tables;
```

```
schemaname | tablename            | location
-----------+----------------------+--------------------------------------------------------
spectrum   | sales                | s3://redshift-downloads/tickit/spectrum/sales
spectrum   | sales_part           | s3://redshift-downloads/tickit/spectrum/sales_partition
```

L’exemple suivant interroge la vue SVV\$1EXTERNAL\$1COLUMNS. 

```
select * from svv_external_columns where schemaname like 'spectrum%' and tablename ='sales';
```

```
schemaname | tablename | columnname | external_type | columnnum | part_key
-----------+-----------+------------+---------------+-----------+---------
spectrum   | sales     | salesid    | int           |         1 |        0
spectrum   | sales     | listid     | int           |         2 |        0
spectrum   | sales     | sellerid   | int           |         3 |        0
spectrum   | sales     | buyerid    | int           |         4 |        0
spectrum   | sales     | eventid    | int           |         5 |        0
spectrum   | sales     | saledate   | date          |         6 |        0
spectrum   | sales     | qtysold    | smallint      |         7 |        0
spectrum   | sales     | pricepaid  | decimal(8,2)  |         8 |        0
spectrum   | sales     | commission | decimal(8,2)  |         9 |        0
spectrum   | sales     | saletime   | timestamp     |        10 |        0
```

Pour afficher les partitions de table, utilisez la requête suivante.

```
select schemaname, tablename, values, location
from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+-------------------------------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

L’exemple suivant renvoie la taille totale des fichiers de données associés pour une table externe.

```
select distinct "$path", "$size"
   from spectrum.sales_part;

 $path                                                                    | $size
--------------------------------------------------------------------------+-------
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/ |  1616
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
```

## Exemple de partitionnement
<a name="r_CREATE_EXTERNAL_TABLE_examples-partitioning"></a>

Exécutez la commande suivante pour créer une table externe partitionnée par date.

```
create external table spectrum.sales_part(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
dateid smallint,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
partitioned by (saledate date)
row format delimited
fields terminated by '|'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales_partition/'
table properties ('numRows'='170000');
```

Exécutez les commandes ALTER TABLE suivantes pour ajouter les partitions.

```
alter table spectrum.sales_part
add if not exists partition (saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-04-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-05-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-06-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-07-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-08-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-09-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-10-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-11-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-12-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12/';
```

Pour sélectionner les données de la table partitionnée, exécutez la requête suivante.

```
select top 10 spectrum.sales_part.eventid, sum(spectrum.sales_part.pricepaid)
from spectrum.sales_part, event
where spectrum.sales_part.eventid = event.eventid
  and spectrum.sales_part.pricepaid > 30
  and saledate = '2008-12-01'
group by spectrum.sales_part.eventid
order by 2 desc;
```

```
eventid | sum
--------+---------
    914 | 36173.00
   5478 | 27303.00
   5061 | 26383.00
   4406 | 26252.00
   5324 | 24015.00
   1829 | 23911.00
   3601 | 23616.00
   3665 | 23214.00
   6069 | 22869.00
   5638 | 22551.00
```

Pour afficher les partitions de la table externe, interrogez la vue système [SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md).

```
select schemaname, tablename, values, location from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+--------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

## Exemples de format de ligne
<a name="r_CREATE_EXTERNAL_TABLE_examples-row-format"></a>

L’exemple suivant illustre la spécification des paramètres ROW FORMAT SERDE pour les fichiers de données stockés au format AVRO.

```
create external table spectrum.sales(salesid int, listid int, sellerid int, buyerid int, eventid int, dateid int, qtysold int, pricepaid decimal(8,2), comment VARCHAR(255))
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='{\"namespace\": \"dory.sample\",\"name\": \"dory_avro\",\"type\": \"record\", \"fields\": [{\"name\":\"salesid\", \"type\":\"int\"},
{\"name\":\"listid\", \"type\":\"int\"},
{\"name\":\"sellerid\", \"type\":\"int\"},
{\"name\":\"buyerid\", \"type\":\"int\"},
{\"name\":\"eventid\",\"type\":\"int\"},
{\"name\":\"dateid\",\"type\":\"int\"},
{\"name\":\"qtysold\",\"type\":\"int\"},
{\"name\":\"pricepaid\", \"type\": {\"type\": \"bytes\", \"logicalType\": \"decimal\", \"precision\": 8, \"scale\": 2}}, {\"name\":\"comment\",\"type\":\"string\"}]}')
STORED AS AVRO
location 's3://amzn-s3-demo-bucket/avro/sales' ;
```

Voici un exemple de spécification des paramètres ROW FORMAT SERDE à l'aide RegEx de.

```
create external table spectrum.types(
cbigint bigint,
cbigint_null bigint,
cint int,
cint_null int)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties ('input.regex'='([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)')
stored as textfile
location 's3://amzn-s3-demo-bucket/regex/types';
```

L’exemple suivant illustre la spécification des paramètres ROW FORMAT SERDE à l’aide de Grok.

```
create external table spectrum.grok_log(
timestamp varchar(255),
pid varchar(255),
loglevel varchar(255),
progname varchar(255),
message varchar(255))
row format serde 'com.amazonaws.glue.serde.GrokSerDe'
with serdeproperties ('input.format'='[DFEWI], \\[%{TIMESTAMP_ISO8601:timestamp} #%{POSINT:pid:int}\\] *(?<loglevel>:DEBUG|FATAL|ERROR|WARN|INFO) -- +%{DATA:progname}: %{GREEDYDATA:message}')
stored as textfile
location 's3://DOC-EXAMPLE-BUCKET/grok/logs';
```

L’exemple suivant montre un exemple de définition d’un journal d’accès au serveur Amazon S3 dans un compartiment S3. Vous pouvez utiliser Redshift Spectrum pour interroger les journaux d’accès Amazon S3.

```
CREATE EXTERNAL TABLE spectrum.mybucket_s3_logs(
bucketowner varchar(255),
bucket varchar(255),
requestdatetime varchar(2000),
remoteip varchar(255),
requester varchar(255),
requested varchar(255),
operation varchar(255),
key varchar(255),
requesturi_operation varchar(255),
requesturi_key varchar(255),
requesturi_httpprotoversion varchar(255),
httpstatus varchar(255),
errorcode varchar(255),
bytessent bigint,
objectsize bigint,
totaltime varchar(255),
turnaroundtime varchar(255),
referrer varchar(255),
useragent varchar(255),
versionid varchar(255)
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \"([^ ]*)\\s*([^ ]*)\\s*([^ ]*)\" (- |[^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\") ([^ ]*).*$')
LOCATION 's3://amzn-s3-demo-bucket/s3logs’;
```

L’exemple suivant illustre la spécification des paramètres ROW FORMAT SERDE pour les données au format ION.

```
CREATE EXTERNAL TABLE tbl_name (columns)
ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe'
STORED AS
INPUTFORMAT 'com.amazon.ionhiveserde.formats.IonInputFormat'
OUTPUTFORMAT 'com.amazon.ionhiveserde.formats.IonOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix'
```

## Exemples de gestion des données
<a name="r_CREATE_EXTERNAL_TABLE_examples-data-handling"></a>

Les exemples suivants permettent d’accéder au fichier : [spi\$1global\$1rankings.csv](https://s3.amazonaws.com/redshift-downloads/docs-downloads/spi_global_rankings.csv). Vous pouvez charger le fichier `spi_global_rankings.csv` dans un compartiment Amazon S3 pour essayer ces exemples.

L’exemple suivant permet de créer le schéma externe `schema_spectrum_uddh` et la base de données `spectrum_db_uddh`. Pour`aws-account-id`, entrez votre identifiant de AWS compte et pour `role-name` entrez le nom de votre rôle Redshift Spectrum.

```
create external schema schema_spectrum_uddh
from data catalog
database 'spectrum_db_uddh'
iam_role 'arn:aws:iam::aws-account-id:role/role-name'
create external database if not exists;
```

L’exemple suivant permet de créer une table externe `soccer_league` dans le schéma externe `schema_spectrum_uddh`.

```
CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league
(
  league_rank smallint,
  prev_rank   smallint,
  club_name   varchar(15),
  league_name varchar(20),
  league_off  decimal(6,2),
  league_def  decimal(6,2),
  league_spi  decimal(6,2),
  league_nspi integer
)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n\l'
stored as textfile
LOCATION 's3://spectrum-uddh/league/'
table properties ('skip.header.line.count'='1');
```

Vérifiez le nombre de lignes dans la table `soccer_league`.

```
select count(*) from schema_spectrum_uddh.soccer_league;
```

Le nombre de lignes s’affiche.

```
count
645
```

La requête suivante affiche les 10 premiers clubs. Comme le club `Barcelona` présente un caractère non valide dans la chaîne, une valeur NULL s’affiche pour le nom.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

```
league_rank	club_name	league_name			league_nspi
1		Manchester City	Barclays Premier Lea		34595
2		Bayern Munich	German Bundesliga		34151
3		Liverpool	Barclays Premier Lea		33223
4		Chelsea		Barclays Premier Lea		32808
5		Ajax		Dutch Eredivisie		32790
6		Atletico 	Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi		31469
8		NULL	        Spanish Primera Divi            31321
9		RB Leipzig	German Bundesliga		31014
10		Paris Saint-Ger	French Ligue 1			30929
```

L’exemple suivant modifie la table `soccer_league` pour spécifier les propriétés de la table externe `invalid_char_handling`, `replacement_char` et `data_cleansing_enabled` afin d’insérer un point d’interrogation (?) pour remplacer les caractères inattendus.

```
alter  table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='REPLACE','replacement_char'='?','data_cleansing_enabled'='true');
```

L’exemple suivant montre comment interroger la table `soccer_league` pour les équipes dont le rang est compris entre 1 et 10.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

Comme les propriétés de la table ont été modifiées, les résultats affichent les 10 premiers clubs, avec le point d’interrogation (?) comme caractère de remplacement dans la huitième ligne pour le club `Barcelona`.

```
league_rank	club_name	league_name		league_nspi
1		Manchester City	Barclays Premier Lea	34595
2		Bayern Munich	German Bundesliga	34151
3		Liverpool	Barclays Premier Lea	33223
4		Chelsea		Barclays Premier Lea	32808
5		Ajax		Dutch Eredivisie	32790
6		Atletico Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi	31469
8		Barcel?na	Spanish Primera Divi	31321
9		RB Leipzig	German Bundesliga	31014
10		Paris Saint-Ger	French Ligue 1		30929
```

L’exemple suivant modifie la table `soccer_league` pour spécifier les propriétés de la table externe `invalid_char_handling` afin de supprimer les lignes contenant des caractères inattendus.

```
alter table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='DROP_ROW','data_cleansing_enabled'='true');
```

L’exemple suivant montre comment interroger la table `soccer_league` pour les équipes dont le rang est compris entre 1 et 10.

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

Les résultats affichent les premiers clubs, sans inclure la huitième ligne pour le club `Barcelona`.

```
league_rank   club_name         league_name            league_nspi
1             Manchester City   Barclays Premier Lea   34595
2             Bayern Munich     German Bundesliga      34151
3             Liverpool         Barclays Premier Lea   33223
4             Chelsea           Barclays Premier Lea   32808
5             Ajax              Dutch Eredivisie       32790
6             Atletico Madrid   Spanish Primera Divi   31517
7             Real Madrid       Spanish Primera Divi   31469
9             RB Leipzig        German Bundesliga      31014
10            Paris Saint-Ger   French Ligue 1         30929
```

# CREATE EXTERNAL VIEW
<a name="r_CREATE_EXTERNAL_VIEW"></a>

La fonctionnalité des vues du catalogue de données en version préliminaire est disponible uniquement dans les régions suivantes.
+ USA Est (Ohio) (us-east-2)
+ USA Est (Virginie du Nord) (us-east-1)
+ USA Ouest (Californie du Nord) (us-west-1)
+ Asie-Pacifique (Tokyo) (ap-northeast-1)
+ Europe (Irlande) (eu-west-1)
+ Europe (Stockholm) (eu-north-1)

Crée une vue du catalogue de données. Les vues du catalogue de données constituent un schéma de vues unique qui fonctionne parfaitement avec d’autres moteurs SQL tels qu’Amazon Athena et Amazon EMR. Vous pouvez interroger la vue depuis le moteur de votre choix. Pour plus d’informations sur les vues du catalogue de données, consultez [Création de vues dans le catalogue de données](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Syntaxe
<a name="r_CREATE_EXTERNAL_VIEW-synopsis"></a>

```
CREATE EXTERNAL VIEW schema_name.view_name [ IF NOT EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
AS query_definition;
```

## Parameters
<a name="r_CREATE_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Le schéma attaché à votre AWS Glue base de données, suivi du nom de la vue.

PROTECTED  
Spécifie que la commande CREATE EXTERNAL VIEW ne doit se terminer que si la requête contenue dans query\$1definition peut être terminée avec succès.

IF NOT EXISTS  
Crée la vue si elle n’existe pas déjà.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Notation du schéma à utiliser lors de la création de la vue. Vous pouvez spécifier d'utiliser une base de AWS Glue Data Catalog données Glue que vous avez créée ou un schéma externe que vous avez créé. Consultez [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) et [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) pour plus d’informations.

 *query\$1definition*   
Définition de la requête SQL exécutée par Amazon Redshift pour modifier la vue.

## Exemples
<a name="r_CREATE_EXTERNAL_VIEW-examples"></a>

L’exemple suivant crée une vue du catalogue de données nommée sample\$1schema.glue\$1data\$1catalog\$1view.

```
CREATE EXTERNAL PROTECTED VIEW sample_schema.glue_data_catalog_view IF NOT EXISTS
AS SELECT * FROM sample_database.remote_table "remote-table-name";
```

# CREATE FUNCTION
<a name="r_CREATE_FUNCTION"></a>

Permet de créer une fonction scalaire définie par l’utilisateur à l’aide d’une clause SELECT SQL ou d’un programme Python.

Pour plus d’informations et d’exemples, consultez [Fonctions définies par l’utilisateur dans Amazon Redshift](user-defined-functions.md).

## Privilèges requis
<a name="r_CREATE_FUNCTION-privileges"></a>

Vous devez être autorisé par l’une des méthodes suivantes pour exécuter CREATE OR REPLACE FUNCTION :
+ Pour CREATE FUNCTION :
  + Le super-utilisateur peut utiliser à la fois des langages fiables et non fiables pour créer des fonctions.
  + Les utilisateurs disposant du privilège CREATE [ OR REPLACE ] FUNCTION peuvent créer des fonctions avec des langages fiables.
+ Pour REPLACE FUNCTION :
  + Superuser
  + Utilisateurs disposant du privilège CREATE [ OR REPLACE ] FUNCTION
  + Propriétaire de la fonction

## Syntaxe
<a name="r_CREATE_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] FUNCTION f_function_name
( { [py_arg_name  py_arg_data_type |
sql_arg_data_type } [ , ... ] ] )
RETURNS data_type
{ VOLATILE | STABLE | IMMUTABLE }
AS $$
  { python_program | SELECT_clause }
$$ LANGUAGE { plpythonu | sql }
```

## Parameters
<a name="r_CREATE_FUNCTION-parameters"></a>

OR REPLACE  
Spécifie que si une fonction ayant le même nom et les mêmes types de données pour les arguments en entrée, ou *signature*, existe déjà, la fonction existante est remplacée. Vous pouvez uniquement remplacer une fonction par une nouvelle fonction qui définit un ensemble identique de types de données. Vous devez être un super-utilisateur pour remplacer une fonction.  
Si vous définissez une fonction avec le même nom qu’une fonction existante, mais avec une signature différente, vous créez une nouvelle fonction. En d’autres termes, le nom de la fonction est surchargé. Pour plus d'informations, consultez [Surcharge des noms de fonctions](udf-naming-udfs.md#udf-naming-overloading-function-names).

 *f\$1function\$1name*   
Nom de la fonction. Si vous spécifiez un nom de schéma (tel que `myschema.myfunction`), la fonction est créée à l’aide du schéma spécifié. Sinon, la fonction est créée dans le schéma en cours. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).  
Nous vous recommandons d’utiliser le préfixe `f_` pour tous les noms de fonctions UDF. Comme Amazon Redshift réserve le préfixe `f_` pour les noms UDF, si vous utilisez le préfixe `f_`, vous vous assurez que votre nom UDF n’est pas conflit avec un nom existant ou futur de fonction SQL intégré à Amazon Redshift. Pour plus d'informations, consultez [Prévention des conflits de dénomination des fonctions UDF](udf-naming-udfs.md).  
Vous pouvez définir plus d’une fonction portant le même nom de fonction si les types de données des arguments en entrée sont différents. En d’autres termes, le nom de la fonction est surchargé. Pour plus d’informations, consultez [Surcharge des noms de fonctions](udf-naming-udfs.md#udf-naming-overloading-function-names).

 *py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
Pour une fonction Python définie par l’utilisateur, une liste des noms d’arguments en entrée et des types de données. Pour une fonction SQL définie par l’utilisateur, une liste des types de données, sans nom d’argument. Dans une fonction Python définie par l’utilisateur, faites référence aux arguments à l’aide des noms d’arguments. Dans une fonction SQL définie par l’utilisateur, faites référence aux arguments à l’aide de \$11, \$12, et ainsi de suite, en fonction de l’ordre des arguments dans la liste d’arguments.   
Pour une fonction SQL définie par l’utilisateur, les types de données d’entrée et de retour peuvent être de n’importe quel type de données Amazon Redshift standard. Pour une fonction Python définie par l’utilisateur, les types de données entrant et de retour peuvent être SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE ou TIMESTAMP. De plus, les fonctions définies par l'utilisateur en Python (UDFs) prennent en charge le type de données ANYELEMENT. Ce type de données est automatiquement converti en un type de données standard en fonction du type de données de l’argument correspondant fourni lors de l’exécution. Si plusieurs arguments utilisent ANYELEMENT, ils se résolvent dans le même type de données lors de l’exécution, en fonction du premier argument ANYELEMENT de la liste. Pour plus d’informations, consultez [Types de données de fonctions Python définies par l’utilisateur](udf-data-types.md) et [Types de données](c_Supported_data_types.md).  
Vous pouvez spécifier un maximum de 32 arguments.

 RETURNS *type\$1données*   
Type de données de la valeur renvoyée par la fonction. Le type de données RETURNS peut être n’importe quel type de données Amazon Redshift standard. En outre, Python UDFs peut utiliser le type de données ANYELEMENT, qui est automatiquement converti en un type de données standard en fonction de l'argument fourni lors de l'exécution. Si vous spécifiez ANYELEMENT pour le type de données retournées, au moins un argument doit utiliser ANYELEMENT. Le type de données retournées correspond au type de données fourni pour l’argument ANYELEMENT lors de l’appel de la fonction. Pour plus d'informations, consultez [Types de données de fonctions Python définies par l’utilisateur](udf-data-types.md).

 VOLATILE \$1 STABLE \$1 IMMUTABLE   
Informe l’optimiseur de requête à propos de l’instabilité de la fonction.   
Vous obtiendrez la meilleure optimisation possible si vous qualifiez votre fonction avec la catégorie d’instabilité la plus stricte qui s’y applique. Toutefois, si la catégorie est trop stricte, il existe un risque que l’optimiseur ignore par erreur certains appels, d’où un jeu de résultats incorrect. En matière de rigueur, en commençant par la moins stricte, les catégories d’instabilité sont les suivantes :  
+ VOLATILE
+ STABLE
+ IMMUTABLE
VOLATILE  
Soit les mêmes arguments, la fonction peut renvoyer des résultats différents sur des appels successifs, y compris pour les lignes d’une même instruction. Comme l’optimiseur de requête ne peut pas effectuer d’hypothèse sur le comportement d’une fonction volatile, une requête qui utilise une fonction volatile doit réévaluer la fonction pour chaque ligne d’entrée.  
STABLE  
Soit les mêmes arguments, la fonction est garantie renvoyer les mêmes résultats pour toutes les lignes traitées au sein d’une même instruction. La fonction peut renvoyer des résultats différents lorsqu’elle est appelée dans différents instructions. Cette catégorie permet à l’optimiseur d’optimiser plusieurs appels de la fonction au sein d’une même instruction en un seul appel de l’instruction.   
IMMUTABLE  
Soit les mêmes arguments, la fonction renvoie toujours le même résultat, indéfiniment. Quand une requête appelle une fonction `IMMUTABLE` avec des arguments constants, l’optimiseur pré-évalue la fonction.

AS \$1\$1 *instruction* \$1\$1  
 Construction qui englobe l’instruction à exécuter. Les mots-clés littéraux `AS $$` et `$$` sont obligatoires.   
Amazon Redshift requiert que vous placiez l’instruction dans votre fonction à l’aide d’un format appelé guillemets dollar. Tout ce qui se trouve dans l’encadrement est passé exactement comme tel. Vous n’avez pas besoin de définir de séquence d’échappement pour les caractères spéciaux, car les contenus de la chaîne sont écrits littéralement.   
 Avec les *guillemets dollar*, vous utilisez une paire de symboles dollar (\$1\$1) pour marquer le début et la fin de l’instruction à exécuter, comme illustré dans l’exemple suivant.   

```
$$ my statement $$
```
 Le cas échéant, entre les symboles dollar de chaque paire, vous pouvez spécifier une chaîne pour aider à identifier l’instruction. La chaîne que vous utilisez doit être la même au début et à la fin des paires d’encadrement. Cette chaîne est sensible à la casse et suit les mêmes contraintes qu’un identificateur sans guillemets, sauf que celui-ci ne peut pas contenir de symboles dollar. L’exemple suivant utilise la chaîne `test`.   

```
$test$ my statement $test$
```
Pour plus d’informations sur les guillemets dollar, consultez relative aux constantes de chaîne avec guillemet dollar dans [Lexical Structure](https://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html) dans la documentation PostgreSQL. 

*python\$1program*   
Programme exécutable Python valide qui renvoie une valeur. L’instruction que vous transmettez avec la fonction doit être conforme aux exigences de mise en retrait telles que spécifiées dans le [Guide de style pour Python Code](https://www.python.org/dev/peps/pep-0008/#indentation) sur le site web Python. Pour plus d'informations, consultez [Support du langage Python pour UDFs](udf-python-language-support.md).

*clause\$1SQL*   
Clause SELECT SQL.  
La clause SELECT ne peut pas inclure les types de clause suivants :  
+ FROM
+ INTO
+ WHERE
+ GROUP BY
+ ORDER BY
+ LIMIT

LANGUAGE \$1 plpythonu \$1 sql \$1   
Pour Python, spécifiez `plpythonu`. Pour SQL, spécifiez `sql`. Vous devez avoir l’autorisation pour USAGE ON LANGUAGE pour SQL ou plpythonu. Pour plus d'informations, consultez [Sécurité et autorisations des fonctions définies par l’utilisateur](udf-security-and-privileges.md).

## Notes d’utilisation
<a name="r_CREATE_FUNCTION-usage-notes"></a>

### Fonctions imbriquées
<a name="r_CREATE_FUNCTION-usage-notes-nested-functions"></a>

Vous pouvez appeler une autre fonction SQL définie par l’utilisateur à partir d’une fonction SQL définie par l’utilisateur. La fonction imbriquée doit exister lorsque vous exécutez la commande CREATE FUNCTION. Amazon Redshift ne suit pas les dépendances pour. Ainsi UDFs, si vous supprimez la fonction imbriquée, Amazon Redshift ne renvoie pas d'erreur. Toutefois, la fonction définie par l’utilisateur échoue si la fonction imbriquée n’existe pas. Par exemple, la fonction suivante appelle la fonction `f_sql_greater `dans la clause SELECT.

```
create function f_sql_commission (float, float )
  returns float
stable
as $$
  select f_sql_greater ($1, $2)
$$ language sql;
```

### Privilèges et sécurité des fonctions UDF
<a name="r_CREATE_FUNCTION-usage-notes-security-and-privileges"></a>

Pour créer une fonction définie par l’utilisateur, vous devez avoir l’autorisation pour USAGE ON LANGUAGE pour SQL ou plpythonu (Python). Par défaut, USAGE ON LANGUAGE SQL est accordé à PUBLIC. Toutefois, vous devez accorder explicitement USAGE ON LANGUAGE PLPYTHONU à des utilisateurs ou des groupes spécifiques. 

Pour révoquer le privilège USAGE pour SQL, révoquez d’abord USAGE de PUBLIC. Accordez ensuite l'utilisation de SQL uniquement aux utilisateurs ou groupes spécifiques autorisés à créer du SQL UDFs. L’exemple suivant révoque le privilège USAGE pour SQL de PUBLIC, puis accorde USAGE au groupe d’utilisateurs `udf_devs`.

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```

Pour exécuter une fonction définie par l’utilisateur, vous devez disposer de l’autorisation d’exécution pour chaque fonction. Par défaut, l'autorisation d'exécution pour new UDFs est accordée à PUBLIC. Pour limiter l’utilisation, révoquez l’autorisation d’exécution de PUBLIC pour la fonction. Ensuite, accordez le privilège à des individus ou à des groupes spécifiques. 

L’exemple ci-dessous révoque l’autorisation d’exécution de la fonction `f_py_greater` de PUBLIC, puis accorde USAGE au groupe d’utilisateurs `udf_devs`.

```
revoke execute on function f_py_greater(a float, b float) from PUBLIC;
grant execute on function f_py_greater(a float, b float) to group udf_devs;
```

Les super-utilisateurs ont tous les privilèges par défaut. 

Pour plus d’informations, consultez [GRANT](r_GRANT.md) et [REVOKE](r_REVOKE.md).

## Exemples
<a name="r_CREATE_FUNCTION-examples"></a>

### Exemple de fonction scalaire Python définie par l’utilisateur
<a name="r_CREATE_FUNCTION-python-example"></a>

L’exemple suivant crée une fonction Python définie par l’utilisateur qui compare deux entiers et renvoie la valeur la plus grande.

```
create function f_py_greater (a float, b float)
  returns float
stable
as $$
  if a > b:
    return a
  return b
$$ language plpythonu;
```

L’exemple suivant interroge la table SALES et appelle la nouvelle fonction `f_py_greater` pour renvoyer COMMISSION ou 20 % du PRICEPAID, quelle que soit la valeur la plus grande.

```
select f_py_greater (commission, pricepaid*0.20) from sales;
```

### Exemple de fonction scalaire SQL définie par l’utilisateur
<a name="r_CREATE_FUNCTION-sql-example"></a>

L’exemple suivant crée une fonction qui compare deux nombres et renvoie la valeur la plus grande. 

```
create function f_sql_greater (float, float)
  returns float
stable
as $$
  select case when $1 > $2 then $1
    else $2
  end
$$ language sql;
```

La requête suivante appelle la nouvelle fonction `f_sql_greater` pour interroger la table SALES et renvoie COMMISSION ou 20 % du PRICEPAID, quelle que soit la valeur la plus grande.

```
select f_sql_greater (commission, pricepaid*0.20) from sales;
```

# CREATE GROUP
<a name="r_CREATE_GROUP"></a>

Définit un nouveau groupe d’utilisateurs. Seul un super-utilisateur peut créer un groupe.

## Syntaxe
<a name="r_CREATE_GROUP-synopsis"></a>

```
CREATE GROUP group_name
[ [ WITH ] [ USER username ] [, ...] ]
```

## Parameters
<a name="r_CREATE_GROUP-parameters"></a>

 *nom\$1groupe*   
Nom du nouveau groupe d’utilisateurs. Les noms de groupe commençant par deux tirets bas sont réservés pour un usage Amazon Redshift interne. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

WITH  
Syntaxe facultative pour indiquer des paramètres supplémentaires pour CREATE GROUP.

USER  
Ajoutez un ou plusieurs utilisateurs au groupe.

 *nom d’utilisateur*   
Nom de l’utilisateur à ajouter au groupe.

## Exemples
<a name="r_CREATE_GROUP-examples"></a>

L'exemple suivant crée un groupe d'utilisateurs nommé ADMIN\$1GROUP avec deux utilisateurs, et. ADMIN1 ADMIN2

```
create group admin_group with user admin1, admin2;
```

# CREATE IDENTITY PROVIDER
<a name="r_CREATE_IDENTITY_PROVIDER"></a>

Définit un nouveau fournisseur d’identité. Seul un super-utilisateur peut créer un fournisseur d’identité.

## Syntaxe
<a name="r_CREATE_IDENTITY_PROVIDER-synopsis"></a>

```
CREATE IDENTITY PROVIDER identity_provider_name TYPE type_name
NAMESPACE namespace_name
[PARAMETERS parameter_string]
[APPLICATION_ARN arn]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
  ];
```

## Parameters
<a name="r_CREATE_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Nom du nouveau fournisseur d’identité. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

*type\$1name*  
Fournisseur d’identité avec lequel interagir. Azure et AWSIDC sont actuellement les seuls fournisseurs d'identité pris en charge.

*namespace\$1name*  
Espace de noms. Il s’agit d’un identifiant unique et abrégé pour le répertoire du fournisseur d’identité.

 *parameter\$1string*   
Chaîne contenant un objet JSON correctement formaté qui contient des paramètres et des valeurs requis pour le fournisseur d’identité.

 *arn*   
L’Amazon Resource Name (ARN) d’une application gérée par IAM Identity Center. Ce paramètre n'est applicable que lorsque le type de fournisseur d'identité est. AWSIDC

 *iam\$1role*   
Rôle IAM qui fournit des autorisations pour la connexion à IAM Identity Center. Ce paramètre n'est applicable que lorsque le type de fournisseur d'identité est. AWSIDC

 *auto\$1create\$1roles*   
Active ou désactive la fonction de création automatique de rôle. Si la valeur est TRUE, Amazon Redshift active la fonctionnalité de création automatique des rôles. Si la valeur est FALSE, Amazon Redshift désactive la fonctionnalité de création automatique des rôles. Si la valeur de ce paramètre n’est pas spécifiée, Amazon Redshift détermine la valeur selon la logique suivante :   
+  Si `AUTO_CREATE_ROLES` est fourni mais que la valeur n’est pas spécifiée, la valeur est définie sur TRUE. 
+  Si `AUTO_CREATE_ROLES` ce n'est pas le cas et que le fournisseur d'identité l'est AWSIDC, la valeur est définie sur FALSE. 
+  Si `AUTO_CREATE_ROLES` n’est pas fourni et que le fournisseur d’identité est Azure, la valeur est définie sur TRUE. 
Pour inclure des groupes, spécifiez `INCLUDE`. La valeur par défaut est vide, ce qui signifie inclure tous les groupes si `AUTO_CREATE_ROLES` est activé.  
Pour exclure des groupes, spécifiez `EXCLUDE`. La valeur par défaut est vide, ce qui signifie qu’il ne faut exclure aucun groupe si `AUTO_CREATE_ROLES` est activé.

 *filter\$1pattern*   
Expression de caractères UTF-8 valide constituée d’un modèle à mettre en correspondance avec les noms de groupes. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_CREATE_IDENTITY_PROVIDER.html)
Si *filter\$1pattern* ne contient pas de métacaractères, le modèle représente uniquement la chaîne elle-même ; dans ce cas, LIKE a la même fonction que l’opérateur d’égalité.   
*filter\$1pattern* prend en charge les caractères suivants :  
+  Caractères alphabétiques en majuscules et minuscules (A-Z et a-z) 
+  Chiffres (0-9) 
+  Les caractères spéciaux suivants : 

  ```
  _ % ^ * + ? { } , $
  ```

## Exemples
<a name="r_CREATE_IDENTITY_PROVIDER-examples"></a>

L’exemple suivant crée un fournisseur d’identité nommé *oauth\$1standard*, avec un TYPE *azure*, afin d’établir une communication avec Microsoft Azure Active Directory (AD).

```
CREATE IDENTITY PROVIDER oauth_standard TYPE azure
NAMESPACE 'aad'
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

Vous pouvez connecter une application gérée par IAM Identity Center à un cluster alloué existant ou à un groupe de travail Amazon Redshift sans serveur. Cela vous permet de gérer l’accès à une base de données Redshift via IAM Identity Center. Pour ce faire, exécutez une commande SQL telle que l’exemple suivant : Vous devez être administrateur de base de données.

```
CREATE IDENTITY PROVIDER "redshift-idc-app" TYPE AWSIDC
NAMESPACE 'awsidc'
APPLICATION_ARN 'arn:aws:sso::123456789012:application/ssoins-12345f67fe123d4/apl-a0b0a12dc123b1a4'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole';
```

Dans ce cas, l’ARN de l’application identifie l’application gérée à laquelle se connecter. Vous pouvez la trouver en exécutant `SELECT * FROM SVV_IDENTITY_PROVIDERS;`.

Pour plus d’informations sur l’utilisation de CREATE IDENTITY PROVIDER, y compris des exemples supplémentaires, consultez [Fédération de fournisseurs d’identité natifs pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html). Pour plus d’informations sur la configuration d’une connexion à IAM Identity Center depuis Redshift, consultez [Connexion de Redshift à IAM Identity Center pour offrir aux utilisateurs une expérience d’authentification unique](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

# CREATE LIBRARY
<a name="r_CREATE_LIBRARY"></a>

Installe une bibliothèque Python, qui est disponible pour que les utilisateurs l’intègrent lors de la création d’une fonction définie par l’utilisateur (UDF) avec la commande [CREATE FUNCTION](r_CREATE_FUNCTION.md). La taille totale des bibliothèques installées par l’utilisateur ne peut pas dépasser 100 Mo. 

CREATE LIBRARY ne peut pas être exécutée à l’intérieur d’un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

Amazon Redshift prend en charge Python version 2.7. Pour plus d’informations, consultez la page [www.python.org](https://www.python.org/).

Pour plus d’informations, consultez [Exemple : importation des modules de la bibliothèque Python personnalisés](udf-importing-custom-python-library-modules.md). 

## Privilèges requis
<a name="r_CREATE_LIBRARY-privileges"></a>

Les privilèges suivants sont requis pour CREATE LIBRARY :
+ Superuser
+ Utilisateurs disposant du privilège CREATE LIBRARY ou du privilège du langage spécifié

## Syntaxe
<a name="r_CREATE_LIBRARY-synopsis"></a>

```
CREATE [ OR REPLACE ] LIBRARY library_name LANGUAGE plpythonu
FROM
{ 'https://file_url'
| 's3://bucketname/file_name'
authorization
  [ REGION [AS] 'aws_region']
  IAM_ROLE { default | ‘arn:aws:iam::<Compte AWS-id>:role/<role-name>’ }
}
```

## Parameters
<a name="r_CREATE_LIBRARY-parameters"></a>

OR REPLACE  
Spécifie que si une bibliothèque portant le même nom que celui-ci existe déjà, la bibliothèque existante est remplacée. REPLACE valide immédiatement. Si une fonction UDF qui dépend de la bibliothèque s’exécute simultanément, la fonction UDF peut échouer ou renvoyer des résultats inattendus, même si la fonction UDF est en cours d’exécution au sein d’une transaction. Vous devez être le propriétaire ou un super-utilisateur pour remplacer une bibliothèque.

 *nom\$1bibliothèque*   
Nom de la bibliothèque à installer. Vous ne pouvez pas créer une bibliothèque qui contient un module avec le même nom qu’un module de la bibliothèque standard Python ou qu’un module Amazon Redshift préinstallé. Si une bibliothèque existante installée par l’utilisateur emploie le même package Python que la bibliothèque à installer, vous devez supprimer la bibliothèque existante avant d’installer la nouvelle bibliothèque. Pour plus d'informations, consultez [Support du langage Python pour UDFs](udf-python-language-support.md).

LANGUAGE plpythonu  
Langage à utiliser. Python (plpythonu) est le seul langage pris en charge. Amazon Redshift prend en charge Python version 2.7. Pour plus d’informations, consultez la page [www.python.org](https://www.python.org/).

FROM  
Emplacement du fichier bibliothèque. Vous pouvez spécifier un compartiment Amazon S3 et le nom d’objet ou vous pouvez spécifier une URL pour télécharger le fichier depuis un site web public. La bibliothèque doit être empaquetée sous la forme d’un fichier `.zip`. Pour plus d’informations, consultez [Création et installation des modules Python](https://docs.python.org/2/library/distutils.html?highlight=distutils#module-distutils) dans la documentation Python.

 https://*url\$1fichier*   
URL pour télécharger le fichier depuis un site web public. L’URL peut contenir jusqu’à trois redirections. Voici un exemple d’URL de fichier.  

```
'https://www.example.com/pylib.zip'
```

 s3://*nom\$1compartiment/nom\$1fichier*   
Chemin d’accès vers un objet Amazon S3 qui contient le fichier bibliothèque. Voici un exemple de chemin d’objet Amazon S3.  

```
's3://amzn-s3-demo-bucket/my-pylib.zip'
```
Si vous spécifiez un compartiment Amazon S3, vous devez également fournir les informations d’identification pour un utilisateur AWS qui est autorisé à télécharger le fichier.   
 Si le compartiment Amazon S3 ne réside pas dans la même AWS région que votre cluster Amazon Redshift, vous devez utiliser l'option REGION pour spécifier la AWS région dans laquelle se trouvent les données. La valeur de *aws\$1region* doit correspondre à une AWS région répertoriée dans le tableau de la description des [REGION](copy-parameters-data-source-s3.md#copy-region) paramètres de la commande COPY.

*authorization*   
Clause indiquant la méthode que votre cluster utilise pour l’authentification et l’autorisation afin d’accéder au compartiment Amazon S3 qui contient le fichier bibliothèque. Votre cluster doit avoir l’autorisation d’accéder au compartiment Amazon S3 avec les actions LIST et GET.  
La syntaxe de l’autorisation est identique à celle de la commande COPY. Pour plus d'informations, consultez [Paramètres d’autorisation](copy-parameters-authorization.md).  

```
IAM_ROLE { default | ‘arn:aws:iam::<Compte AWS-id>:role/<role-name>’
```
 Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini comme rôle par défaut et associé au cluster lorsque la commande CREATE LIBRARY s’exécute.  
Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. Si vous spécifiez IAM\$1ROLE, vous ne pouvez pas utiliser ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN ni CREDENTIALS.  
Le cas échéant, si le compartiment Amazon S3 utilise le chiffrement côté serveur, fournissez la clé de chiffrement dans la chaîne credentials-args. Si vous utilisez des informations d’identification de sécurité temporaires, fournissez le jeton temporaire dans la chaîne *credentials-args*.  
Pour plus d'informations, consultez [informations d’identification de sécurité temporaires](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials).

 REGION [AS] *région\$1aws*   
 AWS Région dans laquelle se trouve le compartiment Amazon S3. REGION est obligatoire lorsque le compartiment Amazon S3 ne se trouve pas dans la même AWS région que le cluster Amazon Redshift. La valeur de *aws\$1region* doit correspondre à une AWS région répertoriée dans le tableau de la description des [REGION](copy-parameters-data-source-s3.md#copy-region) paramètres de la commande COPY.  
Par défaut, CREATE LIBRARY suppose que le compartiment Amazon S3 est situé dans la même AWS région que le cluster Amazon Redshift.

## Exemples
<a name="r_CREATE_LIBRARY-examples"></a>

Les deux exemples suivants installent le module Python [urlparse](https://docs.python.org/2/library/urlparse.html#module-urlparse), qui est empaqueté dans un fichier nommé `urlparse3-1.0.3.zip`. 

La commande suivante installe une bibliothèque UDF nommée `f_urlparse` à partir d’un package qui a été téléchargé sur un compartiment Amazon S3 situé dans la région USA Est.

```
create library f_urlparse
language plpythonu
from 's3://amzn-s3-demo-bucket/urlparse3-1.0.3.zip'
credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
region as 'us-east-1';
```

L’exemple suivant installe une bibliothèque nommée `f_urlparse` à partir d’un fichier bibliothèque sur un site web.



```
create library f_urlparse
language plpythonu
from 'https://example.com/packages/urlparse3-1.0.3.zip';
```

# CREATE MASKING POLICY
<a name="r_CREATE_MASKING_POLICY"></a>

Crée une nouvelle politique de masquage dynamique des données pour masquer les données d’un format donné. Pour plus d’informations sur le masquage dynamique des données, consultez [Masquage dynamique des données](t_ddm.md).

Les super-utilisateurs et les utilisateurs ou les rôles disposant du rôle sys:secadmin peuvent créer une politique de masquage.

## Syntaxe
<a name="r_CREATE_MASKING_POLICY-synopsis"></a>

```
CREATE MASKING POLICY 
   { policy_name | database_name.policy_name } [IF NOT EXISTS]
   WITH (input_columns)
   USING (masking_expression);
```

## Parameters
<a name="r_CREATE_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Nom de la politique de masquage. La politique de masquage ne peut pas avoir le même nom qu’une autre politique de masquage qui existe déjà dans la base de données.

database\$1name  
Nom de la base de données dans laquelle la politique sera créée. La politique peut être créée sur la base de données connectée ou sur le catalogue des autorisations fédérées Amazon Redshift.

*input\$1columns*   
Un tuple de noms de colonnes au format (type col1, type col2 ...).  
Les noms de colonne sont utilisés comme entrée pour l’expression du masquage. Les noms des colonnes ne doivent pas nécessairement correspondre aux noms des colonnes masquées, mais les types de données d’entrée et de sortie doivent correspondre.

*masking\$1expression*  
Expression SQL utilisée pour transformer les colonnes cibles. Elle peut être écrite à l’aide de fonctions de manipulation des données, telles que des fonctions de manipulation de chaînes, ou en conjonction avec des fonctions définies par l’utilisateur écrites en SQL, Python ou avec AWS Lambda. Vous pouvez inclure un tuple d’expressions de colonne pour masquer les politiques ayant plusieurs sorties. Si vous utilisez une constante comme expression de masquage, vous devez la convertir explicitement en un type correspondant au type d’entrée.  
 Vous devez disposer de l’autorisation USAGE sur toutes les fonctions définies par l’utilisateur que vous utilisez dans l’expression du masquage. 

Pour l'utilisation de CREATE MASKING POLICY sur le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# CREATE MATERIALIZED VIEW
<a name="materialized-view-create-sql-command"></a>

Crée une vue matérialisée basée sur une ou plusieurs tables Amazon Redshift. Vous pouvez également baser les vues matérialisées sur des tables externes créées à l’aide de Spectrum ou d’une requête fédérée. Pour obtenir des informations sur Spectrum, consultez [Amazon Redshift Spectrum](c-using-spectrum.md). Pour obtenir des informations sur la requête fédérée, consultez [Interrogation de données avec requête fédérée dans Amazon Redshift](federated-overview.md).

## Syntaxe
<a name="mv_CREATE_MATERIALIZED_VIEW-synopsis"></a>

```
CREATE MATERIALIZED VIEW mv_name
[ BACKUP { YES | NO } ]
[ table_attributes ]
[ AUTO REFRESH { YES | NO } ]
AS query
```

## Parameters
<a name="mv_CREATE_MATERIALIZED_VIEW-parameters"></a>

BACKUP  
Clause qui spécifie si la vue matérialisée doit être incluse dans les instantanés de cluster automatiques et manuels.   
Pour les vues matérialisées qui ne contiennent pas de données critiques, spécifiez BACKUP NO pour économiser du temps de traitement lorsque la création d’instantanés et la restauration à partir d’instantanés, et pour réduire l’espace de stockage sur Amazon Simple Storage Service. Comme le paramètre BACKUP NO n’a aucun effet sur la réplication automatique des données sur d’autres nœuds au sein du cluster, les vues matérialisées pour lesquelles BACKUP NO est spécifié sont restaurées en cas de défaillance de nœud. La valeur par défaut est BACKUP YES.

 *table\$1attributes*   
Clause qui spécifie la manière dont les données de la vue matérialisée sont distribuées, notamment :  
+  Style de distribution de la vue matérialisée, au format `DISTSTYLE { EVEN | ALL | KEY }`. Si vous omettez cette clause, le style de distribution est `EVEN`. Pour plus d'informations, consultez [Styles de distribution](c_choosing_dist_sort.md).
+ Clé de distribution de la vue matérialisée, au format `DISTKEY ( distkey_identifier )`. Pour plus d'informations, consultez [Détermination des styles de distribution](t_designating_distribution_styles.md).
+ Clé de tri de la vue matérialisée, au format `SORTKEY ( column_name [, ...] )`. Pour plus d'informations, consultez [Clés de tri](t_Sorting_data.md).

AS *requête*  
Une instruction `SELECT` valide qui définit la vue matérialisée et son contenu. L’ensemble de résultats de la requête définit les colonnes et les lignes de la vue matérialisée. Pour obtenir des informations sur les limitations lors de la création de vues matérialisées, consultez [Limitations](#mv_CREATE_MATERIALIZED_VIEW-limitations).  
En outre, des constructions de langage SQL spécifiques utilisées dans la requête déterminent si la vue matérialisée peut être reproduite de manière incrémentielle ou complète. Pour obtenir des informations sur la méthode d’actualisation, consultez [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md). Pour obtenir des informations sur les limitations de l’actualisation progressive, consultez [Limites d’actualisation incrémentielle](materialized-view-refresh-sql-command.md#mv_REFRESH_MARTERIALIZED_VIEW_limitations).  
Si la requête contient une commande SQL qui ne prend pas en charge l’actualisation incrémentielle, Amazon Redshift affiche un message indiquant que la vue matérialisée utilisera une actualisation complète. Le message peut ou non s’afficher, selon l’application cliente SQL. Cochez la colonne `state` de [STV\$1MV\$1INFO](r_STV_MV_INFO.md) pour voir le type d’actualisation utilisé par une vue matérialisée.

AUTO REFRESH  
Clause qui définit si la vue matérialisée doit être automatiquement actualisée avec les dernières modifications de ses tables de base ou non. La valeur par défaut est `NO`. Pour plus d'informations, consultez [Actualisation d’une vue matérialisée](materialized-view-refresh.md).

## Notes d’utilisation
<a name="mv_CREATE_MARTERIALIZED_VIEW_usage"></a>

Pour créer une vue matérialisée, vous devez disposer des privilèges suivants :
+ Privilèges CREATE pour un schéma.
+ Privilège SELECT au niveau de la table ou d’une colonne sur les tables de base pour créer une vue matérialisée. Si vous disposez de privilèges au niveau de colonnes spécifiques, vous pouvez créer une vue matérialisée uniquement avec ces colonnes.

 Vous pouvez créer une vue matérialisée à partir d'un cluster de partage de données distant en fournissant le nom de la base de données externe dans le. `mv_name` 

## Actualisation incrémentielle des vues matérialisées dans une unité de partage des données
<a name="mv_CREATE_MARTERIALIZED_VIEW_datashare"></a>

 Amazon Redshift prend en charge l’actualisation automatique et incrémentielle des vues matérialisées dans une unité de partage des données consommateur lorsque les tables de base sont partagées. L’actualisation incrémentielle est une opération au cours de laquelle Amazon Redshift identifie les modifications apportées à la ou les tables de base après l’actualisation précédente et met à jour uniquement les enregistrements correspondants dans la vue matérialisée. Cela s’exécute plus rapidement qu’une actualisation complète et améliore les performances de la charge de travail. Il n’est pas nécessaire de modifier la définition de votre vue matérialisée pour tirer parti de l’actualisation incrémentielle. 

Il existe quelques limites à prendre en compte pour tirer parti de l’actualisation incrémentielle avec une vue matérialisée : 
+ La vue matérialisée ne doit référencer qu’une seule base de données, locale ou distante. 
+ L’actualisation incrémentielle n’est disponible que sur les nouvelles vues matérialisées. Par conséquent, vous devez supprimer les vues matérialisées existantes et les recréer pour qu’une actualisation incrémentielle ait lieu.

Pour plus d’informations sur la création de vues matérialisées dans une unité de partage des données, consultez [Utiliser les vues dans le partage de données Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/datashare-views), qui contient plusieurs exemples de requêtes.

## Mises à jour DDL des vues matérialisées ou des tables de base
<a name="materialized-view-ddl"></a>

Lorsque vous utilisez des vues matérialisées dans Amazon Redshift, suivez ces notes d’utilisation pour les mises à jour du langage de définition de données (DDL) vers des vues matérialisées ou des tables de base.
+ Vous pouvez ajouter des colonnes à une table de base sans affecter les vues matérialisées qui référencent cette table.
+ Certaines opérations peuvent laisser la vue matérialisée dans un état qui ne peut pas du tout être actualisé. Par exemple, des opérations telles que le renommage ou la suppression d’une colonne, le modification d’un type de colonne et le changement de nom d’un schéma. Ce type de vue matérialisée peut être interrogé mais pas actualisé. Dans ce cas, vous devez annuler et recréer la vue matérialisée. 
+ En général, vous ne pouvez pas modifier la définition d’une vue matérialisée (son instruction SQL).
+ Vous ne pouvez pas renommer une vue matérialisée. 

## Limitations
<a name="mv_CREATE_MATERIALIZED_VIEW-limitations"></a>

Vous ne pouvez pas définir de vue matérialisée qui référence ou comprend l’un des éléments suivants :
+ Vues standard ou tables et vues système.
+ Tables temporaires.
+ Fonctions définies par l’utilisateur.
+ La clause ORDER BY, LIMIT ou OFFFET.
+ Références de liaison tardive aux tables de base. En d’autres termes, toute table de base ou colonne associée référencée dans la définition de la requête SQL de la vue matérialisée doit exister et être valide. 
+ Fonctions de nœud leader uniquement : CURRENT\$1SCHEMA, CURRENT\$1SCHEMAS, HAS\$1DATABASE\$1PRIVILEGE, HAS\$1SCHEMA\$1PRIVILEGE, HAS\$1TABLE\$1PRIVILEGE.
+ Vous ne pouvez pas utiliser l’option AUTO REFRESH YES lorsque la définition de la vue matérialisée inclut des fonctions mutables ou des schémas externes. Vous ne pouvez pas non plus l’utiliser lorsque vous définissez une vue matérialisée sur une autre vue matérialisée.
+ Vous n’avez pas besoin d’exécuter manuellement [ANALYSE](r_ANALYZE.md) sur les vues matérialisées. Pour l’heure, l’analyse s’effectue uniquement via AUTO ANALYZE. Pour plus d’informations, consultez [Analyse des tables](t_Analyzing_tables.md).
+ Tables protégées par RLS ou DDM. 
+ La création de vues matérialisées à partir de clusters de partage de données distants ne prend pas en charge les références sur d'autres vues matérialisées, les tables Spectrum, les tables définies dans un autre cluster Redshift et. UDFs Ils sont pris en charge pour la création de vues matérialisées à partir du cluster local (producteur). 

## Exemples
<a name="mv_CREATE_MARTERIALIZED_VIEW_examples"></a>

L’exemple suivant montre comment créer une vue matérialisée à partir de trois tables de base qui sont jointes et agrégées. Chaque ligne représente une catégorie avec le nombre de billets vendus. Lorsque vous interrogez la vue matérialisée tickets\$1mv, vous accédez directement aux données précalculées dans la vue matérialisée tickets\$1mv.

```
CREATE MATERIALIZED VIEW tickets_mv AS
    select   catgroup,
    sum(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;
```

L’exemple suivant crée une vue matérialisée similaire à l’exemple précédent et utilise la fonction d’agrégation MAX(). 

```
CREATE MATERIALIZED VIEW tickets_mv_max AS
    select   catgroup,
    max(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;

SELECT name, state FROM STV_MV_INFO;
```

L’exemple suivant utilise une clause UNION ALL pour joindre la table `public_sales` Amazon Redshift et la table `spectrum.sales` Redshift Spectrum pour créer une vue matérialisée `mv_sales_vw`. Pour obtenir des informations sur la commande CREATE EXTERNAL TABLE pour Amazon Redshift Spectrum, consultez [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). La table externe Redshift Spectrum fait référence aux données sur Amazon S3.

```
CREATE MATERIALIZED VIEW mv_sales_vw as
select salesid, qtysold, pricepaid, commission, saletime from public.sales
union all
select salesid, qtysold, pricepaid, commission, saletime from spectrum.sales
```

L’exemple suivant crée une vue matérialisée `mv_fq` basée sur une table externe de requête fédérée. Pour obtenir des informations sur la requête fédérée, consultez [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md).

```
CREATE MATERIALIZED VIEW mv_fq as select firstname, lastname from apg.mv_fq_example;

select firstname, lastname from mv_fq;
 firstname | lastname
-----------+----------
 John      | Day
 Jane      | Doe
(2 rows)
```

L’exemple suivant montre la définition d’une vue matérialisée.

```
SELECT pg_catalog.pg_get_viewdef('mv_sales_vw'::regclass::oid, true);

pg_get_viewdef
---------------------------------------------------
create materialized view mv_sales_vw as select a from t;
```

 L’exemple suivant montre comment définir AUTO REFRESH dans la définition de la vue matérialisée et indique également un DISTSTYLE. Commencez par créer une table de base simple. 

```
CREATE TABLE baseball_table (ball int, bat int);
```

Créez ensuite une vue matérialisée.

```
CREATE MATERIALIZED VIEW mv_baseball DISTSTYLE ALL AUTO REFRESH YES AS SELECT ball AS baseball FROM baseball_table;
```

Vous pouvez maintenant interroger la vue matérialisée mv\$1baseball. Pour vérifier si AUTO REFRESH est activé pour une vue matérialisée, consultez [STV\$1MV\$1INFO](r_STV_MV_INFO.md).

L’exemple suivant crée une vue matérialisée qui fait référence à une table source dans une autre base de données. Cela suppose que la base de données contenant la table source, database\$1A, se trouve dans le même cluster ou groupe de travail que votre vue matérialisée, que vous créez dans database\$1B. (Vous pouvez remplacer vos propres bases de données par l’exemple.) Tout d’abord, créez une table dans database\$1A appelée *cities* pour les villes, avec une colonne *cityname* pour les noms de villes. Définissez le type de données de la colonne comme VARCHAR. Après avoir créé la table source, exécutez la commande suivante dans database\$1B pour créer une vue matérialisée dont la source est votre table *cities*. Assurez-vous de spécifier la base de données et le schéma de la table source dans la clause FROM :

```
CREATE MATERIALIZED VIEW cities_mv AS
SELECT  cityname
FROM    database_A.public.cities;
```

Interrogez la vue matérialisée que vous avez créée. La requête extrait les enregistrements dont la source d’origine est la table *cities* dans database\$1A :

```
select * from cities_mv;
```

Lorsque vous exécutez l’instruction SELECT, *cities\$1mv* renvoie les enregistrements. Les enregistrements sont actualisés à partir de la table source uniquement lorsqu’une instruction REFRESH est exécutée. Notez également que vous ne pouvez pas mettre à jour les enregistrements directement dans la vue matérialisée. Pour plus d’informations sur l’actualisation des données dans une vue matérialisée, consultez [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md).

Pour en savoir plus sur la présentation des vues matérialisées et les commandes SQL utilisées pour actualiser et supprimer les vues matérialisées, consultez les rubriques suivantes :
+ [Vues matérialisées dans Amazon Redshift](materialized-view-overview.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)

# CREATE MODEL
<a name="r_CREATE_MODEL"></a>

**Topics**
+ [Conditions préalables](#r_create_model_prereqs)
+ [Privilèges requis](#r_simple_create_model-privileges)
+ [Contrôle des coûts](#r_create_model_cost)
+ [CREATE MODEL](#r_full_create_model)
+ [Parameters](#r_create_model_parameters)
+ [Notes d’utilisation](r_create_model_usage_notes.md)
+ [Cas d’utilisation](r_create_model_use_cases.md)

## Conditions préalables
<a name="r_create_model_prereqs"></a>

Avant d’utiliser l’instruction CREATE MODEL, suivez les étapes requises détaillées dans [Configuration du cluster pour l’utilisation d’Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup). Vous trouverez ci-dessous un résumé général des étapes requises.
+ Créez un cluster Amazon Redshift à l'aide de la console de AWS gestion ou de l'interface de ligne de AWS commande (AWS CLI).
+ Attachez la politique AWS Identity and Access Management (IAM) lors de la création du cluster.
+ Pour permettre à Amazon Redshift et à SageMaker AI d'assumer le rôle d'interaction avec d'autres services, ajoutez la politique de confiance appropriée au rôle IAM.

Pour plus d’informations sur le rôle IAM, la politique d’approbation et d’autres prérequis, consultez [Configuration du cluster pour l’utilisation d’Amazon Redshift ML](getting-started-machine-learning.md#cluster-setup).

Vous trouverez ci-dessous différents cas d’utilisation pour l’instruction CREATE MODEL.
+ [CREATE MODEL simple](r_create_model_use_cases.md#r_simple_create_model)
+ [CREATE MODEL avec guide de l’utilisateur](r_create_model_use_cases.md#r_user_guidance_create_model)
+ [CRÉEZ des XGBoost modèles avec AUTO OFF](r_create_model_use_cases.md#r_auto_off_create_model)
+ [Modèle BYOM (Bring Your Own Model) : inférence locale](r_create_model_use_cases.md#r_byom_create_model)
+ [Modèle BYOM (Bring Your Own Model) : inférence distante](r_create_model_use_cases.md#r_byom_create_model_remote)
+ [CREATE MODEL avec K-MEANS](r_create_model_use_cases.md#r_k-means_create_model)
+ [CREATE MODEL](#r_full_create_model)

## Privilèges requis
<a name="r_simple_create_model-privileges"></a>

Les privilèges suivants sont requis pour CREATE MODEL :
+ Superuser
+ Utilisateurs disposant du privilège CREATE MODEL
+ Rôles avec le privilège GRANT CREATE MODEL

## Contrôle des coûts
<a name="r_create_model_cost"></a>

 Amazon Redshift ML utilise les ressources existantes du cluster pour créer des modèles de prédiction, de sorte que vous n’avez pas à payer de frais supplémentaires. Cependant, des coûts supplémentaires peuvent s’appliquer si vous devez redimensionner votre cluster ou si vous souhaitez entraîner vos modèles. Amazon Redshift ML utilise Amazon SageMaker AI pour entraîner des modèles, ce qui entraîne un coût supplémentaire. Il existe des moyens de contrôler les coûts supplémentaires, par exemple en limitant la durée maximale de l’entraînement ou en limitant le nombre d’exemples d’entraînement utilisés pour entraîner votre modèle. Pour obtenir plus d’informations, consultez [Costs for using Amazon Redshift ML](https://docs.aws.amazon.com/redshift/latest/dg/cost.html) (Coûts d’utilisation d’Amazon Redshift ML). 

## CREATE MODEL
<a name="r_full_create_model"></a>

Voici un résumé des options de base de la syntaxe CREATE MODEL complète.

### Syntaxe CREATE MODEL complète
<a name="r_auto_off-create-model-synposis"></a>

Voici la syntaxe complète de l’instruction CREATE MODEL.

**Important**  
Lorsque vous créez un modèle à l’aide de l’instruction CREATE MODEL, suivez l’ordre des mots-clés dans la syntaxe suivante.

```
CREATE MODEL model_name
FROM { table_name | ( select_statement )  | 'job_name' }
[ TARGET column_name ]
FUNCTION function_name [ ( data_type [, ...] ) ] 
[ RETURNS data_type ] 
  -- supported only for BYOM
[ SAGEMAKER 'endpoint_name'[:'model_name']] 
  -- supported only for BYOM remote inference
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[ AUTO ON / OFF ]
  -- default is AUTO ON
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER | KMEANS | FORECAST } ]
  -- not required for non AUTO OFF case, default is the list of all supported types
  -- required for AUTO OFF
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
  -- not supported when AUTO OFF
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1_Macro' | 'AUC' |
             'reg:squarederror' | 'reg:squaredlogerror'| 'reg:logistic'|
             'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge',
             'multi:softmax' | 'RMSE' | 'WAPE' | 'MAPE' | 'MASE' | 'AverageWeightedQuantileLoss' ) ]
  -- for AUTO ON: first 5 are valid
  -- for AUTO OFF: 6-13 are valid
  -- for FORECAST: 14-18 are valid
[ PREPROCESSORS 'string' ]
  -- required for AUTO OFF, when it has to be 'none'
  -- optional for AUTO ON
[ HYPERPARAMETERS { DEFAULT | DEFAULT EXCEPT ( Key 'value' (,...) ) } ]
  -- support XGBoost hyperparameters, except OBJECTIVE
  -- required and only allowed for AUTO OFF
  -- default NUM_ROUND is 100
  -- NUM_CLASS is required if objective is multi:softmax (only possible for AUTO OFF)
 [ SETTINGS (
   S3_BUCKET 'amzn-s3-demo-bucket',  |
    -- required
  TAGS 'string', |
    -- optional
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional, defualt is on.
  MAX_CELLS integer, |
    -- optional, default is 1,000,000
  MAX_RUNTIME integer (, ...) |
    -- optional, default is 5400 (1.5 hours)
  HORIZON integer, |
    -- required if creating a forecast model
  FREQUENCY integer, |
    -- required if creating a forecast model
  PERCENTILES string, |
    -- optional if creating a forecast model
  MAX_BATCH_ROWS integer -- optional for BYOM remote inference
    ) ]
```

## Parameters
<a name="r_create_model_parameters"></a>

model\$1name  
Nom du modèle. Le nom du modèle d’un schéma doit être unique.

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1 *’job\$1name’*\$1  
Le table\$1name ou la requête qui spécifie les données d’entraînement. Il peut s’agir soit d’une table existante dans le système, soit d’une requête SELECT compatible avec Amazon RedShift entre parenthèses, c’est-à-dire (). Le résultat de la requête doit contenir au moins deux colonnes. 

TARGET *column\$1name*  
Nom de la colonne qui devient la cible de la prédiction. La colonne doit exister dans la clause FROM. 

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
Nom de la fonction à créer et types de données des arguments d’entrée. Vous pouvez fournir le nom d’un schéma de votre base de données au lieu d’un nom de fonction.

RETURNS *type\$1données*  
Type de données à renvoyer depuis la fonction du modèle. Le type de données `SUPER` renvoyé ne s’applique qu’aux modèles BYOM avec inférence à distance.

SAGEMAKER *’endpoint\$1name’*[:*’model\$1name’*]  
Nom du point de terminaison Amazon SageMaker AI. Si le nom du point de terminaison pointe vers un point de terminaison multimodèle, ajoutez le nom du modèle à utiliser. Le point de terminaison doit être hébergé au même Région AWS endroit que le cluster Amazon Redshift.

IAM\$1ROLE \$1 default \$1 ’arn:aws:iam::<account-id>:role/<role-name>’\$1  
 Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini comme rôle par défaut et associé au cluster lorsque la commande CREATE MODEL s’exécute. Vous pouvez également spécifier l’ARN d’un rôle IAM pour utiliser ce rôle.

[ AUTO ON / OFF ]  
 Active ou désactive la détection automatique CREATE MODEL du préprocesseur, de l’algorithme et de la sélection d’hyperparamètres. Lorsque vous créez un modèle de prévision, vous devez utiliser un AutoPredictor, où Amazon Forecast applique les combinaisons optimales d'algorithmes à chaque série chronologique de votre ensemble de données. 

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1 KMEANS \$1 FORECAST \$1*   
(Facultatif) Spécifie le type de modèle. Vous pouvez spécifier si vous souhaitez entraîner un modèle d'un type de modèle spécifique, tel que le perceptron multicouche (MLP) XGBoost, le KMEANS ou le Linear Learner, qui sont tous des algorithmes pris en charge par Amazon AI Autopilot. SageMaker Si vous ne spécifiez pas le paramètre, tous les types de modèles pris en charge sont recherchés pendant l’entraînement pour trouver le meilleur modèle. Vous pouvez également créer un modèle de prévision dans Redshift ML pour créer des prévisions chronologiques précises.

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(Facultatif) Spécifie le type de problème. Si vous connaissez le type de problème, vous pouvez limiter la recherche Amazon Redshift au meilleur modèle de ce type en particulier. Si vous ne spécifiez pas ce paramètre, un type de problème est détecté pendant l’entraînement, en fonction de vos données.

OBJECTIF (« MSE » \$1 « Précision » \$1 « F1 » \$1 « F1Macro » \$1 « AUC » \$1 « reg:squarederror » \$1 « reg:squaredlogerror » \$1 « reg:logistic » \$1 « reg:pseudohubererror » \$1 « reg:tweedie » \$1 « binary:hinge » \$1 « multi:softmax » \$1 « RM » (« \$1 » WAPE » \$1 « MAPE » \$1 « MASE » \$1 « ») AverageWeightedQuantileLoss  
(Facultatif) Spécifie le nom de la métrique d’objectif utilisée pour mesurer la qualité prédictive d’un système de machine learning. Cette métrique est optimisée pendant l’entraînement afin de fournir la meilleure estimation des valeurs des paramètres du modèle à partir des données. Si vous ne spécifiez pas de métrique explicitement, le comportement par défaut consiste à utiliser automatiquement MSE : pour la régression, F1 : pour la classification binaire, Précision : pour la classification multiclasse. Pour plus d'informations sur les objectifs, consultez [Auto MLJob Objective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) dans le manuel *Amazon SageMaker AI API Reference* et [Learning task parameters](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters) dans la documentation XGBOOST. Les valeurs RMSE, WAPE, MAPE, MASE et AverageWeightedQuantileLoss ne s'appliquent qu'aux modèles Forecast. Pour plus d'informations, consultez l'opération API [CreateAutoPredictor](https://docs.aws.amazon.com/forecast/latest/dg/API_CreateAutoPredictor.html#forecast-CreateAutoPredictor-request-OptimizationMetric).

 *PREPROCESSORS ’string’ *   
(Facultatif) Spécifie certaines combinaisons de préprocesseurs à certains ensembles de colonnes. Le format est une liste de columnSets et les transformations appropriées à appliquer à chaque ensemble de colonnes. Amazon Redshift applique tous les transformateurs d'une liste de transformateurs spécifique à toutes les colonnes de la liste correspondante. ColumnSet Par exemple, pour appliquer OneHotEncoder avec Imputer aux colonnes t1 et t2, utilisez l'exemple de commande suivant.  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
  {"ColumnSet": [
      "t1",
      "t2"
    ],
    "Transformers": [
      "OneHotEncoder",
      "Imputer"
    ]
  },
  {"ColumnSet": [
      "t3"
    ],
    "Transformers": [
      "OneHotEncoder"
    ]
  },
  {"ColumnSet": [
      "temp"
    ],
    "Transformers": [
      "Imputer",
      "NumericPassthrough"
    ]
  }
]'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket'
)
```

HYPERPARAMETERS \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
Spécifie si les XGBoost paramètres par défaut sont utilisés ou remplacés par des valeurs spécifiées par l'utilisateur. Les valeurs doivent être entre guillemets simples. Vous trouverez ci-dessous des exemples de paramètres pour XGBoost et leurs valeurs par défaut.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_CREATE_MODEL.html)

SETTINGS ( S3\$1BUCKET *’amzn-s3-demo-bucket’*, \$1 TAGS ’string’, \$1 KMS\$1KEY\$1ID *’kms\$1string’ *, \$1 S3\$1GARBAGE\$1COLLECT on / off, \$1 MAX\$1CELLS integer , \$1 MAX\$1RUNTIME (,...) , \$1 HORIZON integer, \$1 FREQUENCY forecast\$1frequency, \$1 PERCENTILES array of strings )  
La clause S3\$1BUCKET spécifie l’emplacement Amazon S3 utilisé pour stocker les résultats intermédiaires.  
(Facultatif) Le paramètre TAGS est une liste séparée par des virgules de paires clé-valeur que vous pouvez utiliser pour étiqueter les ressources créées dans Amazon SageMaker AI et Amazon Forecast. Les balises permettent d’organiser les ressources et d’imputer les coûts. Les valeurs de la paire étant facultatives, vous pouvez créer des balises en utilisant le format `key=value` ou en créant simplement une clé. Pour en savoir plus sur les balises dans Amazon Redshift, consultez [Présentation du balisage](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-tagging.html).  
(Facultatif) KMS\$1KEY\$1ID indique si Amazon Redshift utilise le chiffrement côté serveur avec une clé pour protéger les données au repos. AWS KMS Les données en transit sont protégées par le protocole SSL.   
(Facultatif) La clause S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1 spécifie si Amazon Redshift lance le récupérateur de mémoire sur les jeux de données obtenus utilisés pour entraîner les modèles et sur les modèles. Si la valeur est définie sur OFF, les jeux de données obtenus utilisés pour entraîner les modèles et les modèles eux-mêmes restent dans Amazon S3 et peuvent être utilisés à d’autres fins. Si la valeur est définie sur ON, Amazon Redshift supprime les artefacts dans Amazon S3 une fois l’entraînement terminé. La valeur par défaut est ON.  
(Facultatif) La clause MAX\$1CELLS spécifie le nombre de cellules dans les données d’entraînement. Cette valeur est le produit du nombre d’enregistrements (dans la requête d’entraînement ou dans la table) multiplié par le nombre de colonnes. La valeur par défaut est 1 000 000.  
(Facultatif) La clause MAX\$1RUNTIME spécifie la durée maximale d’entraînement. Les tâches d’entraînement se terminent souvent plus tôt en fonction de la taille du jeu de données. Ce nombre spécifie la durée maximale de l’entraînement. La valeur par défaut est 5 400 (90 minutes).  
HORIZON spécifie le nombre maximum de prédictions que le modèle de prévision peut renvoyer. Une fois le modèle entraîné, vous ne pouvez pas modifier cet entier. Ce paramètre est obligatoire pour l’entraînement d’un modèle de prévision.  
FREQUENCY indique le degré de précision en unités de temps que vous souhaitez pour les prévisions. Les options disponibles sont `Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`. Ce paramètre est obligatoire pour l’entraînement d’un modèle de prévision.  
(Facultatif) PERCENTILES est une chaîne délimitée par des virgules qui spécifie les types de prévisions utilisés pour entraîner un prédicteur. Les types de prévisions peuvent être des quantiles compris entre 0,01 et 0,99, par incréments de 0,01 ou plus. Vous pouvez également spécifier la prévision moyenne à l’aide de la moyenne. Vous pouvez spécifier un maximum de cinq types de prévisions.

 MAX\$1BATCH\$1ROWS *entier*   
(Facultatif) Le nombre maximum de lignes qu'Amazon Redshift envoie dans une seule demande par lot pour un seul appel d' SageMaker IA. Uniquement prise en charge pour BYOM avec inférence à distance. La valeur minimale pour ce paramètre est 1. La valeur maximale est `INT_MAX` ou 2 147 483 647. Ce paramètre n’est obligatoire que lorsque les types de données en entrée et en sortie sont de type *SUPER*. La valeur maximale est `INT_MAX` ou 2 147 483 647. 

# Notes d’utilisation
<a name="r_create_model_usage_notes"></a>

Tenez compte des éléments suivants lorsque vous utilisez CREATE MODEL :
+ L’instruction CREATE MODEL fonctionne en mode asynchrone et renvoie le résultat de l’exportation des données d’entraînement vers Amazon S3. Les étapes restantes de la formation dans Amazon SageMaker AI se déroulent en arrière-plan. Bien que l’entraînement soit en cours, la fonction d’inférence correspondante est visible mais ne peut pas être exécutée. Vous pouvez interroger [STV\$1ML\$1MODEL\$1INFO](r_STV_ML_MODEL_INFO.md) pour voir l’état de l’entraînement. 
+ L’entraînement peut s’exécuter jusqu’à 90 minutes en arrière-plan, par défaut dans le modèle Auto et peut être prolongée. Pour annuler l’entraînement, exécutez simplement la commande [DROP MODEL](r_DROP_MODEL.md).
+ Le cluster Amazon Redshift que vous utilisez pour créer le modèle et le compartiment Amazon S3 utilisé pour mettre en page les données d’entraînement et les artefacts de modèle doivent se trouver dans la même région AWS .
+ Pendant la formation du modèle, Amazon Redshift et SageMaker AI stockent les artefacts intermédiaires dans le compartiment Amazon S3 que vous fournissez. Par défaut, Amazon Redshift lance le récupérateur de mémoire à la fin de l’opération CREATE MODEL. Amazon Redshift supprime ces objets d’Amazon S3. Pour retenir ces artefacts sur Amazon S3, définissez l’option S3\$1GARBAGE COLLECT OFF.
+ Vous devez utiliser au moins 500 lignes dans les données d’entraînement fournies dans la clause FROM.
+ Vous pouvez spécifier jusqu’à 256 colonnes de fonctions (entrée) dans la clause FROM \$1 table\$1name \$1 ( select\$1query ) \$1 lorsque vous utilisez l’instruction CREATE MODEL.
+ Pour AUTO ON, les types de colonnes que vous pouvez utiliser comme jeu d’entraînement sont SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE, BOOLEAN, CHAR, VARCHAR, DATE, TIME, TIMETZ, TIMESTAMP et TIMESTAMPTZ. Pour AUTO OFF, les types de colonnes que vous pouvez utiliser comme jeu d’entraînement sont SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE et BOOLEAN.
+ Vous ne pouvez pas utiliser DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, GEOMETRY, GEOGRAPHY, HLLSKETCH, SUPER ou VARBYTE comme type de colonne cible.
+ Pour améliorer la précision du modèle, optez pour l’une des solutions suivantes :
  + Ajoutez autant de colonnes pertinentes que possible dans la commande CREATE MODEL lorsque vous spécifiez les données d’entraînement dans la clause FROM.
  + Utilisez une valeur plus grande pour MAX\$1RUNTIME et MAX\$1CELLS. Des valeurs plus élevées pour ce paramètre augmentent le coût de l’entraînement d’un modèle.
+ L’exécution de l’instruction CREATE MODEL renvoie dès que les données d’entraînement sont calculées et exportées vers le compartiment Amazon S3. Ensuite, vous pouvez vérifier l’état de l’entraînement à l’aide de la commande SHOW MODEL. Lorsqu’un modèle entraîné en arrière-plan échoue, vous pouvez vérifier l’erreur à l’aide de la commande SHOW MODEL. Vous ne pouvez pas effectuer de nouvelle tentative pou un modèle ayant échoué. Utilisez la commande DROP MODEL pour supprimer un modèle ayant échoué et créer un nouveau modèle. Pour plus d’informations sur les modèles SHOW MODEL, consultez [SHOW MODEL](r_SHOW_MODEL.md).
+ Le modèle BYOM local prend en charge le même type de modèles que ceux pris en charge par le ML d’Amazon Redshift pour les cas non-BYOM. Amazon Redshift prend en charge les modèles simples XGBoost ( XGBoost version 1.0 ou ultérieure), les modèles KMEANS sans préprocesseurs et les modèles XGBOOST/MLP/Linear Learner entraînés par Trained by Amazon AI Autopilot. SageMaker Il prend en charge ce dernier avec des préprocesseurs spécifiés par Autopilot et également pris en charge par Amazon SageMaker AI Neo.
+ Si le routage amélioré de votre cluster Amazon Redshift est activé pour votre cloud privé virtuel (VPC), assurez-vous de créer un point de terminaison Amazon S3 VPC et un point de terminaison VPC AI pour le SageMaker VPC dans lequel se trouve votre cluster. Cela permet au trafic de s’exécuter via votre VPC entre ces services pendant l’exécution de la commande CREATE MODEL. Pour plus d'informations, consultez [SageMaker AI Clarify Job Amazon VPC Subnets and](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-vpc.html#clarify-vpc-job) Security Groups.

# Cas d’utilisation
<a name="r_create_model_use_cases"></a>

Les cas d’utilisation suivants montrent comment utiliser la clause CREATE MODEL en fonction de vos besoins.

## CREATE MODEL simple
<a name="r_simple_create_model"></a>

Voici un résumé des options de base de la syntaxe CREATE MODEL.

### Syntaxe CREATE MODEL simple
<a name="r_simple-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_query ) }
TARGET column_name
FUNCTION prediction_function_name
IAM_ROLE { default }
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  [ MAX_CELLS integer ]
)
```

### Paramètres CREATE MODEL simples
<a name="r_simple-create-model-parameters"></a>

 *model\$1name*   
Nom du modèle. Le nom du modèle d’un schéma doit être unique.

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1  
Le table\$1name ou la requête qui spécifie les données d’entraînement. Il peut s’agir soit d’une table existante dans le système, soit d’une requête SELECT compatible avec Amazon RedShift entre parenthèses, c’est-à-dire (). Le résultat de la requête doit contenir au moins deux colonnes. 

TARGET *column\$1name*  
Nom de la colonne qui devient la cible de la prédiction. La colonne doit exister dans la clause FROM. 

FUNCTION *prediction\$1function\$1name*   
Valeur qui spécifie le nom de la fonction de machine learning Amazon Redshift à générer par le modèle CREATE MODEL et utilisée pour effectuer des prédictions à l’aide de ce modèle. La fonction est créée dans le même schéma que l’objet de modèle et peut être surchargée.  
L'apprentissage automatique Amazon Redshift prend en charge des modèles tels que les modèles Xtreme Gradient Boosted tree (XGBoost) pour la régression et la classification.

IAM\$1ROLE \$1 default \$1 ’arn:aws:iam::<account-id>:role/<role-name>’ \$1  
 Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini comme rôle par défaut et associé au cluster lorsque la commande CREATE MODEL s’exécute. Vous pouvez également spécifier l’ARN d’un rôle IAM pour utiliser ce rôle.

 *S3\$1BUCKET *’amzn-s3-demo-bucket’**   
Le nom du compartiment Amazon S3 que vous avez créé précédemment était utilisé pour partager des données d'entraînement et des artefacts entre Amazon Redshift et SageMaker AI. Amazon Redshift crée un sous-dossier dans ce compartiment avant le déchargement des données d’entraînement. Lorsque l’entraînement est terminé, Amazon Redshift supprime le sous-dossier créé et son contenu. 

MAX\$1CELLS integer   
Nombre maximal de cellules à exporter à partir de la clause FROM. La valeur par défaut est 1 000 000.   
Le nombre de cellules est le produit du nombre de lignes dans les données d’entraînement (produites par la table ou la requête de clause FROM) multiplié par le nombre de colonnes. Si le nombre de cellules dans les données d’entraînement est supérieur à celui spécifié par le paramètre max\$1cells, CREATE MODEL crée des sous-échantillons des données d’entraînement de la clause FROM pour réduire la taille du jeu de données d’entraînement en dessous de la valeur MAX\$1CELLS. Autoriser des jeux de données d’entraînement plus volumineux peut permettre de bénéficier d’une plus grande précision, mais peut également augmenter la durée et le coût d’entraînement du modèle.  
Pour obtenir des informations sur les coûts d’utilisation d’Amazon Redshift, consultez [Coûts d’utilisation d’Amazon Redshift ML](cost.md).  
Pour plus d’informations sur les coûts associés aux différents nombres de cellules et sur les détails de l’essai gratuit, consultez [Tarification Amazon Redshift](https://aws.amazon.com/redshift/pricing).

## CREATE MODEL avec guide de l’utilisateur
<a name="r_user_guidance_create_model"></a>

Vous trouverez ci-dessous une description des options de CREATE MODEL en plus des options décrites dans [CREATE MODEL simple](#r_simple_create_model).

Par défaut, CREATE MODEL recherche la meilleure combinaison de prétraitement et le meilleur modèle pour votre jeu de données spécifique. Il se peut que vous ayez besoin d’un contrôle plus poussé ou d’introduire des connaissances de domaine supplémentaires (comme le type de problème ou l’objectif) pour votre modèle. Dans un scénario de désabonnement client, si le résultat « client n’est pas actif » est rare, l’objectif F1 est souvent préféré à l’objectif Précision. Étant donné que les modèles à haute précision peuvent prédire « le client est actif » tout le temps, il en résulte une haute précision, mais peu de valeur opérationnelle. Pour plus d'informations sur l'objectif F1, consultez [Auto MLJob Objective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) dans le *manuel Amazon SageMaker AI API Reference*.

Ensuite, le modèle CREATE suit vos suggestions sur les aspects spécifiés, tels que l’objectif. Dans le même temps, CREATE MODEL détecte automatiquement les meilleurs préprocesseurs et les meilleurs hyperparamètres. 

### CREATE MODEL avec syntaxe de guide de l’utilisateur
<a name="r_user_guidance-create-model-synposis"></a>

CREATE MODEL offre plus de flexibilité sur les aspects que vous pouvez spécifier et les aspects qu’Amazon Redshift détecte automatiquement.

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ]
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ]
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### CREATE MODEL avec paramètres de guide de l’utilisateur
<a name="r_user_guidance-create-model-parameters"></a>

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1*   
(Facultatif) Spécifie le type de modèle. Vous pouvez spécifier si vous souhaitez entraîner un modèle d'un type de modèle spécifique XGBoost, tel que le perceptron multicouche (MLP) ou le Linear Learner, qui sont tous des algorithmes pris en charge par Amazon SageMaker AI Autopilot. Si vous ne spécifiez pas le paramètre, tous les types de modèles pris en charge sont recherchés pendant l’entraînement pour trouver le meilleur modèle.

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(Facultatif) Spécifie le type de problème. Si vous connaissez le type de problème, vous pouvez limiter la recherche Amazon Redshift au meilleur modèle de ce type en particulier. Si vous ne spécifiez pas ce paramètre, un type de problème est détecté pendant l’entraînement, en fonction de vos données.

OBJECTIVE ( ’MSE’ \$1 ’Accuracy’ \$1 ’F1’ \$1 ’F1Macro’ \$1 ’AUC’)  
(Facultatif) Spécifie le nom de la métrique d’objectif utilisée pour mesurer la qualité prédictive d’un système de machine learning. Cette métrique est optimisée pendant l’entraînement afin de fournir la meilleure estimation des valeurs des paramètres du modèle à partir des données. Si vous ne spécifiez pas de métrique explicitement, le comportement par défaut consiste à utiliser automatiquement MSE : pour la régression, F1 : pour la classification binaire, Précision : pour la classification multiclasse. Pour plus d'informations sur les objectifs, consultez [Auto MLJob Objective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html) dans le *manuel Amazon SageMaker AI API Reference*.

MAX\$1CELLS integer   
(Facultatif) Spécifie le nombre de cellules dans les données d’entraînement. Cette valeur est le produit du nombre d’enregistrements (dans la requête d’entraînement ou dans la table) multiplié par le nombre de colonnes. La valeur par défaut est 1 000 000.

MAX\$1RUNTIME integer   
(Facultatif) Spécifie la durée maximale d’entraînement. Les tâches d’entraînement se terminent souvent plus tôt en fonction de la taille du jeu de données. Ce nombre spécifie la durée maximale de l’entraînement. La valeur par défaut est 5 400 (90 minutes).

S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1\$1SUR \$1 OFF\$1  
(Facultatif) Spécifie si Amazon Redshift lance le récupérateur de mémoire sur les jeux de données obtenus utilisés pour entraîner les modèles et sur les modèles. Si la valeur est définie sur OFF, les jeux de données obtenus utilisés pour entraîner les modèles et les modèles eux-mêmes restent dans Amazon S3 et peuvent être utilisés à d’autres fins. Si la valeur est définie sur ON, Amazon Redshift supprime les artefacts dans Amazon S3 une fois l’entraînement terminé. La valeur par défaut est ON.

KMS\$1KEY\$1ID ’kms\$1key\$1id’  
(Facultatif) Spécifie si Amazon Redshift utilise le chiffrement côté serveur avec une clé AWS KMS pour protéger les données au repos. Les données en transit sont protégées par le protocole SSL. 

 *PREPROCESSORS ’string’ *   
(Facultatif) Spécifie certaines combinaisons de préprocesseurs à certains ensembles de colonnes. Le format est une liste de columnSets et les transformations appropriées à appliquer à chaque ensemble de colonnes. Amazon Redshift applique tous les transformateurs d'une liste de transformateurs spécifique à toutes les colonnes de la liste correspondante. ColumnSet Par exemple, pour appliquer OneHotEncoder avec Imputer aux colonnes t1 et t2, utilisez l'exemple de commande suivant.  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
{"ColumnSet": [
    "t1",
    "t2"
  ],
  "Transformers": [
    "OneHotEncoder",
    "Imputer"
  ]
},
{"ColumnSet": [
    "t3"
  ],
  "Transformers": [
    "OneHotEncoder"
  ]
},
{"ColumnSet": [
    "temp"
  ],
  "Transformers": [
    "Imputer",
    "NumericPassthrough"
  ]
}
]'
SETTINGS (
S3_BUCKET 'amzn-s3-demo-bucket'
)
```

Amazon Redshift prend en charge les transformateurs suivants :
+ OneHotEncoder — Généralement utilisé pour coder une valeur discrète dans un vecteur binaire avec une valeur différente de zéro. Ce transformateur convient à de nombreux modèles de machine learning. 
+ OrdinalEncoder — Encode des valeurs discrètes en un seul entier. Ce transformateur convient à certains modèles de machine learning, tels que MLP et Linear Learner. 
+ NumericPassthrough — Transmet l'entrée telle quelle dans le modèle.
+ Imputer : remplit les valeurs manquantes et les valeurs qui ne sont pas un nombre (NaN).
+ ImputerWithIndicator — Complète les valeurs manquantes et les valeurs NaN. Ce transformateur crée également un indicateur indiquant si des valeurs étaient manquantes et ont été emplies.
+ Normalizer : normalise les valeurs, ce qui peut améliorer les performances de nombreux algorithmes de machine learning.
+ DateTimeVectorizer — Crée une intégration vectorielle, représentant une colonne de type de données date/heure pouvant être utilisée dans les modèles d'apprentissage automatique.
+ PCA : projette les données dans un espace dimensionnel inférieur afin de réduire le nombre de fonctions tout en conservant autant d’informations que possible.
+ StandardScaler — Normalise les caractéristiques en supprimant la moyenne et en les adaptant à l'unité de variance. 
+ MinMax — Transforme les entités en adaptant chaque entité à une plage donnée.

Amazon Redshift ML stocke les transformateurs entraînés et les applique automatiquement dans le cadre de la requête de prédiction. Vous n’avez pas besoin de les spécifier lorsque vous générez des prédictions à partir de votre modèle. 

## CRÉEZ des XGBoost modèles avec AUTO OFF
<a name="r_auto_off_create_model"></a>

En général, la commande AUTO OFF CREATE MODEL a des objectifs différents de ceux de la commande CREATE MODE par défaut.

Si vous êtes utilisateur avancé qui connaît déjà le type de modèle souhaité et les hyperparamètres à utiliser lors de l’entraînement de ces modèles, vous pouvez utiliser CREATE MODEL avec AUTO OFF pour désactiver la détection automatique CREATE MODEL des préprocesseurs et des hyperparamètres. Pour ce faire, vous devez spécifier explicitement le type de modèle. XGBoost est actuellement le seul type de modèle pris en charge lorsque AUTO est réglé sur OFF. Vous pouvez spécifier des hyperparamètres. Amazon Redshift utilise des valeurs par défaut pour tous les hyperparamètres que vous avez spécifiés. 

### CRÉEZ des XGBoost modèles avec la syntaxe AUTO OFF
<a name="r_auto_off-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | (select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE { 'reg:squarederror' | 'reg:squaredlogerror' | 'reg:logistic' |
            'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge' |
            'multi:softmax' | 'rank:pairwise' | 'rank:ndcg' }
HYPERPARAMETERS DEFAULT EXCEPT (
    NUM_ROUND '10',
    ETA '0.2',
    NUM_CLASS '10',
    (, ...)
)
PREPROCESSORS 'none'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### CRÉEZ des XGBoost modèles avec les paramètres AUTO OFF
<a name="r_auto_off-create-model-parameters"></a>

 *AUTO OFF*   
Désactive la détection automatique CREATE MODEL du préprocesseur, de l’algorithme et de la sélection d’hyperparamètres.

MODEL\$1TYPE XGBOOST  
Indiquer d’utiliser XGBOOST pour entraîner le modèle. 

OBJECTIVE str  
Spécifie un objectif reconnu par l’algorithme. Amazon Redshift prend en charge reg:squarederror, reg:squaredlogerror, reg:logistic, reg:pseudohubererror, reg:tweedie, binary:logistic, binary:hinge, multi:softmax. Pour plus d'informations sur ces objectifs, consultez la section [Paramètres des tâches d'apprentissage](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters) dans la XGBoost documentation.

HYPERPARAMETERS \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
Spécifie si les XGBoost paramètres par défaut sont utilisés ou remplacés par des valeurs spécifiées par l'utilisateur. Les valeurs doivent être entre guillemets simples. Vous trouverez ci-dessous des exemples de paramètres pour XGBoost et leurs valeurs par défaut.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_create_model_use_cases.html)

L'exemple suivant prépare les données pour XGBoost.

```
DROP TABLE IF EXISTS abalone_xgb;

CREATE TABLE abalone_xgb (
length_val float,
diameter float,
height float,
whole_weight float,
shucked_weight float,
viscera_weight float,
shell_weight float,
rings int,
record_number int);

COPY abalone_xgb
FROM 's3://redshift-downloads/redshift-ml/abalone_xg/'
REGION 'us-east-1'
IAM_ROLE default
IGNOREHEADER 1 CSV;
```

L'exemple suivant crée un XGBoost modèle avec des options avancées spécifiées, telles que MODEL\$1TYPE, OBJECTIVE et PREPROCESSORS.

```
DROP MODEL abalone_xgboost_multi_predict_age;

CREATE MODEL abalone_xgboost_multi_predict_age
FROM ( SELECT length_val,
              diameter,
              height,
              whole_weight,
              shucked_weight,
              viscera_weight,
              shell_weight,
              rings
   FROM abalone_xgb WHERE record_number < 2500 )
TARGET rings FUNCTION ml_fn_abalone_xgboost_multi_predict_age
IAM_ROLE default
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE 'multi:softmax'
PREPROCESSORS 'none'
HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30')
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

L’exemple suivant utilise une requête d’inférence pour prédire l’âge du poisson dont le nombre d’enregistrements est supérieur à 2 500. Il utilise la fonction ml\$1fn\$1abalone\$1xgboost\$1multi\$1predict\$1age créée à partir de la commande ci-dessus. 

```
select ml_fn_abalone_xgboost_multi_predict_age(length_val,
                                                   diameter,
                                                   height,
                                                   whole_weight,
                                                   shucked_weight,
                                                   viscera_weight,
                                                   shell_weight)+1.5 as age
from abalone_xgb where record_number > 2500;
```

## Modèle BYOM (Bring Your Own Model) : inférence locale
<a name="r_byom_create_model"></a>

Amazon Redshift ML prend en charge l’utilisation du modèle BYOM pour l’inférence locale.

Vous trouverez ci-dessous un résumé des options de syntaxe CREATE MODEL pour le modèle BYOM. Vous pouvez utiliser un modèle formé en dehors d'Amazon Redshift avec Amazon SageMaker AI pour effectuer des inférences dans la base de données localement dans Amazon Redshift.

### Syntaxe CREATE MODEL pour l'inférence locale
<a name="r_local-create-model"></a>

Voici une description de la syntaxe CREATE MODEL pour l’inférence locale.

```
CREATE MODEL model_name
FROM ('job_name' | 's3_path' )
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
IAM_ROLE { default }
[ SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', | --required
  KMS_KEY_ID 'kms_string') --optional
];
```

Amazon Redshift ne prend actuellement en charge que les modèles préentraînés XGBoost, MLP et Linear Learner pour le BYOM. Vous pouvez importer le pilote automatique SageMaker AI et les modèles directement entraînés dans Amazon SageMaker AI à des fins d'inférence locale en utilisant ce chemin. 

#### Paramètres CREATE MODEL pour l’inférence locale
<a name="r_local-create-model-parameters"></a>

 *model\$1name*   
Nom du modèle. Le nom du modèle d’un schéma doit être unique.

FROM (*’job\$1name’* \$1 *’s3\$1path’* )  
Le *job\$1name utilise un nom* de tâche Amazon SageMaker AI comme entrée. Le nom du poste peut être un nom de tâche de formation Amazon SageMaker AI ou un nom de tâche Amazon SageMaker AI Autopilot. La tâche doit être créée dans le compte AWS propriétaire du cluster Amazon Redshift. Pour trouver le nom du poste, lancez Amazon SageMaker AI. Dans le menu déroulant **Training** (Entraînement), choisissez **Training jobs** (Tâches d’entraînement).  
*’s3\$1path’* spécifie l’emplacement S3 du fichier d’artefacts de modèle .tar.gz à utiliser lors de la création du modèle.

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
Nom de la fonction à créer et types de données des arguments d’entrée. Vous pouvez spécifier un nom de schéma.

RETURNS *type\$1données*  
Type de données de la valeur renvoyée par la fonction.

IAM\$1ROLE \$1 default \$1 ’arn:aws:iam::<account-id>:role/<role-name>’\$1  
 Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini comme rôle par défaut et associé au cluster lorsque la commande CREATE MODEL s’exécute.  
Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. 

SETTINGS ( S3\$1BUCKET *’amzn-s3-demo-bucket’*, \$1 KMS\$1KEY\$1ID *’kms\$1string’*)  
La clause S3\$1BUCKET spécifie l’emplacement Amazon S3 utilisé pour stocker les résultats intermédiaires.  
(Facultatif) La clause KMS\$1KEY\$1ID indique si Amazon Redshift utilise le chiffrement côté serveur avec une clé pour protéger les données au repos. AWS KMS Les données en transit sont protégées par le protocole SSL.  
Pour plus d'informations, consultez [CREATE MODEL avec guide de l’utilisateur](#r_user_guidance_create_model).

#### Exemple CREATE MODEL pour l’inférence locale
<a name="r_local-create-model-example"></a>

L'exemple suivant crée un modèle qui a déjà été formé à Amazon SageMaker AI, en dehors d'Amazon Redshift. Étant donné que le type de modèle est pris en charge par le ML d’Amazon Redshift pour l’inférence locale, la commande CREATE MODEL suivante crée une fonction qui peut être utilisée localement dans Amazon Redshift. Vous pouvez fournir un nom de poste de formation à l' SageMaker IA.

```
CREATE MODEL customer_churn
FROM 'training-job-customer-churn-v4'
FUNCTION customer_churn_predict (varchar, int, float, float)
RETURNS int
IAM_ROLE default
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

Une fois le modèle créé, vous pouvez utiliser la fonction *customer\$1churn\$1predict* avec les types d’arguments spécifiés pour effectuer des prédictions.

## Modèle BYOM (Bring Your Own Model) : inférence distante
<a name="r_byom_create_model_remote"></a>

Amazon Redshift ML prend également en charge l’utilisation du modèle BYOM pour l’inférence distante.

Vous trouverez ci-dessous un résumé des options de syntaxe CREATE MODEL pour le modèle BYOM.

### Syntaxe CREATE MODEL pour l’inférence distante
<a name="r_remote-create-model"></a>

Voici une description de la syntaxe CREATE MODEL pour l’inférence distante.

```
CREATE MODEL model_name 
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
SAGEMAKER 'endpoint_name'[:'model_name']
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[SETTINGS (MAX_BATCH_ROWS integer)];
```

#### Paramètres CREATE MODEL pour l’inférence distante
<a name="r_remote-create-model-parameters"></a>

 *model\$1name*   
Nom du modèle. Le nom du modèle d’un schéma doit être unique.

FUNCTION *fn\$1name* ( [*data\$1type*] [, ...] )  
Nom de la fonction et types de données des arguments d’entrée. Consultez [Types de données](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html) pour connaître tous les types de données pris en charge. `Geography`, `geometry` et `hllsketch` ne sont pas pris en charge.   
Vous pouvez également fournir un nom de fonction dans un schéma en utilisant une notation en deux parties, telle que `myschema.myfunction`.

RETURNS *type\$1données*  
Type de données de la valeur renvoyée par la fonction. Consultez [Types de données](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html) pour connaître tous les types de données pris en charge. `Geography`, `geometry` et `hllsketch` ne sont pas pris en charge. 

SAGEMAKER *’endpoint\$1name’*[:*’model\$1name’*]   
Nom du point de terminaison Amazon SageMaker AI. Si le nom du point de terminaison pointe vers un point de terminaison multimodèle, ajoutez le nom du modèle à utiliser. Le point de terminaison doit être hébergé dans la même AWS région et Compte AWS que le cluster Amazon Redshift. Pour trouver votre point de terminaison, lancez Amazon SageMaker AI. Dans le menu déroulant **Inference** (Inférence), choisissez **Endpoints** (Points de terminaison).

IAM\$1ROLE \$1 default \$1 ’arn:aws:iam::<account-id>:role/<role-name>’\$1  
 Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini comme rôle par défaut et associé au cluster lorsque la commande CREATE MODEL s’exécute. Vous pouvez également spécifier l’ARN d’un rôle IAM pour utiliser ce rôle.

MAX\$1BATCH\$1ROWS *entier*  
Le nombre maximum de lignes qu'Amazon Redshift envoie dans une seule demande par lot pour un seul appel d' SageMaker IA. Uniquement prise en charge pour BYOM avec inférence à distance. Le nombre réel de lignes dans un lot dépend également de la taille d’entrée, mais il est inférieur ou égal à cette valeur. La valeur minimale pour ce paramètre est 1. La valeur maximale est `INT_MAX` ou 2 147 483 647. Ce paramètre n’est obligatoire que lorsque les types de données en entrée et en sortie sont de type `SUPER`. La valeur maximale est `INT_MAX` ou 2 147 483 647. 

Lorsque le modèle est déployé sur un SageMaker point de terminaison d' SageMaker IA, l'IA crée les informations du modèle dans Amazon Redshift. Il effectue ensuite une inférence à travers la fonction externe. Vous pouvez utiliser la commande SHOW MODEL pour afficher les informations de modèle sur votre cluster Amazon Redshift.

#### CREATE MODEL pour les notes d’utilisation d’inférence distante
<a name="r_remote-create-model-usage-notes"></a>

Avant d’utiliser CREATE MODLE pour l’inférence distante, tenez compte des éléments suivants :
+ Le point de terminaison doit être hébergé par le même AWS compte que celui qui possède le cluster Amazon Redshift.
+ Assurez-vous que le point de terminaison Amazon SageMaker AI dispose de suffisamment de ressources pour prendre en charge les appels d'inférence d'Amazon Redshift ou que le point de terminaison SageMaker Amazon AI peut être automatiquement redimensionné.
+ Si vous n'utilisez pas le type de `SUPER` données comme entrée, le modèle accepte uniquement les entrées au format de valeurs séparées par des virgules (CSV), ce qui correspond à un type de contenu `text/CSV` dans SageMaker AI.
+ Si vous n’utilisez pas le type de données `SUPER` en entrée, la sortie des modèles est une valeur unique du type spécifié lors de la création de la fonction. La sortie est au format de valeurs séparées par des virgules (CSV) via un type de `text/CSV` contenu AI. SageMaker `VARCHAR`les types de données ne peuvent pas être entre guillemets et ne peuvent pas contenir de nouvelles lignes, et chaque sortie doit figurer sur une nouvelle ligne.
+ Les modèles acceptent les valeurs NULL comme chaînes vides.
+ Lorsque les données d’entrée sont de type `SUPER`, un seul argument d’entrée est pris en charge. 
+ Lorsque les données d’entrée sont de type `SUPER`, le type de données renvoyé doit également être `SUPER`. 
+ MAX\$1BATCH\$1ROWS est requis lorsque les données en entrée et en sortie sont de type SUPER. 
+ Lorsque les données d’entrée sont de type `SUPER`, le type de contenu du point de terminaison est soit `application/json` lorsque MAX\$1BATCH\$1ROWS est `1`, soit `application/jsonlines` dans tous les autres cas. 
+ Lorsque les données de sortie sont de type `SUPER`, le type d’acceptation du point de terminaison est soit `application/json` lorsque MAX\$1BATCH\$1ROWS est `1`, soit `application/jsonlines` dans tous les autres cas. 

##### Exemple de CREATE MODEL pour l’inférence distante
<a name="r_remote-create-model-example"></a>

L'exemple suivant crée un modèle qui utilise un point de terminaison d' SageMaker IA pour effectuer des prédictions. Assurez-vous que le point de terminaison est en cours d’exécution pour effectuer des prédictions et spécifiez son nom dans la commande CREATE MODEL.

```
CREATE MODEL remote_customer_churn
FUNCTION remote_fn_customer_churn_predict (varchar, int, float, float)
RETURNS int
SAGEMAKER 'customer-churn-endpoint'
IAM_ROLE default;
```

 L'exemple suivant crée un BYOM avec inférence à distance avec un grand modèle de langage (LLM). LLMs hébergés sur Amazon SageMaker AI Jumpstart, ils acceptent et renvoient le type de `application/json` contenu et ne prennent en charge qu'un seul JSON par appel. Les données d’entrée et de sortie doivent être de type `SUPER` et MAX\$1BATCH\$1ROWS doit être défini sur 1. 

```
CREATE MODEL sample_super_data_model
FUNCTION sample_super_data_model_predict(super)
RETURNS super
SAGEMAKER 'sample_super_data_model_endpoint'
IAM_ROLE default
SETTINGS (MAX_BATCH_ROWS 1);
```

## CREATE MODEL avec K-MEANS
<a name="r_k-means_create_model"></a>

Amazon Redshift prend en charge l’algorithme K-Means qui regroupe des données non étiquetées. Cet algorithme résout les problèmes de mise en cluster lorsque vous souhaitez découvrir des regroupements dans les données. Les données non classifiées sont regroupées et partitionnées en fonction de leurs similitudes et de leurs différences. 

### CREATE MODEL avec la syntaxe K-MEANS
<a name="r_k-means-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
FUNCTION function_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS 'string'
HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional
  MAX_CELLS integer, |
    -- optional
  MAX_RUNTIME integer
    -- optional);
```

### CREATE MODEL avec les paramètres K-MEANS
<a name="r_k-means-create-model-parameters"></a>

 *AUTO OFF*   
Désactive la détection automatique CREATE MODEL du préprocesseur, de l’algorithme et de la sélection d’hyperparamètres.

MODEL\$1TYPE KMEANS  
Permet de spécifier l’utilisation de KMEANS pour entraîner le modèle. 

PREPROCESSORS ’string’  
Spécifie certaines combinaisons de préprocesseurs à certains ensembles de colonnes. Le format est une liste de columnSets et les transformations appropriées à appliquer à chaque ensemble de colonnes. Amazon Redshift prend en charge 3 préprocesseurs K-Means, à savoir StandardScaler, et. MinMax NumericPassthrough Si vous ne souhaitez appliquer aucun prétraitement pour K-Means, choisissez-le NumericPassthrough explicitement en tant que transformateur. Pour plus d’informations sur les transformateurs pris en charge, consultez [CREATE MODEL avec paramètres de guide de l’utilisateur](#r_user_guidance-create-model-parameters).  
L’algorithme K-Means utilise la distance euclidienne pour calculer la similarité. Le prétraitement des données garantit que les fonctions du modèle restent à la même échelle et produisent des résultats fiables.

HYPERPARAMETERS DEFAULT EXCEPT ( K ’val’ [, ...] )  
Spécifie si les paramètres K-Means sont utilisés. Vous devez spécifier le paramètre `K` lors de l’utilisation de l’algorithme K-Means. Pour plus d'informations, consultez [K-Means Hyperparameters](https://docs.aws.amazon.com/sagemaker/latest/dg/k-means-api-config.html) dans le manuel *Amazon SageMaker AI* Developer Guide

L’exemple suivant prépare des données pour K-Means.

```
CREATE MODEL customers_clusters
FROM customers
FUNCTION customers_cluster
IAM_ROLE default
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS '[
{
  "ColumnSet": [ "*" ],
  "Transformers": [ "NumericPassthrough" ]
}
]'
HYPERPARAMETERS DEFAULT EXCEPT ( K '5' )
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');

select customer_id, customers_cluster(...) from customers;
customer_id | customers_cluster
--------------------
12345            1
12346            2
12347            4
12348
```

## CREATE MODEL avec Forecast
<a name="r_forecast_model"></a>

Les modèles de prévisions de Redshift ML utilisent Amazon Forecast pour créer des prévisions chronologiques précises. Cela vous permet d’utiliser des données historiques sur une période donnée pour faire des prédictions sur des événements futurs. Les cas d’utilisation courants d’Amazon Forecast incluent l’utilisation des données sur les produits vendus au détail pour déterminer le prix des stocks, les données de quantité de fabrication pour prédire la quantité à commander d’un article et les données de trafic Web pour prévoir le volume de trafic qu’un serveur Web est susceptible de recevoir. 

 Les [limites de quota d’Amazon Forecast](https://docs.aws.amazon.com/forecast/latest/dg/limits.html) sont appliquées dans les modèles de prévisions Amazon Redshift. Par exemple, le nombre maximum de prévisions est de 100, mais il est ajustable. La suppression d’un modèle de prévision ne supprime pas automatiquement les ressources associées dans Amazon Forecast. Si vous supprimez un cluster Redshift, tous les modèles associés sont également supprimés. 

Notez que les modèles de prévisions ne sont actuellement disponibles que dans les régions suivantes :
+ USA Est (Ohio) (us-east-2)
+ USA Est (Virginie du Nord) (us-east-1)
+ USA Ouest (Oregon) (us-west-2)
+ Asie-Pacifique (Mumbai) (ap-south-1)
+ Asie-Pacifique (Séoul) (ap-northeast-2)
+ Asie-Pacifique (Singapour) (ap-southeast-1)
+ Asie-Pacifique (Sydney) (ap-southeast-2)
+ Asie-Pacifique (Tokyo) (ap-northeast-1)
+ Europe (Francfort) (eu-central-1)
+ Europe (Irlande) (eu-west-1)

### CREATE MODEL avec une syntaxe Forecast
<a name="r_forecast_model-synopsis"></a>

```
CREATE [ OR REPLACE ] MODEL forecast_model_name 
FROM { table_name | ( select_query ) } 
TARGET column_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'} 
AUTO ON
MODEL_TYPE FORECAST
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  HORIZON integer,
  FREQUENCY forecast_frequency
  [PERCENTILES '0.1', '0.5', '0.9']
  )
```

### CREATE MODEL avec des paramètres Forecast
<a name="r_forecast_model-parameters"></a>

 *forecast\$1model\$1name*   
Nom du modèle. Le nom du modèle doit être unique.

FROM \$1 table\$1name \$1 ( select\$1query ) \$1  
Le table\$1name ou la requête qui spécifie les données d’entraînement. Il peut s’agir d’une table existante dans le système ou d’une requête SELECT compatible avec Amazon RedShift, placée entre parenthèses. Le résultat de la table ou de la requête doit comporter au moins trois colonnes : (1) une colonne varchar qui indique le nom de la série chronologique. Chaque jeu de données peut comporter plusieurs séries chronologiques ; (2) une colonne date/heure ; et (3) la colonne cible pour les prévisions. Cette colonne cible doit être un nombre entier ou à virgule flottante. Si vous fournissez un jeu de données comportant plus de trois colonnes, Amazon Redshift part du principe que toutes les colonnes supplémentaires font partie d’une série chronologique associée. Notez que les séries chronologiques associées doivent être de type nombre entier ou à virgule flottante. Pour plus d’informations sur les séries chronologiques associées, consultez [Utilisation de jeux de données de séries chronologiques associés](https://docs.aws.amazon.com/forecast/latest/dg/related-time-series-datasets.html).

TARGET column\$1name  
Nom de la colonne qui devient la cible de la prédiction. La colonne doit exister dans la clause FROM.

IAM\$1ROLE \$1 default \$1 ’arn:aws:iam::<account-id>:role/<role-name>’ \$1  
Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini comme rôle par défaut et associé au cluster lorsque la commande CREATE MODEL s’exécute. Vous pouvez également spécifier l’ARN d’un rôle IAM pour utiliser ce rôle. 

AUTO ON  
Active la détection automatique CREATE MODEL de l’algorithme et de la sélection d’hyperparamètres. Si vous spécifiez « on » lors de la création d'un modèle de prévision AutoPredictor, vous devez utiliser un modèle Forecast, dans lequel Amazon Forecast applique les combinaisons optimales d'algorithmes à chaque série chronologique de votre ensemble de données.

MODEL\$1TYPE FORECAST  
Permet de spécifier l’utilisation de FORECAST pour entraîner le modèle.

S3\$1BUCKET ’amzn-s3-demo-bucket’  
Nom du compartiment Amazon Simple Storage Service que vous avez créé précédemment et qui est utilisé pour partager des données d’entraînement et des artefacts entre Amazon Redshift et Amazon Forecast. Amazon Redshift crée un sous-dossier dans ce compartiment avant de décharger les données d’entraînement. Lorsque l’entraînement est terminé, Amazon Redshift supprime le sous-dossier créé et son contenu.

Entier HORIZON  
Le nombre maximum de prédictions que le modèle de prévision peut renvoyer. Une fois le modèle entraîné, vous ne pouvez pas modifier cet entier.

FREQUENCY forecast\$1frequency  
Indique le degré de granularité que vous souhaitez pour les prévisions. Les options disponibles sont `Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min`. Obligatoire si vous entraînez un modèle de prévision.

Chaîne PERCENTILES  
Une chaîne délimitée par des virgules qui spécifie les types de prévisions utilisés pour entraîner un prédicteur. Les types de prévisions peuvent être des quantiles compris entre 0,01 et 0,99, par incréments de 0,01 ou plus. Vous pouvez également spécifier la prévision moyenne à l’aide de la moyenne. Vous pouvez spécifier un maximum de cinq types de prévisions.

L’exemple suivant montre comment créer un modèle de prévision simple.

```
CREATE MODEL forecast_example
FROM forecast_electricity_
TARGET target 
IAM_ROLE 'arn:aws:iam::<account-id>:role/<role-name>'
AUTO ON 
MODEL_TYPE FORECAST
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket',
          HORIZON 24,
          FREQUENCY 'H',
          PERCENTILES '0.25,0.50,0.75,mean',
          S3_GARBAGE_COLLECT OFF);
```

Après avoir créé le modèle de prévision, vous pouvez créer une nouvelle table contenant les données de prédiction.

```
CREATE TABLE forecast_model_results as SELECT Forecast(forecast_example)
```

Vous pouvez ensuite interroger la nouvelle table pour obtenir des prédictions.

```
SELECT * FROM forecast_model_results
```

# CREATE PROCEDURE
<a name="r_CREATE_PROCEDURE"></a>

Crée une nouvelle procédure stockée ou remplace une procédure existante pour la base de données actuelle.

Pour plus d’informations et d’exemples, consultez [Création de procédures stockées dans Amazon Redshift](stored-procedure-overview.md).

## Privilèges requis
<a name="r_CREATE_PROCEDURE-privileges"></a>

Vous devez être autorisé par l’une des méthodes suivantes pour exécuter CREATE OR REPLACE PROCEDURE :
+ Pour CREATE PROCEDURE :
  + Superuser
  + Utilisateurs disposant des privilèges CREATE et USAGE sur le schéma dans lequel la procédure stockée est créée
+ Pour REPLACE PROCEDURE :
  + Superuser
  + Propriétaire de la procédure

## Syntaxe
<a name="r_CREATE_PROCEDURE-synopsis"></a>

```
CREATE [ OR REPLACE ] PROCEDURE sp_procedure_name  
  ( [ [ argname ] [ argmode ] argtype [, ...] ] )
[ NONATOMIC ]
AS $$
  procedure_body
$$ LANGUAGE plpgsql
[ { SECURITY INVOKER | SECURITY DEFINER } ]
[ SET configuration_parameter { TO value | = value } ]
```

## Parameters
<a name="r_CREATE_PROCEDURE-parameters"></a>

 OR REPLACE   
Clause qui spécifie que si une procédure ayant le même nom et les mêmes types de données, ou signature, existe déjà, la procédure existante est remplacée. Vous pouvez uniquement remplacer une procédure par une nouvelle procédure qui définit un ensemble identique de types de données.   
Si vous définissez une procédure avec le même nom qu’une procédure existante, mais une signature différente, vous créez une nouvelle procédure. Autrement dit, le nom de la procédure est surchargé. Pour plus d'informations, consultez [Surcharge des noms de procédure](stored-procedure-naming.md#stored-procedure-overloading-name). 

 *sp\$1procedure\$1name*   
Nom de la procédure. Si vous spécifiez un nom de schéma (tel que **myschema.myprocedure**), la procédure est créée à dans le schéma spécifié. Sinon, la procédure est créée dans le schéma en cours. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).   
Nous vous conseillons d’utiliser le préfixe `sp_` pour tous les noms des procédures stockées. Amazon Redshift réserve le préfixe `sp_` pour les noms de procédures stockées. Utiliser le préfixe `sp_` vous permet de garantir que le nom de votre procédure stockée n’est en conflit avec aucun nom de fonction ou de procédure stockée intégré à Amazon Redshift existant ou futur. Pour plus d'informations, consultez [Dénomination des procédures stockées](stored-procedure-naming.md).  
Vous pouvez définir plusieurs procédures portant le même nom si les types de données des arguments en entrée, ou signature, sont différents. Autrement dit, dans ce cas, le nom de la procédure est surchargé. Pour plus d'informations, consultez [Surcharge des noms de procédure](stored-procedure-naming.md#stored-procedure-overloading-name)

*[argname] [ argmode] argtype*   
Liste de noms d’arguments, de modes d’argument et de types de données. Seul le type de données est requis. Le nom et le mode sont facultatifs, et leur position peut être inversée.  
Le mode de l’argument peut être IN, OUT ou INOUT. La valeur par défaut est IN.  
Vous pouvez utiliser des arguments OUT et INOUT pour renvoyer une ou plusieurs valeurs à partir d’un appel de procédure. S’il existe des arguments OUT ou INOUT, l’appel de procédure renvoie une ligne de résultats contenant *n* colonnes, où *n* est le nombre total d’arguments OUT ou INOUT.  
Les arguments INOUT sont des arguments à la fois en entrée et en sortie. Les *arguments en entrée* comprennent les arguments IN et INOUT, et les *arguments en sortie* comprennent les arguments OUT et INOUT.  
Les arguments OUT ne sont pas spécifiés dans le cadre de l’instruction CALL. Spécifiez les arguments INOUT dans l’instruction CALL de la procédure stockée. Les arguments INOUT peuvent s’avérer utiles lorsque vous transmettez ou renvoyez des valeurs à partir d’appels imbriqués, ainsi que lors du renvoi d’un type `refcursor`. Pour plus d’informations sur les types `refcursor`, consultez [Curseurs](c_PLpgSQL-statements.md#r_PLpgSQL-cursors).  
Les types de données d’arguments peuvent être de n’importe quel type de données Amazon Redshift standard. En outre, `refcursor` peut être un type de données d’argument.  
Vous pouvez spécifier un maximum de 32 arguments en entrée et de 32 arguments en sortie. 

AS \$1\$1 *procedure\$1body* \$1\$1   
Construction qui englobe la procédure à exécuter. Les mots-clés littéraux AS \$1\$1 et \$1\$1 sont obligatoires.  
Amazon Redshift requiert que vous placiez l’instruction dans votre procédure à l’aide d’un format appelé guillemets dollar. Tout ce qui se trouve dans l’encadrement est passé exactement comme tel. Vous n’avez pas besoin de définir de séquence d’échappement pour les caractères spéciaux, car les contenus de la chaîne sont écrits littéralement.  
Avec les *guillemets dollar*, vous utilisez une paire de symboles dollar (\$1\$1) pour marquer le début et la fin de l’instruction à exécuter, comme illustré dans l’exemple suivant.  

```
$$ my statement $$
```
Le cas échéant, entre les symboles dollar de chaque paire, vous pouvez spécifier une chaîne pour aider à identifier l’instruction. La chaîne que vous utilisez doit être la même au début et à la fin des paires d’encadrement. Cette chaîne est sensible à la casse et suit les mêmes contraintes qu’un identificateur sans guillemets, sauf que celui-ci ne peut pas contenir de symboles dollar. L’exemple suivant utilise la chaîne test.  

```
$test$ my statement $test$
```
Cette syntaxe est également utile les guillemets dollar imbriqués. Pour plus d’informations sur les guillemets dollar, consultez relative aux constantes de chaîne avec guillemet dollar dans [Lexical Structure](https://www.postgresql.org/docs/9.0/sql-syntax-lexical.html) dans la documentation PostgreSQL.

 *procedure\$1body*   
Un ensemble de PL/pgSQL déclarations valides. PL/pgSQL les instructions ajoutent aux commandes SQL des structures procédurales, notamment des expressions conditionnelles et des boucles, afin de contrôler le flux logique. La plupart des commandes SQL peuvent être utilisées dans le corps de la procédure, y compris celles du langage de modification de données (DML) telles que COPY, UNLOAD et INSERT, et celles du langage de définition de données (DDL) telles que CREATE TABLE. Pour plus d'informations, consultez [Guide de référence du langage PL/pgSQL](c_pl_pgSQL_reference.md). 

LANGUAGE *plpgsql*  
Valeur pour le langage. Spécifiez `plpgsql`. Vous devez avoir l’autorisation pour USAGE ON LANGUAGE pour utiliser `plpgsql`. Pour plus d’informations, consultez [GRANT](r_GRANT.md). 

NONATOMIC  
Crée la procédure stockée dans un mode de transaction non atomique. Le mode NONATOMIC valide automatiquement les déclarations à l’intérieur de la procédure. En outre, lorsqu’une erreur se produit à l’intérieur de la procédure NONATOMIC, l’erreur n’est pas relancée si elle est gérée par un bloc d’exception. Pour plus d’informations, consultez [Gestion des transactions](stored-procedure-transaction-management.md) et [RAISE](c_PLpgSQL-statements.md#r_PLpgSQL-messages-errors).  
Lorsque vous définissez une procédure stockée comme `NONATOMIC`, tenez compte des éléments suivants :  
+ Lorsque vous imbriquez des appels de procédures stockées, toutes les procédures doivent être créées dans le même mode de transaction.
+ L’option `SECURITY DEFINER` et l’option `SET configuration_parameter` ne sont pas prises en charge lors de la création d’une procédure en mode NONATOMIC.
+ Tout curseur ouvert (explicitement ou implicitement) est fermé automatiquement lorsqu’une validation implicite est effectuée. Par conséquent, vous devez ouvrir une transaction explicite avant de commencer une boucle de curseur pour vous assurer que tout code SQL dans l’itération de la boucle n’est pas implicitement validé.

SECURITY INVOKER \$1 SECURITY DEFINER  
L’option `SECURITY DEFINER` n’est pas prise en charge lorsque `NONATOMIC` est spécifié.  
Le mode de sécurité pour la procédure détermine les privilèges d’accès de la procédure lors de l’exécution. La procédure doit être autorisée à accéder aux objets de la base de données sous-jacente.   
Pour le mode SECURITY INVOKER, la procédure utilise les privilèges de l’utilisateur appelant la procédure. L’utilisateur doit disposer d’autorisations explicites sur les objets de la base de données sous-jacente. La valeur par défaut est SECURITY INVOKER.  
Pour le mode SECURITY DEFINER, la procédure utilise les privilèges du propriétaire de la procédure. Le propriétaire de la procédure est défini comme l’utilisateur propriétaire de la procédure au moment de l’exécution, pas nécessairement l’utilisateur qui a initialement défini la procédure. L’utilisateur qui appelle la procédure doit détenir un privilège EXECUTE sur la procédure, mais il n’a pas besoin de privilèges sur les objets sous-jacents. 

SET configuration\$1parameter \$1 TO value \$1 = value \$1  
Ces options ne sont pas prises en charge lorsque `NONATOMIC` est spécifié.  
La clause SET entraîne la définition du `configuration_parameter` spécifié sur la valeur spécifiée au lancement de la procédure. Cette clause restaure ensuite `configuration_parameter` à sa valeur précédente à la fin de la procédure. 

## Notes d’utilisation
<a name="r_CREATE_PROCEDURE-usage"></a>

Si une procédure stockée a été créée à l’aide de l’option SECURITY DEFINER, lors de l’appel de la fonction CURRENT\$1USER depuis la procédure stockée, Amazon Redshift renvoie le nom d’utilisateur du propriétaire de la procédure stockée.

## Exemples
<a name="r_CREATE_PROCEDURE-examples"></a>

**Note**  
Si vous rencontrez une erreur similaire à ce qui suit lors de l’exécution de ces exemples :  

```
ERROR: 42601: [Amazon](500310) unterminated dollar-quoted string at or near "$$
```
Consultez [Présentation des procédures stockées dans Amazon Redshift](stored-procedure-create.md). 

L’exemple suivant crée une procédure avec deux paramètres d’entrée.

```
CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar(20))
AS $$
DECLARE
  min_val int;
BEGIN
  DROP TABLE IF EXISTS tmp_tbl;
  CREATE TEMP TABLE tmp_tbl(id int);
  INSERT INTO tmp_tbl values (f1),(10001),(10002);
  SELECT min_val MIN(id) FROM tmp_tbl;
  RAISE INFO 'min_val = %, f2 = %', min_val, f2;
END;
$$ LANGUAGE plpgsql;
```

**Note**  
 Lorsque vous écrivez des procédures stockées, nous vous recommandons une bonne pratique pour sécuriser les valeurs sensibles :   
 Ne codez pas en dur des informations sensibles dans la logique des procédures stockées. Par exemple, n’attribuez pas de mot de passe utilisateur dans une instruction CREATE USER dans le corps d’une procédure stockée. Cela présente un risque de sécurité, car les valeurs codées en dur peuvent être enregistrées sous forme de métadonnées de schéma dans les tables du catalogue. Transmettez plutôt des valeurs sensibles, telles que des mots de passe, en tant qu’arguments à la procédure stockée, au moyen de paramètres.   
Pour plus d’informations sur les procédures stockées, consultez [PROCÉDURE DE CRÉATION](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_PROCEDURE.html) et [Création de procédures stockées dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-overview.html). Pour plus d’informations sur les tables catalogue, consultez [Tables de catalogue système](https://docs.aws.amazon.com/redshift/latest/dg/c_intro_catalog_views.html).

L’exemple suivant crée une procédure avec un paramètre IN, un paramètre OUT et un paramètre INOUT.

```
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256))
AS $$
DECLARE
  loop_var int;
BEGIN
  IF f1 is null OR f2 is null THEN
    RAISE EXCEPTION 'input cannot be null';
  END IF;
  DROP TABLE if exists my_etl;
  CREATE TEMP TABLE my_etl(a int, b varchar);
    FOR loop_var IN 1..f1 LOOP
        insert into my_etl values (loop_var, f2);
        f2 := f2 || '+' || f2;
    END LOOP;
  SELECT INTO out_var count(*) from my_etl;
END;
$$ LANGUAGE plpgsql;
```

L’exemple suivant crée une procédure utilisant le paramètre `SECURITY DEFINER`. Cette procédure s’exécute en utilisant les privilèges de l’utilisateur propriétaire de la procédure.

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_definer()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
```

L’exemple suivant crée une procédure utilisant le paramètre `SECURITY INVOKER`. Cette procédure s’effectue avec les privilèges de l’utilisateur qui l’exécute.

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_invoker()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY INVOKER;
```

# CREATE RLS POLICY
<a name="r_CREATE_RLS_POLICY"></a>

Crée une nouvelle politique de sécurité au niveau des lignes pour fournir un accès précis aux objets de base de données.

Les super-utilisateurs, les utilisateurs ou les utilisateurs disposant du rôle sys:secadmin peuvent créer une stratégie.

## Syntaxe
<a name="r_CREATE_RLS_POLICY-synopsis"></a>

```
CREATE RLS POLICY { policy_name | database_name.policy_name }
[ WITH (column_name data_type [, ...]) [ [AS] relation_alias ] ]
USING ( using_predicate_exp )
```

## Parameters
<a name="r_CREATE_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nom de la politique .

database\$1name  
Nom de la base de données dans laquelle la politique sera créée. La politique peut être créée sur la base de données connectée ou sur une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

WITH (*column\$1name data\$1type [, ...]*)   
Spécifie *column\$1name* et *data\$1type* référencés aux colonnes des tables auxquelles la politique est attachée.   
Vous pouvez omettre la clause WITH uniquement lorsque la politique RLS ne fait référence à aucune colonne des tables à laquelle la politique est attachée.

AS *relation\$1alias*  
Spécifie un alias facultatif pour la table à laquelle la politique RLS sera attachée.

USING (* using\$1predicate\$1exp *)  
Spécifie un filtre qui est appliqué à la clause WHERE de la requête. Amazon Redshift applique un prédicat de politique avant les prédicats utilisateur au niveau de la requête. Par exemple, **current\$1user = ‘joe’ and price > 10** permet à Joe de ne voir que les enregistrements dont le prix est supérieur à 10 \$1.

Pour l'utilisation de CREATE RLS POLICY sur le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Notes d’utilisation
<a name="r_CREATE_RLS_POLICY-usage"></a>

Lorsque vous utilisez l’instruction CREATE RLS POLICY, tenez compte des points suivants :
+ Amazon Redshift prend en charge les filtres qui peuvent faire partie de la clause WHERE d’une requête.
+ Toutes les politiques attachées à une table doivent avoir été créées avec le même alias de table.
+ Vous devez utiliser les instructions GRANT et REVOKE pour accorder et révoquer explicitement les autorisations SELECT aux politiques RLS qui font référence à des tables de recherche. Une table de recherche est un objet de table utilisé dans une définition de stratégie. Pour plus d’informations, consultez [GRANT](r_GRANT.md) et [REVOKE](r_REVOKE.md). 
+ La sécurité au niveau des lignes d’Amazon Redshift ne prend pas en charge les types d’objets suivant dans une définition de politique : les tables de catalogue, les relations entre bases de données, les tables externes, les vues régulières, les vues à liaison tardive, les tables avec des politiques RLS activées et les tables temporaires.

## Exemples
<a name="r_CREATE_RLS_POLICY-examples"></a>

L’exemple suivant crée une politique RLS appelée policy\$1concerts. Cette politique s’applique à une colonne VARCHAR(10) appelée catgroup et définit le filtre USING pour qu’il renvoie uniquement les lignes dont la valeur catgroup est `'Concerts'`.

```
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'Concerts');
```

Pour un end-to-end exemple d'utilisation des politiques RLS, voir[Exemple de sécurité au niveau des lignes end-to-end](t_rls-example.md).

# CREATE ROLE
<a name="r_CREATE_ROLE"></a>

Crée un nouveau rôle personnalisé qui est un ensemble d’autorisations. Pour obtenir une liste des rôles définis par le système Amazon Redshift, consultez [Rôles définis par le système Amazon Redshift](r_roles-default.md). Interrogez [SVV\$1ROLES](r_SVV_ROLES.md) pour afficher les rôles actuellement créés dans votre cluster ou groupe de travail.

Il existe un quota quant au nombre de rôles pouvant être créés. Pour plus d’informations, consultez [Quotas et limites dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dans le *Guide de gestion Amazon Redshift*.

## Autorisations requises
<a name="r_CREATE_ROLE-privileges"></a>

Les privilèges suivants sont requis pour CREATE ROLE.
+ Superuser
+ Utilisateurs disposant du privilège CREATE ROLE

## Syntaxe
<a name="r_CREATE_ROLE-synopsis"></a>

```
CREATE ROLE role_name
[ EXTERNALID external_id ]
```

## Parameters
<a name="r_CREATE_ROLE-parameters"></a>

*role\$1name*  
Nom du rôle. Le nom du rôle doit être unique et ne peut être identique à aucun nom d’utilisateur. Un nom de rôle ne peut pas être un mot réservé.  
Un super-utilisateur ou un utilisateur standard disposant du privilège CREATE ROLE peut créer des rôles. Un utilisateur qui n’est pas un super-utilisateur, mais qui s’est vu accorder les privilèges USAGE pour WITH GRANT OPTION et ALTER peut accorder ce rôle à n’importe qui.

EXTERNALID *external\$1id*  
Identificateur du rôle associé à un fournisseur d’identité. Pour plus d’informations, consultez [Fédération de fournisseur d’identité natif pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

## Exemples
<a name="r_CREATE_ROLE-examples"></a>

L’exemple suivant crée un rôle `sample_role1`.

```
CREATE ROLE sample_role1;
```

L’exemple suivant crée un rôle `sample_role1`, avec un ID externe associé à un fournisseur d’identité.

```
CREATE ROLE sample_role1 EXTERNALID "ABC123";
```

# CREATE SCHEMA
<a name="r_CREATE_SCHEMA"></a>

Définit un nouveau schéma pour la base de données actuelle.

## Privilèges requis
<a name="r_CREATE_SCHEMA-privileges"></a>

Les privilèges suivants sont requis pour CREATE SCHEMA :
+ Superuser
+ Utilisateurs disposant du privilège CREATE SCHEMA

## Syntaxe
<a name="r_CREATE_SCHEMA-synopsis"></a>

```
CREATE SCHEMA [ IF NOT EXISTS ] schema_name [ AUTHORIZATION username ]
           [ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ]

CREATE SCHEMA AUTHORIZATION username[ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] ]
```

## Parameters
<a name="r_CREATE_SCHEMA-parameters"></a>

 IF NOT EXISTS   
Clause indiquant que si le schéma spécifié existe déjà, la commande ne doit faire aucune modification et renvoyer un message selon lequel le schéma existe, plutôt que de mettre fin avec une erreur.  
Comme cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si CREATE SCHEMA tente de créer un schéma qui existe déjà.

 *nom\$1schéma*   
Nom du nouveau schéma. Le nom du schéma ne peut pas être `PUBLIC`. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).  
La liste des schémas du paramètre de configuration [search\$1path](r_search_path.md) détermine la priorité des objets portant le même nom quand il y est fait référence sans noms de schéma.

AUTHORIZATION   
Clause qui accorde la propriété à un utilisateur spécifié.

 *nom d’utilisateur*   
Nom du propriétaire du schéma.

 *élément\$1schéma*   
Définition d’un ou de plusieurs objets à créer dans le schéma.

QUOTA  
Quantité maximale d’espace disque que le schéma spécifié peut utiliser. Cet espace est l’utilisation collective du disque. Il inclut toutes les tables permanentes, les vues matérialisées sous le schéma spécifié et les copies dupliquées de toutes les tables avec la distribution ALL sur chaque nœud de calcul. Le quota de schéma ne prend pas en compte les tables temporaires créées dans le cadre d’un espace de noms ou d’un schéma temporaire.   
Pour afficher les quotas de schéma configurés, consultez [SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md).  
Pour afficher les enregistrements où les quotas de schéma ont été dépassés, consultez [STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md).  
Amazon Redshift convertit la valeur sélectionnée en mégaoctets. Le gigaoctet est l’unité de mesure par défaut lorsque vous ne spécifiez pas de valeur.  
Vous devez être un superutilisateur de base de données pour définir et modifier un quota de schéma. Un utilisateur qui n’est pas un superutilisateur mais qui dispose de l’autorisation CREATE SCHEMA peut créer un schéma avec un quota défini. Lorsque vous créez un schéma sans définir de quota, le schéma dispose d’un quota illimité. Lorsque vous définissez le quota en dessous de la valeur actuelle utilisée par le schéma, Amazon Redshift ne permet pas d’ingestion supplémentaire tant que vous n’avez pas libéré d’espace disque. Une instruction DELETE supprime les données d’une table et l’espace disque n’est libéré que lorsque VACUUM s’exécute.   
Amazon Redshift vérifie la présence de violations de quotas dans chaque transaction avant de valider la transaction. Amazon Redshift compare la taille (l’espace disque utilisé par toutes les tables d’un schéma) de chaque schéma modifié au quota défini. Étant donné que la vérification des violations de quota se produit à la fin d’une transaction, la limite de taille peut dépasser temporairement le quota dans une transaction avant qu’il ne soit validé. Lorsqu’une transaction dépasse le quota, Amazon Redshift abandonne la transaction, interdit les ingestions ultérieures et rétablit toutes les modifications jusqu’à ce que vous libériez de l’espace disque. En raison de VACUUM en arrière-plan et du nettoyage interne, il est possible qu’un schéma ne soit pas plein au moment où vous vérifiez le schéma après une transaction annulée.   
Dans certains cas exceptionnels, Amazon Redshift ne tient pas compte des violations de quotas et valide les transactions. Amazon Redshift le fait pour les transactions qui consistent uniquement en une ou plusieurs des instructions suivantes lorsqu’il n’y a pas d’instruction d’ingestion INSERT ou COPY dans la même transaction :  
+ DELETE
+ TRUNCATE
+ VACUUM
+ DROP TABLE
+ ALTER TABLE APPEND uniquement lors du déplacement de données du schéma complet vers un autre schéma non complet

 *UNLIMITED*   
Amazon Redshift n’impose aucune limite à la croissance de la taille totale du schéma.

## Restrictions
<a name="r_CREATE_SCHEMA-limit"></a>

Amazon Redshift applique les limites suivantes pour les schémas.
+ Il y a un maximum de 9900 schémas par base de données.

## Exemples
<a name="r_CREATE_SCHEMA-examples"></a>

L’exemple suivant crée un schéma nommé US\$1SALES et accorde la propriété à l’utilisateur DWUSER.

```
create schema us_sales authorization dwuser;
```

L’exemple suivant crée un schéma nommé US\$1SALES, donne la propriété à l’utilisateur DWUSER et définit le quota sur 50 Go.

```
create schema us_sales authorization dwuser QUOTA 50 GB;
```

Pour consulter le nouveau schéma, interrogez la table de catalogue PG\$1NAMESPACE comme illustré ci-après :

```
select nspname as schema, usename as owner
from pg_namespace, pg_user
where pg_namespace.nspowner = pg_user.usesysid
and pg_user.usename ='dwuser';

   schema |  owner
----------+----------
 us_sales | dwuser
(1 row)
```

L’exemple suivant crée le schéma US\$1SALES, ou ne fait rien et renvoie un message si le schéma existe déjà :

```
create schema if not exists us_sales;
```

# CREATE TABLE
<a name="r_CREATE_TABLE_NEW"></a>

Crée une nouvelle table dans la base de données actuelle. Vous définissez une liste de colonnes qui contiennent chacune des données d’un type distinct. Le propriétaire de la table est l’émetteur de la commande CREATE TABLE.

## Privilèges requis
<a name="r_CREATE_TABLE-privileges"></a>

Les privilèges suivants sont requis pour CREATE TABLE :
+ Superuser
+ Utilisateurs disposant du privilège CREATE TABLE

## Syntaxe
<a name="r_CREATE_TABLE_NEW-synopsis"></a>

```
CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE
[ IF NOT EXISTS ] table_name
( { column_name data_type [column_attributes] [ column_constraints ]
  | table_constraints
  | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] }
  [, ... ]  )
[ BACKUP { YES | NO } ]
[table_attributes]

where column_attributes are:
  [ DEFAULT default_expr ]
  [ IDENTITY ( seed, step ) ]
  [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ]
  [ ENCODE encoding ]
  [ DISTKEY ]
  [ SORTKEY ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]

and column_constraints are:
  [ { NOT NULL | NULL } ]
  [ { UNIQUE  |  PRIMARY KEY } ]
  [ REFERENCES reftable [ ( refcolumn ) ] ]

and table_constraints  are:
  [ UNIQUE ( column_name [, ... ] ) ]
  [ PRIMARY KEY ( column_name [, ... ] )  ]
  [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]


and table_attributes are:
  [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ]
  [ DISTKEY ( column_name ) ]
  [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) |  [ SORTKEY AUTO ] ]
  [ ENCODE AUTO ]
```

## Parameters
<a name="r_CREATE_TABLE_NEW-parameters"></a>

LOCAL   
Facultatif. Même si ce mot-clé est accepté dans l’instruction, il n’a aucun effet dans Amazon Redshift.

TEMPORARY \$1 TEMP   
Mot-clé qui crée une table temporaire visible uniquement dans la séance en cours. La table temporaire est automatiquement supprimée à la fin de la séance dans laquelle elle a été créée. La table temporaire peut avoir le même nom qu’une table permanente. La table temporaire est créée dans un schéma distinct, propre à la séance. (Vous ne pouvez pas spécifier un nom pour ce schéma.) Comme ce schéma temporaire devient le premier schéma du chemin de recherche, la table temporaire a priorité sur la table permanente, sauf si vous qualifiez le nom de la table avec le nom du schéma pour accéder à la table permanente. Pour plus d’informations sur les schémas et les priorités, consultez [search\$1path](r_search_path.md).  
Par défaut, les utilisateurs de la base de données ont l’autorisation de créer des tables temporaires par leur appartenance automatique au groupe PUBLIC. Pour refuser ce privilège à un utilisateur, retirez le privilège TEMP du groupe PUBLIC, puis accordez explicitement le privilège TEMP uniquement à des utilisateurs ou groupes d’utilisateurs spécifiques.

IF NOT EXISTS  
Clause indiquant que si la table spécifiée existe déjà, la commande ne doit faire aucune modification et renvoyer un message selon lequel la table existe, plutôt que de s’arrêter avec une erreur. Notez que la table existante peut ne ressembler en rien à celle que vous avez créée ; seul le nom de la table est comparé.  
Comme cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si CREATE TABLE tente de créer une table qui existe déjà.

 *table\$1name*   
Nom de la table à créer.  
Si vous spécifiez un nom de table qui commence par « \$1 », la table est créée comme table temporaire. Voici un exemple :  

```
create table #newtable (id int);
```
Vous faites également référence à la table avec le « \$1 ». Par exemple :   

```
select * from #newtable;
```
La longueur maximale d’un nom de table est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Vous pouvez utiliser des caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Amazon Redshift applique un quota du nombre de tables par cluster et par type de nœud, y compris les tables temporaires définies par l’utilisateur et les tables temporaires créées par Amazon Redshift lors du traitement des requêtes ou de la maintenance du système. Le cas échéant, le nom de la table peut être qualifié avec le nom de la base de données et le nom du schéma. Dans l’exemple suivant, le nom de base de données est `tickit`, le nom du schéma `public` et le nom de la table `test`.   

```
create table tickit.public.test (c1 int);
```
Si la base de données ou le schéma n’existe pas, la table n’est pas créée et l’instruction renvoie une erreur. Vous ne pouvez pas créer de tables ni de vues dans les bases de données système `template0`, `template1`, `padb_harvest` ou `sys:internal`.  
Si un nom de schéma est donné, la nouvelle table est créée dans ce schéma (en supposant que le créateur ait accès au schéma). Le nom de la table doit être un nom unique pour ce schéma. Si aucun schéma n’est spécifié, la table est créée en utilisant le schéma de base de données actuel. Si vous créez une table temporaire, vous ne pouvez pas spécifier un nom de schéma, car les tables temporaires existent dans un schéma spécial.  
Plusieurs tables temporaires de même nom peuvent exister en même temps dans la même base de données même si elles sont créées dans des séances distinctes, car les tables sont attribuées à des schémas différents. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

 *column\$1name*   
Nom d’une colonne à créer dans la nouvelle table. La longueur maximale d’un nom de colonne est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Vous pouvez utiliser des caractères multioctets UTF-8 jusqu’à un maximum de quatre octets. Le nombre maximal de colonnes que vous pouvez définir dans une seule table est de 1 600. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).  
Si vous créez une grande table, veillez à ce que la liste de colonnes ne dépasse pas les limites de largeur de ligne pour les résultats intermédiaires pendant le traitement des charges et des requêtes. Pour plus d'informations, consultez [Notes d’utilisation](#r_CREATE_TABLE_usage).

 *data\$1type*   
Type de données de la colonne en cours de création. Pour les colonnes CHAR et VARCHAR, vous pouvez utiliser le mot-clé MAX au lieu de déclarer une longueur maximale. MAX définit la longueur maximale sur 4 096 octets pour CHAR ou 65535 octets pour VARCHAR. La taille maximum d’un objet GEOMETRY est de 1 048 447 octets.  
Pour obtenir des informations sur les types de données pris en charge par Amazon Redshift, consultez [Types de données](c_Supported_data_types.md).

DEFAULT *expr\$1défaut*   <a name="create-table-default"></a>
Clause qui attribue une valeur de données par défaut à la colonne. Le type de données de *expr\$1défaut* doit correspondre au type de données de la colonne. La valeur DEFAULT doit être une expression exempte de variable. Les sous-requêtes, les références croisées aux autres colonnes de la table active et les fonctions définies par l’utilisateur ne sont pas autorisées.  
L’expression *expr\$1défaut* est utilisée dans toute opération INSERT qui ne spécifie pas une valeur pour la colonne. Si aucune valeur par défaut n’est spécifiée, la valeur par défaut de la colonne est la valeur null.  
Si une opération COPY avec une liste de colonnes définies omet une colonne qui a une valeur DEFAULT, la commande COPY insère la valeur de l’expression *expr\$1défaut*.

IDENTITY(*seed*, *step*)   <a name="identity-clause"></a>
Clause qui spécifie que la colonne est une colonne IDENTITY. Une colonne IDENTITY contient des valeurs uniques générées automatiquement. Le type de données d’une colonne IDENTITY doit être INT ou BIGINT.   
Lorsque vous ajoutez des lignes à l’aide d’une instruction `INSERT` ou `INSERT INTO [tablename] VALUES()`, ces valeurs commencent par la valeur spécifiée en tant que *seed* et sont incrémentées du nombre spécifié comme *step*.   
Quand la table est chargée à l’aide d’une instruction `INSERT INTO [tablename] SELECT * FROM` ou `COPY`, les données sont chargées en parallèle et distribuées aux tranches de nœuds. Pour garantir que les valeurs d’identité sont uniques, Amazon Redshift ignore un certain nombre de valeurs lors de la création des valeurs d’identité. Les valeurs d’identité sont uniques, mais l’ordre ne correspond pas toujours à celui des fichiers source. 

GENERATED BY DEFAULT AS IDENTITY(*seed*, *step*)   <a name="identity-generated-bydefault-clause"></a>
Clause qui spécifie que la colonne est une colonne IDENTITY par défaut et qui vous permet d’attribuer automatiquement une valeur unique à la colonne. Le type de données d’une colonne IDENTITY doit être INT ou BIGINT. Lorsque vous ajoutez des lignes sans valeurs, ces valeurs commencent par la valeur spécifiée en tant que *seed* et s’incrémentent du nombre spécifié comme s *step.* Pour obtenir des informations sur la manière dont les valeurs sont générées, consultez [IDENTITY](#identity-clause).  
De plus, lors des opérations INSERT, UPDATE ou COPY, vous pouvez fournir une valeur sans EXPLICIT\$1IDS. Amazon Redshift utilise cette valeur pour insérer dans la colonne d’identité au lieu d’utiliser la valeur générée par le système. La valeur peut être un doublon, une valeur inférieure au seed ou une valeur comprise entre les valeurs de step. Amazon Redshift ne vérifie pas si les valeurs de la colonne sont uniques. Le fait de fournir une valeur n’affecte pas la prochaine valeur générée par le système.  
Si vous avez besoin de valeurs uniques dans la colonne, n’ajoutez pas de valeur en double. À la place, ajoutez une valeur unique inférieure au seed ou comprise entre les valeurs de step.
Gardez à l’esprit ce qui suit au sujet des colonnes d’identité par défaut :   
+ Les colonnes d’identité par défaut sont NOT NULL. NULL ne peut pas être inséré.
+ Pour insérer une valeur générée dans une colonne d’identité par défaut, utilisez le mot-clé `DEFAULT`. 

  ```
  INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  ```
+ Le fait de remplacer des valeurs d’une colonne d’identité par défaut n’affecte pas la prochaine valeur générée. 
+ Vous ne pouvez pas ajouter de colonne d’identité par défaut avec l’instruction ALTER TABLE ADD COLUMN. 
+ Vous pouvez ajouter une colonne d’identité par défaut avec l’instruction ALTER TABLE APPEND. 

ENCODE *encodage*   
Encodage de compression pour une colonne. ENCODE AUTO est la valeur par défaut pour les tables. Amazon Redshift gère automatiquement l’encodage de compression pour toutes les colonnes de la table. Si vous spécifiez l’encodage de compression pour une colonne quelconque du tableau, le tableau n’est plus défini sur ENCODE AUTO. Amazon Redshift ne gère plus automatiquement le codage de compression pour toutes les colonnes de la table. Vous pouvez spécifier l’option ENCODE AUTO pour la table afin de permettre à Amazon Redshift de gérer automatiquement l’encodage de la compression pour toutes les colonnes de la table.  
  
Pour les colonnes pour lesquelles vous ne spécifiez pas d’encodage de compression, Amazon Redshift affecte automatiquement un encodage de compression initial comme suit :  
+ Toutes les colonnes de tables temporaires se voient attribuer une compression RAW par défaut.
+ Les colonnes qui sont définies comme des clés de tri se voient attribuer une compression RAW.
+ Les colonnes qui sont définies comme des types de données BOOLEAN, REAL, DOUBLE PRECISION ou GEOMETRY ou GEOGRAPHY se voient attribuer une compression RAW.
+ Les colonnes définies comme SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ sont soumises à une compression. AZ64
+ Les colonnes définies comme CHAR, VARCHAR ou VARBYTE sont affectées à la compression LZO.
Si vous ne souhaitez pas qu’une colonne soit compressée, spécifiez explicitement un encodage RAW (brut).
 Les encodages [compression encodings](c_Compression_encodings.md#compression-encoding-list) suivants sont pris en charge :  
+ AZ64
+ BYTEDICT
+ DELTA
+ DELTA32 K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (aucune compression)
+ RUNLENGTH
+ TEXT255
+ TEXT32 K
+ ZSTD

DISTKEY  
Mot-clé qui spécifie que la colonne est la clé de distribution de la table. Une seule colonne d’une table peut être la clé de distribution. Vous pouvez utiliser le mot-clé DISTKEY après un nom de colonne ou dans le cadre de la définition de la table à l’aide de la syntaxe DISTKEY (*nom\$1colonne*). Les deux méthodes ont le même effet. Pour plus d’informations, consultez le paramètre DISTSTYLE ultérieurement dans cette rubrique.  
Le type de données d’une colonne de clés de distribution peut être : REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, CHAR ou VARCHAR.

SORTKEY  
Mot-clé qui spécifie que la colonne est la clé de tri de la table. Lorsque les données sont chargées dans la table, les données sont triées sur une ou plusieurs colonnes désignées comme les clés de tri. Vous pouvez utiliser le mot-clé SORTKEY après un nom de colonne pour spécifier une clé de tri à une seule colonne ou vous pouvez spécifier une ou plusieurs colonnes comme colonnes de clé de tri de la table à l’aide de la syntaxe SORTKEY (*column\$1name* [,...]). Seules les clés de tri composées sont créées avec cette syntaxe.  
Vous pouvez définir un maximum de 400 colonnes SORTKEY par table.  
Le type de données d’une colonne de clés de tri peut être : BOOLEAN, REAL, DOUBLE PRECISION, SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ, CHAR ou VARCHAR.

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
Clause qui spécifie si la recherche de chaîne ou la comparaison sur la colonne est sensible à la casse ou insensible à la casse. La valeur par défaut est la même que la configuration actuelle de sensibilité à la casse de la base de données.  
COLLATE n'est pris en charge que sur les types de données basés sur des chaînes, notamment CHAR, VARCHAR et les valeurs de chaîne dans les colonnes SUPER. Pour plus de détails sur l'interrogation des données SUPER sans distinction majuscules/majuscules, consultez. [Requête sans distinction majuscules/majuscules](query-super.md#case-insensitive-super-queries)  
Pour rechercher les informations de classement de la base de données, utilisez la commande suivante :  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE et CS sont interchangeables et donnent les mêmes résultats. De même, CASE\$1INSENSITIVE et CI sont interchangeables et donnent les mêmes résultats.

NOT NULL \$1 NULL   
NOT NULL spécifie que la colonne n’est pas autorisée à contenir des valeurs null. NULL, valeur par défaut, spécifie que la colonne accepte les valeurs null. Les colonnes IDENTITY sont déclarées NOT NULL par défaut.

UNIQUE  
Mot-clé qui spécifie que la colonne ne peut contenir que des valeurs uniques. Le comportement de la contrainte de table unique est identique à celui des contraintes de colonne, avec la capacité supplémentaire de s’étendre sur plusieurs colonnes. Pour définir une contrainte de table unique, utilisez la syntaxe UNIQUE (*nom\$1colonne* [,...]).  
Les contraintes d’unicité ont une valeur informationnelle et ne sont pas appliquées par le système.

PRIMARY KEY  
Mot-clé qui spécifie que la colonne est la clé primaire de la table. Seule une colonne peut être définie comme clé primaire à l’aide d’une définition de colonne. Pour définir une contrainte de table avec une clé primaire à plusieurs colonnes, utilisez la syntaxe PRIMARY KEY (*nom\$1colonne* [,...]).  
L’identification d’une colonne comme clé primaire fournit les métadonnées relatives à la conception du schéma. Une clé primaire implique que d’autres tables puissent se reposer sur cet ensemble de colonnes comme identificateur unique des lignes. Une clé primaire peut être spécifiée pour une table, que ce soit comme contrainte de colonne ou contrainte de table. La contrainte de clé primaire doit nommer un ensemble de colonnes différent des autres ensembles de colonnes nommés pour une contrainte unique définie pour la même table.  
Les colonnes PRIMARY KEY sont également définies comme NOT NULL.  
Les contraintes de clé primaire ont uniquement un but informatif. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur.

References *table\$1réf* [ ( *colonne\$1réf* ) ]  
Clause qui spécifie une contrainte de clé étrangère, ce qui implique que la colonne contienne uniquement des valeurs qui correspondent à celles de la colonne référencée d’une ligne de la table référencée. Les colonnes référencées doivent être les colonnes d’une contrainte de clé unique ou de clé primaire de la table référencée.   
 Les contraintes de clé étrangère ont un but informatif uniquement. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur. 

LIKE *table\$1parent* [ \$1 INCLUDING \$1 EXCLUDING \$1 DEFAULTS ]   <a name="create-table-like"></a>
Clause qui spécifie une table existante à partir de laquelle la nouvelle table copie automatiquement les noms de colonne, les types de données et les contraintes NOT NULL. La nouvelle table et la table parent sont découplées et toutes les modifications apportées à la table parent ne sont pas appliquées à la nouvelle table. Les expressions par défaut des définitions de colonne copiées sont copiées uniquement si INCLUDING DEFAULTS est spécifié. Le comportement par défaut consiste à exclure les expressions par défaut, de telle sorte que toutes les colonnes de la nouvelle table aient une valeurs null par défaut.   
Les tables créées avec l’option LIKE n’héritent pas des contraintes de clé primaire et de clé étrangère. Les propriétés du style de distribution, des clés de tri, de BACKUP et de NULL sont héritées par les tables LIKE, mais vous ne pouvez pas les définir explicitement dans l’instruction CREATE TABLE ... LIKE.

BACKUP \$1 YES \$1 NO \$1   <a name="create-table-backup"></a>
Clause qui spécifie si la table doit être incluse dans les instantanés de cluster automatiques et manuels.   
Pour les tables, telles que les tables intermédiaires, qui ne contiennent pas de données critiques, spécifiez BACKUP NO pour économiser du temps de traitement lorsque la création d’instantanés et la restauration à partir d’instantanés, et pour réduire l’espace de stockage sur Amazon Simple Storage Service. Comme le paramètre BACKUP NO n’a aucun effet sur la réplication automatique des données sur d’autres nœuds au sein du cluster, les tables pour lesquelles BACKUP NO est spécifié sont restaurées en cas de défaillance de nœud. La valeur par défaut est BACKUP YES.  
Les tables sans sauvegarde ne sont pas prises en charge pour les clusters RA3 provisionnés et les groupes de travail Amazon Redshift Serverless. Une table marquée comme non sauvegardée dans un RA3 cluster ou un groupe de travail sans serveur est traitée comme une table permanente qui sera toujours sauvegardée lors de la prise d'un instantané, et toujours restaurée lors de la restauration à partir d'un instantané. Pour éviter les coûts liés aux instantanés pour les tables sans sauvegarde, tronquez-les avant de prendre un instantané.

DISTSTYLE \$1 AUTO \$1 EVEN \$1 KEY \$1 ALL \$1  
Mot-clé qui définit le style de distribution des données pour l’ensemble de la table. Amazon Redshift répartit les lignes d’une table entre les nœuds de calcul selon le style de distribution spécifié pour la table. La valeur par défaut est AUTO.  
Le style de distribution que vous sélectionnez pour les tables affecte les performances globales de votre base de données. Pour plus d'informations, consultez [Distribution de données pour l’optimisation des requêtes](t_Distributing_data.md). Les styles de distribution possibles sont les suivants :  
+ AUTO : Amazon Redshift attribue un style de distribution optimal basé sur les données de table. Par exemple, si le style de distribution AUTO est spécifié, Amazon Redshift affecte initialement le style de distribution ALL à une petite table. Lorsque la table s’agrandit, Amazon Redshift peut modifier le style de distribution sur KEY et choisir la clé primaire (ou une colonne de la clé primaire composite) comme DISTKEY. Si la table s’agrandit et qu’aucune des colonnes ne peut être DISTKEY, Amazon Redshift change le style de distribution sur EVEN. La modification de style de distribution se produit en arrière-plan et son impact sur les requêtes des utilisateurs est minimal. 

  Pour consulter le style de distribution appliqué à une table, interrogez la table catalogue système PG\$1CLASS. Pour plus d'informations, consultez [Affichage des styles de distribution](viewing-distribution-styles.md). 
+ EVEN : les données de la table sont réparties également entre les nœuds d’un cluster dans une distribution en tourniquet (round robin). IDs Les lignes sont utilisées pour déterminer la distribution, et approximativement le même nombre de lignes est distribué à chaque nœud. 
+ KEY : les données sont réparties selon les valeurs de la colonne DISTKEY. Lorsque vous définissez les colonnes de jointure des tables de jointure comme clés de distribution, les lignes de jointure des deux tables sont colocalisées sur les nœuds de calcul. Lorsque les données sont colocalisées, l’optimiseur peut effectuer les jointures plus efficacement. Si vous spécifiez DISTSTYLE KEY, vous devez nommer une colonne DISTKEY, pour la table ou dans le cadre de la définition de colonne. Pour plus d’informations, consultez le paramètre DISTKEY plus haut dans cette rubrique.
+  ALL : une copie de la table complète est distribuée sur chaque nœud. Ce style de distribution garantit que toutes les lignes obligatoires pour une jointure sont disponibles sur chaque nœud, mais il multiplie les besoins de stockage et augmente les temps de charge et de maintenance de la table. Une distribution ALL peut améliorer le temps d’exécution lorsqu’elle est utilisée avec certaines tables de dimension où la distribution KEY ne convient pas, mais les améliorations des performances doivent être pondérées par rapport aux coûts de maintenance. 

DISTKEY (*nom\$1colonne*)  
Contrainte qui spécifie la colonne à utiliser comme clé de distribution de la table. Vous pouvez utiliser le mot-clé DISTKEY après un nom de colonne ou dans le cadre de la définition de la table à l’aide de la syntaxe DISTKEY (*nom\$1colonne*). Les deux méthodes ont le même effet. Pour plus d’informations, consultez le paramètre DISTSTYLE plus haut dans cette rubrique.

[COMPOUND \$1 INTERLEAVED ] SORTKEY (* column\$1name* [,...]) \$1 [ SORTKEY AUTO ]  
Spécifie une ou plusieurs clés de tri pour la table. Lorsque les données sont chargées dans la table, les données sont triées sur les colonnes désignées comme clés de tri. Vous pouvez utiliser le mot-clé SORTKEY après un nom de colonne pour spécifier une clé de tri à une seule colonne ou vous pouvez spécifier une ou plusieurs colonnes comme colonnes de clé de tri de la table à l’aide de la syntaxe `SORTKEY (column_name [ , ... ] )`.   
Vous pouvez spécifier le cas échéant le style de tri COMPOUND ou INTERLEAVED. Si vous spécifiez SORTKEY avec des colonnes, la valeur par défaut est COMPUND. Pour plus d'informations, consultez [Clés de tri](t_Sorting_data.md).  
Si vous ne spécifiez pas d’options de clé de tri, la valeur par défaut est AUTO.  
Vous pouvez définir un maximum de 400 colonnes COMPOUND SORTKEY ou de 8 colonnes INTERLEAVED SORTKEY par table.     
AUTO  
Spécifie qu’Amazon Redshift attribue une clé de tri optimale en fonction des données de la table. Par exemple, si la clé de tri AUTO est spécifiée, Amazon Redshift n’affecte initialement aucune clé de tri à une table. Si Amazon Redshift détermine qu’une clé de tri améliorera les performances des requêtes, Amazon Redshift peut modifier la clé de tri de votre table. Le tri de la table est effectué par tri automatique de la table. Pour plus d'informations, consultez [Tri automatique des tables](t_Reclaiming_storage_space202.md#automatic-table-sort).   
Amazon Redshift ne modifie pas les tables qui possèdent des clés de tri ou de distribution existantes, à une exception près : si une table possède une clé de distribution qui n’a jamais été utilisée dans une requête JOIN, la clé peut être modifiée si Amazon Redshift détermine qu’il en existe une meilleure.   
Pour afficher la clé de tri d'une table, interrogez la vue catalogue système SVV\$1\$1TABLE\$1INFO. Pour plus d'informations, consultez [SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md). Pour afficher les recommandations Amazon Redshift Advisor pour les tables, recherchez la vue catalogue système SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS. Pour plus d'informations, consultez [SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md). Pour afficher les actions effectuées par Amazon Redshift, interrogez la vue catalogue système SVL\$1AUTO\$1WORKER\$1ACTION. Pour plus d'informations, consultez [SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md).   
COMPOUND  
Spécifie que les données sont triées à l’aide d’une clé composée, constituée de toutes les colonnes affichées, dans leur ordre d’apparition. Une clé de tri composée est surtout utile lorsqu’une requête analyse les lignes selon l’ordre des colonnes de tri. Les avantages en termes de performances d’un tri avec une clé composée diminuent lorsque les requêtes reposent sur des colonnes de tri secondaires. Vous pouvez définir un maximum de 400 colonnes COMPOUND SORTKEY par table.   
INTERLEAVED  
Spécifie que les données sont triées à l’aide d’une clé de tri entrelacée. Un maximum de huit colonnes peut être spécifié pour une clé de tri entrelacée.   
Comme un tri entrelacé confère un poids égal à chaque colonne, ou sous-ensemble de colonnes, de la clé de tri, les requêtes ne dépendent pas de l’ordre des colonnes de la clé de tri. Quand une requête utilise une ou plusieurs colonnes de tri secondaires, le tri entrelacé améliore les performances des requêtes de façon significative. Le tri entrelacé entraîne un léger coût de traitement pour les opérations de chargement de données et les opérations VACUUM.   
N’utilisez pas de clé de tri entrelacée sur les colonnes qui contiennent des attributs qui augmentent de façon monotone, tels que les colonnes d’identité, les dates ou les horodatages.

ENCODE AUTO   
Permet à Amazon Redshift d’ajuster automatiquement le type d’encodage pour toutes les colonnes de la table afin d’optimiser les performances des requêtes. ENCODE AUTO conserve les types d’encodage initiaux que vous spécifiez lors de la création de la table. Ensuite, si Amazon Redshift détermine qu’un nouveau type d’encodage peut améliorer les performances de la requête, Amazon Redshift peut modifier le type d’encodage des colonnes de la table. ENCODE AUTO est la valeur par défaut si vous ne spécifiez de type d’encodage pour aucune colonne de la table.

UNIQUE (*nom\$1colonne* [,...])  
Contrainte qui spécifie qu’un groupe d’une ou de plusieurs colonnes d’une table ne peut contenir que des valeurs uniques. Le comportement de la contrainte de table unique est identique à celui des contraintes de colonne, avec la capacité supplémentaire de s’étendre sur plusieurs colonnes. Dans le contexte des contraintes uniques, les valeurs null ne sont pas considérées comme égales. Chaque contrainte de table unique doit nommer un ensemble de colonnes différent de l’ensemble de colonnes nommées par une autre contrainte de clé unique ou de clé primaire définie pour la table.   
 Les contraintes d’unicité ont une valeur informationnelle et ne sont pas appliquées par le système. 

PRIMARY KEY (*nom\$1colonne* [,...])  
Contrainte qui spécifie qu’une colonne ou un nombre de colonnes d’une table ne peut contenir que des valeurs non null (non dupliquées) uniques. L’identification d’un ensemble de colonnes comme clé primaire fournit aussi les métadonnées relatives à la conception du schéma. Une clé primaire implique que d’autres tables puissent se reposer sur cet ensemble de colonnes comme identificateur unique des lignes. Une clé primaire peut être spécifiée pour une table, que ce soit comme contrainte de colonne ou contrainte de table. La contrainte de clé primaire doit nommer un ensemble de colonnes différent des autres ensembles de colonnes nommés pour une contrainte unique définie pour la même table.   
 Les contraintes de clé primaire ont uniquement un but informatif. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur. 

FOREIGN KEY ( *nom\$1colonne* [, ... ] ) REFERENCES *table\$1réf* [ ( *colonne\$1réf* ) ]   
Contrainte qui spécifie une contrainte de clé étrangère, laquelle nécessite qu’un groupe d’une ou de plusieurs colonnes de la nouvelle table ne doit contenir que des valeurs qui correspondent à des valeurs des colonnes référencées d’une ligne de la table référencée. Si *colonne\$1réf* est omis, la clé primaire de *table\$1réf* est utilisée. Les colonnes référencées doivent être les colonnes d’une contrainte de clé unique ou de clé primaire de la table référencée.  
Les contraintes de clé étrangère ont un but informatif uniquement. Elles ne sont pas appliquées par le système, mais sont utilisées par le planificateur.

## Notes d’utilisation
<a name="r_CREATE_TABLE_usage"></a>

Les contraintes d’unicité, de clé primaire et de clé externe sont uniquement informatives ; *elles ne sont pas appliquées par Amazon Redshift* lorsque vous remplissez une table. Par exemple, si vous insérez des données dans une table avec des dépendances, l’insertion peut réussir même si elle enfreint la contrainte. Néanmoins, les clés primaires et les clés étrangères servent de conseils de planification et doivent être déclarées si votre processus ETL ou un autre processus de votre application impose leur intégrité. Pour plus d’informations sur la manière de supprimer une table avec des dépendances, consultez [DROP TABLE](r_DROP_TABLE.md).

### Limites et quotas
<a name="r_CREATE_TABLE_usage-limits"></a>

Tenez compte des limites suivantes lorsque vous créez une table.
+ Il existe une limite pour le nombre maximal de tables dans un cluster par type de nœud. Pour plus d’informations, consultez [Limites](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dans le *Guide de gestion Amazon Redshift*. 
+ Le nombre maximal de caractères pour un nom de table est 127. 
+ Le nombre maximal de colonnes que vous pouvez définir dans une seule table est de 1 600. 
+ Le nombre maximal de colonnes SORTKEY que vous pouvez définir dans une seule table est de 400. 

### Résumé des paramètres de niveau colonne et des paramètres de niveau table
<a name="r_CREATE_TABLE_usage-summary_of_settings"></a>

 Plusieurs attributs et paramètres peuvent être définis au niveau colonne ou au niveau table. Dans certains cas, la définition d’un attribut ou d’une contrainte au niveau colonne ou au niveau table a le même effet. Dans d’autres cas, elles produisent des résultats différents. 

 La liste suivante résume les paramètres de niveau colonne et de niveau de la table : 

DISTKEY  
Il n’y a pas de différence effective que la définition soit au niveau colonne ou au niveau table.   
Si DISTKEY est défini, au niveau colonne ou au niveau table, DISTSTYLE doit être défini sur KEY ou ne pas l’être du tout. DISTSTYLE peut être défini au niveau table uniquement. 

SORTKEY  
Si la définition est au niveau colonne, SORTKEY doit être une colonne unique. Si SORTKEY est défini au niveau table, une ou plusieurs colonnes peuvent constituer une clé de tri composée ou une clé de tri composite entrelacée. 

COLLATE CASE\$1SENSITIVE \$1 COLLATE CASE\$1INSENSITIVE  
Amazon Redshift ne prend pas en charge la modification de la configuration de sensibilité à la casse pour une colonne. Lorsque vous ajoutez une nouvelle colonne à la table, Amazon Redshift utilise la valeur par défaut pour la sensibilité à la casse. Amazon Redshift ne prend pas en charge le mot clé COLLATE lors de l’ajout d’une nouvelle colonne.  
Pour plus d’informations sur la création de bases de données à l’aide du classement de bases de données, consultez [CREATE DATABASE](r_CREATE_DATABASE.md).  
Pour obtenir des informations sur la fonction COLLATE, consultez [Fonction COLLATE](r_COLLATE.md).

UNIQUE  
Au niveau colonne, une ou plusieurs clés peuvent être définies comme UNIQUE ; la contrainte UNIQUE s’applique à chaque colonne individuellement. Si UNIQUE est défini au niveau table, une ou plusieurs colonnes peuvent constituer une contrainte UNIQUE composite. 

PRIMARY KEY  
Si la définition est au niveau colonne, PRIMARY KEY doit être une colonne unique. Si PRIMARY KEY est défini au niveau de la table, une ou plusieurs colonnes peuvent constituent une clé primaire composite. 

FOREIGN KEY  
Il n’y a pas de différence effective que FOREIGN KEY soit défini au niveau colonne ou au niveau table. Au niveau colonne, la syntaxe est simplement `REFERENCES` *table\$1réf* [ ( *colonne\$1réf* )]. 

### Distribution des données entrantes
<a name="r_CREATE_TABLE_usage-distribution-of-incoming-data"></a>

Lorsque le schéma de distribution de hachage des données entrantes correspond à celui de la table cible, aucune distribution physique des données n’est réellement nécessaire lors du chargement des données. Par exemple, si une clé de distribution est définie pour la nouvelle table et que les données sont insérées à partir d’une autre table qui est distribuée sur la même colonne de clé, les données sont chargées en place, à l’aide des mêmes nœuds et tranches. Cependant, si les tables source et cible sont toutes deux définies sur la distribution EVEN, les données sont redistribuées dans la table cible.

### Tables larges
<a name="r_CREATE_TABLE_usage-wide-tables"></a>

Vous pourrez créer une table très grande, mais ne pas pouvoir effectuer le traitement de requêtes, telles que les instructions INSERT ou SELECT, sur la table. La largeur maximale d’une table avec des colonnes de largeur fixe, telles que CHAR, est de 64 Ko - 1 (soit 65 535 octets). Si une table inclut des colonnes VARCHAR, la table peut avoir une grandeur déclarée plus élevée sans renvoyer une erreur, car la pleine grandeur déclarée des colonnes VARCHARS n’intervient pas dans la limite calculée de traitement des requêtes. La limite effective de traitement des requêtes avec les colonnes VARCHAR varie selon un certain nombre de facteurs.

Si une table est trop large pour l’insertion ou la sélection, vous recevez l’erreur suivante.

```
ERROR:  8001
DETAIL:  The combined length of columns processed in the SQL statement
exceeded the query-processing limit of 65535 characters (pid:7627)
```

## Exemples
<a name="r_CREATE_TABLE_usage-examples"></a>

Pour des exemples montrant comment utiliser la commande CREATE TABLE, consultez [Exemples](r_CREATE_TABLE_examples.md).

# Exemples
<a name="r_CREATE_TABLE_examples"></a>

Les exemples suivants illustrent différents attributs de colonne et de table des instructions CREATE TABLE Amazon Redshift. Pour plus d’informations sur CREATE TABLE, y compris la définition des paramètres, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

De nombreux exemples utilisent des tables et des données provenant de l’échantillon de données *TICKIT*. Pour plus d’informations, consultez [Exemple de base de données](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

 Vous pouvez faire précéder le nom de la table du nom de la base de données et du nom du schéma dans une commande CREATE TABLE. Par exemple, `dev_database.public.sales`. Le nom de la base de données doit être la base de données à laquelle vous êtes connecté. Toute tentative de création d’objets de base de données dans une autre base de données échoue avec une erreur d’opération non valide.

## Créer une table avec une clé de distribution, une clé de tri composée et une compression
<a name="r_CREATE_TABLE_examples-create-a-table-with-distribution-key"></a>

L’exemple suivant crée une table SALES dans la base de données TICKIT avec compression définie pour plusieurs colonnes. LISTID est déclaré comme clé de distribution, et LISTID et SELLERID sont déclarés comme clé de tri composée à plusieurs colonnes. Les contraintes de clé primaire et de clé étrangère sont également définies pour la table. Avant de créer la table de l’exemple, vous devrez peut-être ajouter une contrainte UNIQUE à chaque colonne référencée par une clé étrangère, si les contraintes n’existent pas.

```
create table sales(
salesid integer not null,
listid integer not null,
sellerid integer not null,
buyerid integer not null,
eventid integer not null encode mostly16,
dateid smallint not null,
qtysold smallint not null encode mostly8,
pricepaid decimal(8,2) encode delta32k,
commission decimal(8,2) encode delta32k,
saletime timestamp,
primary key(salesid),
foreign key(listid) references listing(listid),
foreign key(sellerid) references users(userid),
foreign key(buyerid) references users(userid),
foreign key(dateid) references date(dateid))
distkey(listid)
compound sortkey(listid,sellerid);
```

Les résultats sont les suivants :

```
schemaname | tablename | column     | type                        | encoding | distkey | sortkey | notnull
-----------+-----------+------------+-----------------------------+----------+---------+---------+--------
public     | sales     | salesid    | integer                     | lzo      | false   |       0 | true
public     | sales     | listid     | integer                     | none     | true    |       1 | true
public     | sales     | sellerid   | integer                     | none     | false   |       2 | true
public     | sales     | buyerid    | integer                     | lzo      | false   |       0 | true
public     | sales     | eventid    | integer                     | mostly16 | false   |       0 | true
public     | sales     | dateid     | smallint                    | lzo      | false   |       0 | true
public     | sales     | qtysold    | smallint                    | mostly8  | false   |       0 | true
public     | sales     | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | commission | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

L’exemple suivant crée une table t1 avec une colonne col1 insensible à la casse.

```
create table T1 (
  col1 Varchar(20) collate case_insensitive
 );
            
insert into T1 values ('bob'), ('john'), ('Tom'), ('JOHN'), ('Bob');
```

Interrogez la table.

```
select * from T1 where col1 = 'John';
   
col1
------
 john
 JOHN
(2 rows)
```

## Créer une table à l’aide d’une clé de tri entrelacé
<a name="CREATE_TABLE_NEW-create-a-table-using-interleaved-sortkey"></a>

L’exemple suivant crée la table CUSTOMER avec une clé de tri entrelacé.

```
create table customer_interleaved (
  c_custkey     	integer        not null,
  c_name        	varchar(25)    not null,
  c_address     	varchar(25)    not null,
  c_city        	varchar(10)    not null,
  c_nation      	varchar(15)    not null,
  c_region      	varchar(12)    not null,
  c_phone       	varchar(15)    not null,
  c_mktsegment      varchar(10)    not null)
diststyle all
interleaved sortkey (c_custkey, c_city, c_mktsegment);
```

## Créer une table avec IF NOT EXISTS
<a name="CREATE_TABLE_NEW-create-a-table-using-if-not-exists"></a>

 L’exemple suivant crée la table CITIES ou ne fait rien et renvoie un message si elle existe déjà :

```
create table if not exists cities(
cityid integer not null,
city varchar(100) not null,
state char(2) not null);
```

## Créer une table avec la distribution ALL
<a name="CREATE_TABLE_NEW-create-a-table-with-all-distribution"></a>

 L’exemple suivant crée la table VENUE avec la distribution ALL. 

```
create table venue(
venueid smallint not null,
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid))
diststyle all;
```

## Créer une table avec la distribution EVEN
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-even-distribution"></a>

L’exemple suivant crée la table MYEVENT à trois colonnes. 

```
create table myevent(
eventid int,
eventname varchar(200),
eventcity varchar(30))
diststyle even;
```

La table est distribuée uniformément et n’est pas triée. La table ne comporte aucune colonne DISTKEY ou SORTKEY déclarée. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'myevent';
            
  column   |          type          | encoding | distkey | sortkey
-----------+------------------------+----------+---------+---------
 eventid   | integer                | lzo      | f       |       0
 eventname | character varying(200) | lzo      | f       |       0
 eventcity | character varying(30)  | lzo      | f       |       0
(3 rows)
```

## Créer une table temporaire semblable (LIKE) à une autre table
<a name="r_CREATE_TABLE_NEW-create-a-temporary-table-that-is-like-another-table"></a>

L’exemple suivant crée une table temporaire nommée TEMPEVENT, qui hérite ses colonnes de la table EVENT. 

```
create temp table tempevent(like event); 
```

Cette table hérite également les attributs DISTKEY et SORTKEY de sa table parent : 

```
select "column", type, encoding, distkey, sortkey
 from pg_table_def where tablename = 'tempevent';

  column   |            type             | encoding | distkey | sortkey
-----------+-----------------------------+----------+---------+---------
 eventid   | integer                     | none     | t       |       1
 venueid   | smallint                    | none     | f       |       0
 catid     | smallint                    | none     | f       |       0
 dateid    | smallint                    | none     | f       |       0
 eventname | character varying(200)      | lzo      | f       |       0
 starttime | timestamp without time zone | bytedict | f       |       0
(6 rows)
```

## Créer une table avec une colonne IDENTITY
<a name="r_CREATE_TABLE_NEW-create-a-table-with-an-identity-column"></a>

L’exemple suivant crée une table nommée VENUE\$1IDENT, avec une colonne IDENTITY nommée VENUEID. Cette colonne commence par 0 et s’incrémente de 1 à chaque enregistrement. VENUEID est également déclarée comme clé primaire de la table. 

```
create table venue_ident(venueid bigint identity(0, 1),
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid));
```

## Créer une table avec une colonne IDENTITY par défaut
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-identity-column"></a>

L’exemple suivant crée une table nommée `t1`. Cette table a une colonne IDENTITY nommée `hist_id` et une colonne IDENTITY par défaut nommée `base_id`. 

```
CREATE TABLE t1(
  hist_id BIGINT IDENTITY NOT NULL, /* Cannot be overridden */
  base_id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, /* Can be overridden */
  business_key varchar(10) ,
  some_field varchar(10)
);
```

L’insertion d’une ligne dans la table montre que les valeurs `hist_id` et `base_id` sont générées. 

```
INSERT INTO T1 (business_key, some_field) values ('A','MM');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
```

L’insertion d’une deuxième ligne montre que la valeur par défaut pour `base_id` est générée.

```
INSERT INTO T1 (base_id, business_key, some_field) values (DEFAULT, 'B','MNOP');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
```

L’insertion d’une troisième ligne montre que la valeur pour `base_id` n’a pas besoin d’être unique.

```
INSERT INTO T1 (base_id, business_key, some_field) values (2,'B','MNNN');
```

```
SELECT * FROM t1;
            
 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
       3 |       2 | B            | MNNN
```

## Créer une table avec les valeurs de colonne DEFAULT
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-column-values"></a>

L’exemple suivant crée une table CATEGORYDEF qui déclare les valeurs par défaut de chaque colonne : 

```
create table categorydef(
catid smallint not null default 0,
catgroup varchar(10) default 'Special',
catname varchar(10) default 'Other',
catdesc varchar(50) default 'Special events',
primary key(catid));
            
insert into categorydef values(default,default,default,default);
```

```
select * from categorydef;
            
 catid | catgroup | catname |    catdesc
-------+----------+---------+----------------
     0 | Special  | Other   | Special events
(1 row)
```

## Options DISTSTYLE, DISTKEY et SORTKEY
<a name="r_CREATE_TABLE_NEW-diststyle-distkey-and-sortkey-options"></a>

L’exemple suivant montre comment fonctionnent les options DISTKEY, SORTKEY et DISTSTYLE. Dans cet exemple, COL1 c'est la clé de distribution ; par conséquent, le style de distribution doit être défini sur KEY ou non défini. Par défaut, comme la table n’a aucune clé de tri, elle n’est pas triée : 

```
create table t1(col1 int distkey, col2 int) diststyle key;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't1';

column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | az64     | t       | 0
col2   | integer | az64     | f       | 0
```

Dans l’exemple suivant, la même colonne est définie comme clé de distribution et clé de tri. Une fois encore, le style de distribution doit être défini sur KEY ou ne pas être défini. 

```
create table t2(col1 int distkey sortkey, col2 int);
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't2';
            
column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | none     | t       | 1
col2   | integer | az64     | f       | 0
```

Dans l'exemple suivant, aucune colonne n'est définie comme clé de distribution, COL2 elle est définie comme clé de tri et le style de distribution est défini sur ALL : 

```
create table t3(col1 int, col2 int sortkey) diststyle all;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't3';
            
Column |  Type   | Encoding | DistKey | SortKey
-------+---------+----------+---------+--------
col1   | integer | az64     | f       | 0
col2   | integer | none     | f       | 1
```

Dans l’exemple suivant, le style de distribution est défini sur EVEN et aucune clé de tri n’est définie explicitement ; par conséquent, la table est distribuée uniformément, mais n’est pas triée. 

```
create table t4(col1 int, col2 int) diststyle even;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't4';
            
             column |  type   |encoding | distkey | sortkey
--------+---------+---------+---------+--------
col1    | integer | az64    | f       | 0
col2    | integer | az64    | f       | 0
```

## Création d’une table à l’aide de l’option ENCODE AUTO
<a name="r_CREATE_TABLE_NEW-create-a-table-with-encode-option"></a>

L’exemple suivant crée la table `t1` avec encodage de compression automatique. ENCODE AUTO est la valeur par défaut pour les tables lorsque vous ne spécifiez pas de type d’encodage pour une colonne.

```
create table t1(c0 int, c1 varchar);
```

L’exemple suivant crée la table `t2` avec encodage de compression automatique en spécifiant ENCODE AUTO.

```
create table t2(c0 int, c1 varchar) encode auto;
```

L’exemple suivant crée la table `t3` avec encodage de compression automatique en spécifiant ENCODE AUTO. La colonne `c0` est définie avec un type d’encodage initial DELTA. Amazon Redshift peut modifier l’encodage si un autre encodage fournit de meilleures performances de requête.

```
create table t3(c0 int encode delta, c1 varchar) encode auto;
```

L’exemple suivant crée la table `t4` avec encodage de compression automatique en spécifiant ENCODE AUTO. La colonne `c0` est définie avec un encodage initial de DELTA, et la colonne `c1` est définie avec un encodage initial de LZO. Amazon Redshift peut modifier ces encodages si d’autres encodages fournissent de meilleures performances de requête.

```
create table t4(c0 int encode delta, c1 varchar encode lzo) encode auto;
```

# CREATE TABLE AS
<a name="r_CREATE_TABLE_AS"></a>

**Topics**
+ [Syntaxe](#r_CREATE_TABLE_AS-synopsis)
+ [Parameters](#r_CREATE_TABLE_AS-parameters)
+ [Notes d’utilisation de CTAS](r_CTAS_usage_notes.md)
+ [Exemples de CTAS](r_CTAS_examples.md)

Crée une table basée sur une requête. Le propriétaire de cette table est l’utilisateur qui émet la commande.

La nouvelle table est chargée avec les données définies par la requête dans la commande. Les colonnes ont des noms et des types de données associés aux colonnes de sortie de la requête. La commande CREATE TABLE AS (CTAS) crée une table et évalue la requête pour charger la nouvelle table.

## Syntaxe
<a name="r_CREATE_TABLE_AS-synopsis"></a>

```
CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ]
TABLE table_name
[ ( column_name [, ... ] ) ]
[ BACKUP { YES | NO } ]
[ table_attributes ]
AS query

where table_attributes are:
[ DISTSTYLE { AUTO | EVEN | ALL | KEY } ]
[ DISTKEY( distkey_identifier ) ]
[ [ COMPOUND | INTERLEAVED ] SORTKEY( column_name [, ...] ) ]
```

## Parameters
<a name="r_CREATE_TABLE_AS-parameters"></a>

LOCAL   
Même si ce mot-clé facultatif est accepté dans l’instruction, il n’a aucun effet dans Amazon Redshift.

TEMPORARY \$1 TEMP   
Crée une table temporaire. Une table temporaire est automatiquement supprimée à la fin de la séance dans laquelle elle a été créée.

 *table\$1name*   
Nom de la table à créer.  
Si vous spécifiez un nom de table qui commence par « \$1 », la table est créée comme table temporaire. Par exemple :  

```
create table #newtable (id) as select * from oldtable;
```
La longueur maximale d’un nom de table est de 127 octets ; les noms plus longs sont tronqués à 127 octets. Amazon Redshift applique un quota correspondant au nombre de tables par cluster et par type de nœud. Le nom de la table peut être qualifié avec le nom de la base de données et le nom du schéma, comme illustré dans le tableau ci-dessous.  

```
create table tickit.public.test (c1) as select * from oldtable;
```
Dans cet exemple, `tickit` est le nom de la base de données et `public` le nom du schéma. Si la base de données ou le schéma n’existe pas, l’instruction renvoie une erreur.  
Si un nom de schéma est donné, la nouvelle table est créée dans ce schéma (en supposant que le créateur ait accès au schéma). Le nom de la table doit être un nom unique pour ce schéma. Si aucun schéma n’est spécifié, la table est créée à l’aide du schéma de base de données actuel. Si vous créez une table temporaire, vous ne pouvez pas spécifier un nom de schéma, car les tables temporaires existent dans un schéma spécial.  
Plusieurs tables temporaires avec le même nom sont autorisées à exister en même temps dans la base de données même si elles sont créées dans des séances distinctes. Ces tables sont affectées à des schémas différents.

 *column\$1name*   
Nom d’une colonne de la nouvelle table. Si aucun nom de la colonne n’est fourni, les noms de colonnes sont extraits des noms de colonnes de sortie de la requête. Les noms de colonne par défaut sont utilisés pour les expressions. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

BACKUP \$1 YES \$1 NO \$1   
Clause qui spécifie si la table doit être incluse dans les instantanés de cluster automatiques et manuels.   
Pour les tables, telles que les tables intermédiaires, qui ne contiennent pas de données critiques, spécifiez BACKUP NO pour économiser du temps de traitement lorsque la création d’instantanés et la restauration à partir d’instantanés, et pour réduire l’espace de stockage sur Amazon Simple Storage Service. Comme le paramètre BACKUP NO n’a aucun effet sur la réplication automatique des données sur d’autres nœuds au sein du cluster, les tables pour lesquelles BACKUP NO est spécifié sont restaurées en cas de défaillance de nœud. La valeur par défaut est BACKUP YES.  
Les tables sans sauvegarde ne sont pas prises en charge pour les clusters RA3 provisionnés et les groupes de travail Amazon Redshift Serverless. Une table marquée comme non sauvegardée dans un RA3 cluster ou un groupe de travail sans serveur est traitée comme une table permanente qui sera toujours sauvegardée lors de la prise d'un instantané, et toujours restaurée lors de la restauration à partir d'un instantané. Pour éviter les coûts liés aux instantanés pour les tables sans sauvegarde, tronquez-les avant de prendre un instantané.

DISTSTYLE \$1 AUTO \$1 EVEN \$1 KEY \$1 ALL \$1  
Mot-clé qui définit le style de distribution des données pour l’ensemble de la table. Amazon Redshift répartit les lignes d’une table entre les nœuds de calcul selon le style de distribution spécifié pour la table. La valeur par défaut est DISTSTYLE AUTO.  
Le style de distribution que vous sélectionnez pour les tables affecte les performances globales de votre base de données. Pour plus d'informations, consultez [Distribution de données pour l’optimisation des requêtes](t_Distributing_data.md).  
+ AUTO : Amazon Redshift attribue un style de distribution optimal basé sur les données de table. Pour consulter le style de distribution appliqué à une table, interrogez la table catalogue système PG\$1CLASS. Pour plus d'informations, consultez [Affichage des styles de distribution](viewing-distribution-styles.md). 
+ EVEN : les données de la table sont réparties également entre les nœuds d’un cluster dans une distribution en tourniquet (round robin). IDs Les lignes sont utilisées pour déterminer la distribution, et approximativement le même nombre de lignes est distribué à chaque nœud. Il s’agit de la méthode de distribution par défaut.
+ KEY : les données sont réparties selon les valeurs de la colonne DISTKEY. Lorsque vous définissez les colonnes de jointure des tables de jointure comme clés de distribution, les lignes de jointure des deux tables sont colocalisées sur les nœuds de calcul. Lorsque les données sont colocalisées, l’optimiseur peut effectuer les jointures plus efficacement. Si vous spécifiez DISTSTYLE KEY, vous devez nommer une colonne DISTKEY.
+  ALL : une copie de la table complète est distribuée sur chaque nœud. Ce style de distribution garantit que toutes les lignes obligatoires pour une jointure sont disponibles sur chaque nœud, mais il multiplie les besoins de stockage et augmente les temps de charge et de maintenance de la table. Une distribution ALL peut améliorer le temps d’exécution lorsqu’elle est utilisée avec certaines tables de dimension où la distribution KEY ne convient pas, mais les améliorations des performances doivent être pondérées par rapport aux coûts de maintenance. 

DISTKEY (*colonne*)  
Spécifie un nom de la colonne ou un numéro positionnel pour la clé de distribution. Utilisez le nom spécifié dans la liste facultative de colonnes de la table ou de la liste de sélection de la requête. Sinon, utilisez un numéro positionnel, où la première colonne sélectionnée est 1, la deuxième 2 et ainsi de suite. Une seule colonne d’une table peut être la clé de distribution.  
+ Si vous déclarez une colonne comme colonne DISTKEY, DISTSTYLE doit être défini sur KEY ou ne pas être défini.
+ Si vous ne déclarez pas une colonne DISTKEY, vous pouvez définir DISTSTYLE sur EVEN.
+ Si vous ne spécifiez pas DISTKEY ou DISTSTYLE, CTAS détermine le style de distribution de la nouvelle table basée sur le plan de requête de la clause SELECT. Pour plus d'informations, consultez [Héritage des attributs de colonne et de table](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes).
Vous pouvez définir la même colonne comme clé de distribution et clé de tri ; cette approche a tendance à accélérer les jointures lorsque la colonne en question est une colonne de jointure de la requête.

[ COMPOUND \$1 INTERLEAVED ] SORTKEY ( *nom\$1colonne* [, ... ] )  
Spécifie une ou plusieurs clés de tri pour la table. Lorsque les données sont chargées dans la table, les données sont triées sur les colonnes désignées comme clés de tri.   
Vous pouvez spécifier le cas échéant le style de tri COMPOUND ou INTERLEAVED. La valeur par défaut est COMPOUND. Pour plus d'informations, consultez [Clés de tri](t_Sorting_data.md).  
Vous pouvez définir un maximum de 400 colonnes COMPOUND SORTKEY ou de 8 colonnes INTERLEAVED SORTKEY par table.   
Si vous ne spécifiez pas SORTKEY, CTAS détermine les clés de tri de la nouvelle table basées sur le plan de requête de la clause SELECT. Pour plus d'informations, consultez [Héritage des attributs de colonne et de table](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes).    
COMPOUND  
Spécifie que les données sont triées à l’aide d’une clé composée, constituée de toutes les colonnes affichées, dans leur ordre d’apparition. Une clé de tri composée est surtout utile lorsqu’une requête analyse les lignes selon l’ordre des colonnes de tri. Les avantages en termes de performances d’un tri avec une clé composée diminuent lorsque les requêtes reposent sur des colonnes de tri secondaires. Vous pouvez définir un maximum de 400 colonnes COMPOUND SORTKEY par table.   
INTERLEAVED  
Spécifie que les données sont triées à l’aide d’une clé de tri entrelacée. Un maximum de huit colonnes peut être spécifié pour une clé de tri entrelacée.   
Comme un tri entrelacé confère un poids égal à chaque colonne, ou sous-ensemble de colonnes, de la clé de tri, les requêtes ne dépendent pas de l’ordre des colonnes de la clé de tri. Quand une requête utilise une ou plusieurs colonnes de tri secondaires, le tri entrelacé améliore les performances des requêtes de façon significative. Le tri entrelacé entraîne un léger coût de traitement pour les opérations de chargement de données et les opérations VACUUM. 

AS *requête*   
N’importe quelle requête (instruction SELECT) qu’Amazon Redshift prend en charge.

# Notes d’utilisation de CTAS
<a name="r_CTAS_usage_notes"></a>

## Restrictions
<a name="r_CTAS_usage_notes-limits"></a>

Amazon Redshift applique un quota correspondant au nombre de tables par cluster et par type de nœud. 

Le nombre maximal de caractères pour un nom de table est 127. 

Le nombre maximal de colonnes que vous pouvez définir dans une seule table est de 1 600. 

## Héritage des attributs de colonne et de table
<a name="r_CTAS_usage_notes-inheritance-of-column-and-table-attributes"></a>

Les tables CREATE TABLE AS (CTAS) n’héritent pas des contraintes, des colonnes d’identité, des valeurs de colonne par défaut ou de la clé primaire de la table à partir desquels elles ont été créées. 

Vous ne pouvez pas spécifier d’encodage de compression de colonne pour les tables CTAS. Amazon Redshift attribue automatiquement l’encodage de compression comme suit :
+ Les colonnes qui sont définies comme des clés de tri se voient attribuer une compression RAW.
+ Les colonnes qui sont définies comme des types de données BOOLEAN, REAL, DOUBLE PRECISION ou GEOMETRY ou GEOGRAPHY se voient attribuer une compression RAW.
+ Les colonnes définies comme SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP ou TIMESTAMPTZ sont soumises à une compression. AZ64 
+ Les colonnes définies comme CHAR, VARCHAR ou VARBYTE sont affectées à la compression LZO.

Pour plus d’informations, consultez [encodages de compression](c_Compression_encodings.md) et [Types de données](c_Supported_data_types.md). 

Pour attribuer explicitement des encodages de colonne, utilisez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

CTAS détermine le style de distribution et la clé de tri de la nouvelle table basée sur le plan de requête de la clause SELECT. 

Pour les requêtes complexes, telles que les requêtes qui incluent les jointures, les regroupements, une clause order by ou une clause limit, CTAS met tout en œuvre pour choisir le style de distribution optimal et la clé de tri basée sur le plan de requête. 

**Note**  
Pour de meilleures performances avec de grands ensembles de données ou des requêtes complexes, nous vous recommandons d’effectuer des tests à l’aide d’ensembles de données classiques.

Vous pouvez souvent prévoir la clé de distribution et la clé de tri que CTAS choisit en examinant le plan de requête pour afficher les colonnes que, le cas échéant, l’optimiseur de requête choisit pour le tri et la répartition des données. Si le nœud supérieur du plan de requête est une analyse séquentielle simple d’une seule table (XN Seq Scan), CTAS utilise généralement ensuite le style de distribution et la clé de tri de la table source. Si le nœud supérieur du plan de requête est autre chose qu'un scan séquentiel (tel que XN Limit, XN Sort, XN, etc.) HashAggregate, le CTAS fait de son mieux pour choisir le style de distribution et la clé de tri optimaux en fonction du plan de requête.

Par exemple, supposons que vous créez cinq tables à l’aide des types suivants de clauses SELECT :
+ Une instruction select simple 
+ Une clause limit 
+ Une clause order by utilisant LISTID 
+ Une clause order utilisant QTYSOLD 
+ Une fonction d’agrégation SUM avec une clause group by.

Les exemples suivants illustrent le plan de requête pour chaque instruction CTAS.

```
explain create table sales1_simple as select listid, dateid, qtysold from sales;
                           QUERY PLAN
----------------------------------------------------------------
 XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(1 row)


explain create table sales2_limit as select listid, dateid, qtysold from sales limit 100;
                              QUERY PLAN
----------------------------------------------------------------------
 XN Limit  (cost=0.00..1.00 rows=100 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)


explain create table sales3_orderbylistid as select listid, dateid, qtysold from sales order by listid;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: listid
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales4_orderbyqty as select listid, dateid, qtysold from sales order by qtysold;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: qtysold
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales5_groupby as select listid, dateid, sum(qtysold) from sales group by listid, dateid;
                              QUERY PLAN
----------------------------------------------------------------------
 XN HashAggregate  (cost=3017.98..3226.75 rows=83509 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)
```

Pour afficher la clé de distribution et la clé de tri de chaque table, interrogez la table catalogue système PG\$1TABLE\$1DEF, comme illustré ci-après. 

```
select * from pg_table_def where tablename like 'sales%';

      tablename       |   column   | distkey | sortkey
----------------------+------------+---------+---------
 sales                | salesid    | f       |       0
 sales                | listid     | t       |       0
 sales                | sellerid   | f       |       0
 sales                | buyerid    | f       |       0
 sales                | eventid    | f       |       0
 sales                | dateid     | f       |       1
 sales                | qtysold    | f       |       0
 sales                | pricepaid  | f       |       0
 sales                | commission | f       |       0
 sales                | saletime   | f       |       0
 sales1_simple        | listid     | t       |       0
 sales1_simple        | dateid     | f       |       1
 sales1_simple        | qtysold    | f       |       0
 sales2_limit         | listid     | f       |       0
 sales2_limit         | dateid     | f       |       0
 sales2_limit         | qtysold    | f       |       0
 sales3_orderbylistid | listid     | t       |       1
 sales3_orderbylistid | dateid     | f       |       0
 sales3_orderbylistid | qtysold    | f       |       0
 sales4_orderbyqty    | listid     | t       |       0
 sales4_orderbyqty    | dateid     | f       |       0
 sales4_orderbyqty    | qtysold    | f       |       1
 sales5_groupby       | listid     | f       |       0
 sales5_groupby       | dateid     | f       |       0
 sales5_groupby       | sum        | f       |       0
```

Le tableau suivant résume les résultats. Pour simplifier, nous choisissons d’ignorer les détails des coûts, des lignes et de la largeur du plan d’explication.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_CTAS_usage_notes.html)

Vous pouvez spécifier explicitement le style de distribution et la clé de tri dans l’instruction CTAS. Par exemple, l’instruction suivante crée une table à l’aide de la distribution EVEN et spécifie SALESID en tant que clé de tri.

```
create table sales_disteven
diststyle even
sortkey (salesid)
as
select eventid, venueid, dateid, eventname
from event;
```

## Encodage de compression
<a name="r_CTAS_usage_notes_encoding"></a>

ENCODE AUTO est utilisé comme valeur par défaut pour les tables. Amazon Redshift gère automatiquement l’encodage de compression pour toutes les colonnes de la table.

## Distribution des données entrantes
<a name="r_CTAS_usage_notes-distribution-of-incoming-data"></a>

Lorsque le schéma de distribution de hachage des données entrantes correspond à celui de la table cible, aucune distribution physique des données n’est réellement nécessaire lors du chargement des données. Par exemple, si une clé de distribution est définie pour la nouvelle table et que les données sont insérées à partir d’une autre table qui est distribuée sur la même colonne de clé, les données sont chargées en place, à l’aide des mêmes nœuds et tranches. Cependant, si les tables source et cible sont toutes deux définies sur la distribution EVEN, les données sont redistribuées dans la table cible. 

## Opérations ANALYZE automatiques
<a name="r_CTAS_usage_notes-automatic-analyze-operations"></a>

Amazon Redshift analyse automatiquement les tables que vous créez avec les commandes CTAS. Vous n’avez pas besoin d’exécuter la commande ANALYZE sur ces tables lorsqu’elles sont créées initialement. Si vous les modifiez, vous devez les analyser de la même manière que les autres tables. 

# Exemples de CTAS
<a name="r_CTAS_examples"></a>

L’exemple suivant crée une table appelée EVENT\$1BACKUP pour la table EVENT :

```
create table event_backup as select * from event;
```

La table résultante hérite les clés de distribution et les clés de tri de la table EVENT. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'event_backup';

column    | type                        | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+--------
catid     | smallint                    | none     | false   |       0
dateid    | smallint                    | none     | false   |       1
eventid   | integer                     | none     | true    |       0
eventname | character varying(200)      | none     | false   |       0
starttime | timestamp without time zone | none     | false   |       0
venueid   | smallint                    | none     | false   |       0
```

La commande suivante crée une table appelée EVENTDISTSORT en sélectionnant quatre colonnes de la table EVENT. La nouvelle table est distribuée sur EVENTID et triée sur EVENTID et DATEID : 

```
create table eventdistsort
distkey (1)
sortkey (1,3)
as
select eventid, venueid, dateid, eventname
from event;
```

Le résultat est le suivant :

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistsort';

column   |          type          | encoding | distkey | sortkey
---------+------------------------+----------+---------+-------
eventid   | integer               | none     | t       | 1
venueid   | smallint              | none     | f       | 0
dateid    | smallint              | none     | f       | 2
eventname | character varying(200)| none     | f       | 0
```

Vous pouvez créer exactement la même table à l’aide des noms de colonne pour les clés de tri et de distribution. Par exemple :

```
create table eventdistsort1
distkey (eventid)
sortkey (eventid, dateid)
as
select eventid, venueid, dateid, eventname
from event;
```

L’instruction suivante applique une distribution uniforme à la table, mais ne définit pas une clé de tri explicite : 

```
create table eventdisteven
diststyle even
as
select eventid, venueid, dateid, eventname
from event;
```

La table n’hérite pas de la clé de tri de la table EVENT (EVENTID), car la distribution EVEN a été spécifiée pour la nouvelle table. La nouvelle table n’a ni clé de tri, ni clé de distribution. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdisteven';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+---------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 0
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

L’instruction suivante applique une distribution uniforme et définit une clé de tri : 

```
create table eventdistevensort diststyle even sortkey (venueid)
as select eventid, venueid, dateid, eventname from event;
```

 La table en résultant dispose d’une clé de tri, mais pas de clé de distribution. 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistevensort';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+-------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 1
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

L’instruction suivante répartit la table EVENT sur une autre colonne de clé à partir des données entrantes, qui sont triées sur la colonne EVENTID, et ne définit aucune colonne SORTKEY ; par conséquent, la table n’est pas triée. 

```
create table venuedistevent distkey(venueid)
as select * from event;
```

Le résultat est le suivant : 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'venuedistevent';

 column   |            type             | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+-------
eventid   | integer                     | none     | f       | 0
venueid   | smallint                    | none     | t       | 0
catid     | smallint                    | none     | f       | 0
dateid    | smallint                    | none     | f       | 0
eventname | character varying(200)      | none     | f       | 0
starttime | timestamp without time zone | none     | f       | 0
```

# CRÉER UN MODÈLE
<a name="r_CREATE_TEMPLATE"></a>

Crée des modèles réutilisables pour les commandes Amazon Redshift telles que. [COPY](r_COPY.md) Les modèles stockent les paramètres couramment utilisés qui peuvent être référencés lors de plusieurs exécutions de commandes, ce qui améliore la cohérence et réduit la spécification manuelle des paramètres.

Les modèles éliminent le besoin de spécifier à plusieurs reprises les mêmes paramètres de formatage pour plusieurs opérations, tandis que les chemins source, les tables cibles et les autorisations peuvent varier d'une opération à l'autre.

## Privilèges requis
<a name="r_CREATE_TEMPLATE-privileges"></a>

Pour créer un modèle, vous devez disposer de l'un des éléments suivants :
+ Privilèges de superutilisateur
+ Autorisation CREATE sur le schéma dans lequel vous souhaitez créer le modèle, ou autorisation étendue CREATE sur les schémas de la base de données dans laquelle vous souhaitez créer le modèle

## Syntaxe
<a name="r_CREATE_TEMPLATE-synopsis"></a>

```
CREATE [ OR REPLACE ] TEMPLATE [database_name.][schema_name.]template_name
FOR COPY [ AS ]
[ [ FORMAT ] [ AS ] data_format ]
[ parameter [ argument ] [ , ... ] ];
```

## Parameters
<a name="r_CREATE_TEMPLATE-parameters"></a>

 *OU REMPLACEZ*   
Si un modèle du même nom existe déjà dans la base de données et le schéma spécifiés, le modèle existant est remplacé. Vous ne pouvez remplacer un modèle que par un nouveau modèle qui définit le même type d'opération, par exemple COPY. Vous devez disposer des privilèges nécessaires pour remplacer un modèle.

*database\$1name*  
(Facultatif) Nom de la base de données dans laquelle le modèle sera créé. S'il n'est pas spécifié, le modèle est créé dans la base de données actuelle.  
Si la base de données ou le schéma n'existe pas, le modèle n'est pas créé et l'instruction renvoie une erreur. Vous ne pouvez pas créer de modèles dans les bases de données système `template0``template1`,`padb_harvest`, ou`sys:internal`.

*nom\$1schéma*  
(Facultatif) Nom du schéma dans lequel le modèle sera créé. S'il n'est pas spécifié, le modèle est créé dans le schéma actuel.  
Si un nom de schéma est donné, le nouveau modèle est créé dans ce schéma (en supposant que le créateur ait accès au schéma). Le nom du modèle doit être un nom unique pour ce schéma.

*nom\$1modèle*  
Nom du modèle à créer. Le nom du modèle peut éventuellement être qualifié par le nom de la base de données et du schéma. Dans l'exemple suivant, le nom de la base de données est`demo_database`, le nom du schéma est `demo_schema` et le nom du modèle est`test`. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).  

```
CREATE TEMPLATE demo_database.demo_schema.test FOR COPY AS CSV;
```

COPY  
Spécifie le type de commande Redshift pour lequel le modèle est créé. Actuellement, seule la commande COPY est prise en charge.

[[FORMAT] [AS] format de *données]*   
Ce paramètre est facultatif. Ceci indique le format de données pour les opérations COPY.

[*paramètre* [argument]]  
Tout paramètre valide pour la commande redshift spécifiée.  
Par exemple, les modèles pour la commande COPY peuvent inclure :  
+ [Paramètres du format de données](copy-parameters-data-format.md)
+ [Paramètres de compression de fichier](copy-parameters-file-compression.md)
+ [Paramètres de conversion de données](copy-parameters-data-conversion.md)
+ [Opérations de chargement de données](copy-parameters-data-load.md)
Pour une liste complète des paramètres pris en charge, voir [COPY](r_COPY.md) commande.

### Notes d’utilisation
<a name="create_template-usage-notes"></a>
+ Par défaut, tous les utilisateurs ont les privilèges CREATE et USAGE sur le schéma PUBLIC. Pour interdire aux utilisateurs de créer des objets dans le schéma PUBLIC d’une base de données, utilisez la commande REVOKE pour supprimer ce privilège.
+ Lorsqu'un paramètre existe à la fois dans le modèle et dans la commande, le paramètre de commande est prioritaire.
+ Les modèles sont des objets de base de données et suivent les règles d'autorisation et de dénomination des objets Redshift standard. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).
+ Les modèles ne peuvent pas contenir de spécifications de fichier manifeste pour les [COPY](r_COPY.md) commandes.

### Limitations
<a name="create_template-limitations"></a>
+ Au moins un paramètre doit être spécifié lors de la création d'un modèle.
+ Paramètres exclus : les paramètres spécifiques à la commande tels que les chemins source, les tables cibles, les informations d'autorisation et les spécifications des fichiers manifestes ne peuvent pas être inclus dans les modèles. Ces paramètres doivent être spécifiés dans la commande elle-même.
+ Nombre maximum de modèles par cluster : vous pouvez créer un maximum de 1 000 modèles par cluster. Cette limite s'applique au nombre total de modèles dans l'ensemble des bases de données et des schémas du cluster.
+ Références entre bases de données : les modèles ne peuvent pas être référencés entre les bases de données.
+ Partage de données : les modèles ne peuvent pas être inclus dans les partages de données. Les modèles doivent être créés séparément dans chaque cluster où ils sont nécessaires.

## Exemples
<a name="r_CREATE_TEMPLATE-examples"></a>

L'exemple suivant crée un modèle pour la commande COPY 

```
CREATE TEMPLATE test_schema.demo_template
FOR COPY
AS
FORMAT JSON 'auto'
NULL AS ''
MAXERROR 100;
```

Utilisez [AFFICHER LE MODÈLE](r_SHOW_TEMPLATE.md) pour obtenir la définition du modèle :

```
SHOW TEMPLATE test_schema.demo_template;
CREATE OR REPLACE TEMPLATE dev.test_schema.demo_template FOR COPY AS FORMAT AS JSON 'auto' NULL '' MAXERROR 100;
```

 Interrogez la vue [MODÈLE SYS\$1REDSHIFT\$1](SYS_REDSHIFT_TEMPLATE.md) système pour obtenir plus de détails sur un modèle. 

```
SELECT * FROM SYS_REDSHIFT_TEMPLATE;

database_name | schema_name | template_name | template_type |        create_time         |     last_modified_time     | owner_id | last_modified_by | template_parameters 
---------------+-------------+---------------+---------------+----------------------------+----------------------------+----------+------------------+---------------------
 dev           | test_schema | demo_template |             1 | 2025-12-17 20:06:01.944171 | 2025-12-17 20:06:01.944171 |        1 |                1 | {
    "JSON": "auto",
    "MAXERROR": 100,
    "NULL": ""
}
```

# CREATE USER
<a name="r_CREATE_USER"></a>

Crée un nouvel utilisateur de base de données. Les utilisateurs de la base de données peuvent extraire des données, exécuter des commandes et effectuer d’autres actions dans une base de données, en fonction de leurs privilèges et de leurs rôles. Vous devez être un super-utilisateur de la base de données pour exécuter cette commande.

## Privilèges requis
<a name="r_CREATE_USER-privileges"></a>

Les privilèges suivants sont requis pour CREATE USER :
+ Superuser
+ Utilisateurs disposant du privilège CREATE USER

## Syntaxe
<a name="r_CREATE_USER-synopsis"></a>

```
CREATE USER name [ WITH ]
PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ option [ ... ] ]

where option can be:

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| IN GROUP groupname [, ... ]
| VALID UNTIL 'abstime'
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit
| EXTERNALID external_id
```

## Parameters
<a name="r_CREATE_USER-parameters"></a>

 *nom*   
Nom de l’utilisateur créer. Le nom d’utilisateur ne peut pas être `PUBLIC`. Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md).

WITH  
Mot-clé facultatif. WITH est ignoré par Amazon Redshift

PASSWORD \$1 ’*password*’ \$1 ’*md5hash*’ \$1 ’*sha256hash*’ \$1 DISABLE \$1  
Définit le mot de passe de l’utilisateur.   
Par défaut, les utilisateurs peuvent modifier leurs propres mots de passe, sauf si le mot de passe est désactivé. Pour désactiver le mot de passe d’un utilisateur, spécifiez DISABLE. Lorsque le mot de passe d'un utilisateur est désactivé, il est supprimé du système et l'utilisateur ne peut se connecter qu'à l'aide d'informations d'identification utilisateur temporaires Gestion des identités et des accès AWS (IAM). Pour plus d’informations, consultez [Utilisation de l’authentification IAM pour générer des informations d’identification de l’utilisateur de base de données](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html). Seul un super-utilisateur peut activer ou désactiver des mots de passe. Vous ne pouvez pas désactiver le mot de passe d’un super-utilisateur. Pour activer un mot de passe, exécutez [ALTER USER](r_ALTER_USER.md) et spécifiez un mot de passe.  
Vous pouvez spécifier le mot de passe en texte clair, sous forme de chaîne de MD5 hachage ou de chaîne de SHA256 hachage.   
 Lorsque vous lancez un nouveau cluster à l'aide de l'API AWS Management Console AWS CLI, ou Amazon Redshift, vous devez fournir un mot de passe en texte clair pour l'utilisateur initial de la base de données. Vous pourrez changer le mot de passe plus tard en utilisant [ALTER USER](r_ALTER_USER.md). 
Pour le texte clair, le mot de passe doit respecter les contraintes suivantes :  
+ Sa longueur doit être comprise entre 8 et 64 caractères.
+ Il doit contenir au moins une lettre majuscule, une lettre minuscule et un nombre.
+ Il peut s’agir de n’importe quel caractère ASCII avec les codes ASCII 33 à 126, à l’exception des guillemets simples (’), des guillemets doubles ("), de \$1, / ou @.
Comme alternative plus sûre à la transmission du paramètre de mot de passe CREATE USER sous forme de texte clair, vous pouvez spécifier le MD5 hachage d'une chaîne incluant le mot de passe et le nom d'utilisateur.   
Lorsque vous spécifiez une chaîne de MD5 hachage, la commande CREATE USER vérifie s'il s'agit d'une chaîne de MD5 hachage valide, mais elle ne valide pas la partie mot de passe de la chaîne. Dans ce cas, il est possible de créer un mot de passe, tel qu’une chaîne vide, que vous ne pouvez pas utiliser pour vous connecter à la base de données.
Pour définir un MD5 mot de passe, procédez comme suit :   

1. Concaténez le nom d’utilisateur et le mot de passe. 

   Par exemple, pour le mot de passe `ez` et l’utilisateur `user1`, la chaîne concaténée est `ezuser1`. 

1. Convertissez la chaîne concaténée en une chaîne de hachage de 32 MD5 caractères. Vous pouvez utiliser n'importe quel MD5 utilitaire pour créer la chaîne de hachage. L'exemple suivant utilise Amazon Redshift [MD5 fonction](r_MD5.md) et l'opérateur de concaténation (\$1\$1) pour renvoyer une chaîne de hachage de 32 caractères. MD5 

   ```
   select md5('ez' || 'user1');
                           
   md5
   --------------------------------
   153c434b4b77c89e6b94f12c5393af5b
   ```

1. *Concaténez « `md5` » devant la chaîne de hachage et fournissez la chaîne concaténée comme argument MD5 md5hash.*

   ```
   create user user1 password 'md5153c434b4b77c89e6b94f12c5393af5b';
   ```

1. Connectez-vous à la base de données à l’aide des informations d’identification. 

   Pour cet exemple, connectez-vous en tant que `user1` avec le mot de passe `ez`. 
Une autre alternative sécurisée consiste à spécifier un hachage SHA-256 d’une chaîne de mots de passe. Vous pouvez également fournir votre propre digest SHA-256 et un salt de 256 bits valides utilisés pour créer le digest.  
+ Digest : résultat d’une fonction de hachage.
+ Salt : données générées de manière aléatoire combinées au mot de passe pour aider à réduire les modèles dans le résultat de la fonction de hachage.

```
'sha256|Mypassword'
```

```
'sha256|digest|256-bit-salt'
```
Dans l’exemple suivant, Amazon Redshift génère et gère le salt.   

```
CREATE USER admin PASSWORD 'sha256|Mypassword1';
```
Dans l’exemple suivant, un digest SHA-256 valide et un salt de 256 bits utilisés pour créer le digest sont fournis.  
Pour spécifier un mot de passe et le hacher avec votre propre salt, procédez comme suit :  

1. Créez un salt de 256 bits. Vous pouvez obtenir un salt en utilisant n’importe quel générateur de chaînes hexadécimales pour générer une chaîne de 64 caractères. Pour cet exemple, le salt est `c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6`. 

1.  Utilisez la fonction FROM\$1HEX pour convertir votre salt en binaire. Cela est dû au fait que la SHA2 fonction nécessite la représentation binaire du sel. Observez l’instruction suivante. 

   ```
   SELECT FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6');
   ```

1.  Utilisez la fonction CONCAT pour ajouter votre salt à votre mot de passe. Pour cet exemple, le mot de passe est `Mypassword1`. Observez l’instruction suivante. 

   ```
   SELECT CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6'));
   ```

1. Utilisez cette SHA2 fonction pour créer un résumé à partir de votre combinaison de mot de passe et de sel. Observez l’instruction suivante.

   ```
   SELECT SHA2(CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6')), 0);
   ```

1.  À l’aide du récapitulatif et du salt des étapes précédentes, créez l’utilisateur. Observez l’instruction suivante. 

   ```
   CREATE USER admin PASSWORD 'sha256|821708135fcc42eb3afda85286dee0ed15c2c461d000291609f77eb113073ec2|c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6';
   ```

1. Connectez-vous à la base de données à l’aide des informations d’identification.

    Pour cet exemple, connectez-vous en tant que `admin` avec le mot de passe `Mypassword1`.
Si vous définissez un mot de passe en texte brut sans spécifier la fonction de hachage, un MD5 résumé est généré en utilisant le nom d'utilisateur comme sel. 

CREATEDB \$1 NOCREATEDB   
L’option CREATEDB permet au nouvel utilisateur de créer des bases de données. La valeur par défaut est NOCREATEDB.

CREATEUSER \$1 NOCREATEUSER   
L’option CREATEUSER crée un super-utilisateur avec tous les privilèges de base de données, y compris CREATE USER. La valeur par défaut est NOCREATEUSER. Pour plus d'informations, consultez [Super-utilisateurs](r_superusers.md).

SYSLOG ACCESS \$1 RESTRICTED \$1 UNRESTRICTED \$1  <a name="create-user-syslog-access"></a>
Clause qui spécifie le niveau d’accès de l’utilisateur sur les tableaux système et les vues Amazon Redshift.   
Les utilisateurs ordinaires disposant de l’autorisation SYSLOG ACCESS RESTRICTED peuvent voir uniquement les lignes qu’ils ont générées dans les tables et vues systèmes visibles par l’utilisateur. La valeur par défaut est RESTRICTED.   
Les utilisateurs standards ayant l’autorisation SYSLOG ACCESS UNRESTRICTED peuvent voir toutes les lignes des tables et vues systèmes visibles par l’utilisateur, y compris les lignes générées par un autre utilisateur. UNRESTRICTED ne permet pas à un utilisateur standard d’avoir accès aux tableaux visibles du super-utilisateur. Seuls les super-utilisateurs peuvent afficher les données des tableaux visibles des super-utilisateurs.   
Accorder à un utilisateur un accès illimité aux tableaux système permet à celui-ci de voir les données générées par d’autres utilisateurs. Par exemple, STL\$1QUERY et STL\$1QUERYTEXT contiennent le texte complet des instructions INSERT, UPDATE et DELETE, qui peuvent contenir des données confidentielles générées par l’utilisateur. 
Toutes les lignes de SVV\$1TRANSACTIONS sont visibles de tous les utilisateurs.   
Pour plus d'informations, consultez [Visibilité des données dans les tables et vues système](cm_chap_system-tables.md#c_visibility-of-data).

IN GROUP *nom\$1groupe*   
Spécifie le nom d’un groupe existant auquel l’utilisateur appartient. Plusieurs noms de groupe peuvent être répertoriés.

VALID UNTIL *heure\$1absolue*   
L’option VALID UNTIL définit une heure absolue au-delà de laquelle le mot de passe de l’utilisateur n’est plus valide. Par défaut, le mot de passe n’a pas de limite de temps.

CONNECTION LIMIT \$1 *limite* \$1 UNLIMITED \$1   
Le nombre maximum de connexions à la base de données que l’utilisateur est autorisé à ouvrir simultanément. La limite se s’applique pas aux super-utilisateurs. Utilisez le mot-clé UNLIMITED pour autoriser le nombre maximum de connexions simultanées. Une limite sur le nombre de connexions pour chaque base de données peut également s’appliquer. Pour plus d'informations, consultez [CREATE DATABASE](r_CREATE_DATABASE.md). La valeur par défaut est UNLIMITED. Pour afficher les connexions en cours, interrogez la vue système [STV\$1SESSIONS](r_STV_SESSIONS.md).  
Si les deux limites de connexion (utilisateurs et base de données) s’appliquent, un emplacement de connexion inutilisé situé entre les deux limites doit également être disponible lorsqu’un utilisateur tente de se connecter.

SESSION TIMEOUT *limit*  
Durée maximale en secondes pendant laquelle une séance reste inactive ou en veille. La plage est comprise entre 60 secondes (une minute) et 1 728 000 secondes (20 jours). Si aucun délai d’expiration de séance n’est défini pour l’utilisateur, le paramètre de cluster s’applique. Pour plus d’informations, consultez [Quotas et limites dans Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html) dans le *Guide de gestion Amazon Redshift*.  
Lorsque vous définissez le délai d’expiration de séance, il s’applique uniquement aux nouvelles séances.  
Pour afficher des informations sur les séances utilisateur actives, y compris l’heure de début, le nom d’utilisateur et le délai d’expiration de la séance, interrogez la vue système [STV\$1SESSIONS](r_STV_SESSIONS.md). Pour afficher des informations sur l’historique des séances utilisateur, interrogez la vue [STL\$1SESSIONS](r_STL_SESSIONS.md). Pour récupérer des informations sur les utilisateurs de la base de données, y compris les valeurs de délai d’expiration de séance, interrogez la vue [SVL\$1USER\$1INFO](r_SVL_USER_INFO.md).

EXTERNALID *external\$1id*  
Identificateur de l’utilisateur associé à un fournisseur d’identité. Le mot de passe de l’utilisateur doit être désactivé. Pour plus d’informations, consultez [Fédération de fournisseur d’identité natif pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

### Notes d’utilisation
<a name="create_user-usage-notes"></a>

Par défaut, tous les utilisateurs ont les privilèges CREATE et USAGE sur le schéma PUBLIC. Pour interdire aux utilisateurs de créer des objets dans le schéma PUBLIC d’une base de données, utilisez la commande REVOKE pour supprimer ce privilège.

Lorsque vous utilisez l’authentification IAM pour créer des informations d’identification de l’utilisateur de base de données, il se peut que vous vouliez créer un super-utilisateur capable de se connecter en utilisant seulement des informations d’identification temporaires. Vous ne pouvez pas désactiver le mot de passe d'un superutilisateur, mais vous pouvez créer un mot de passe inconnu à l'aide d'une chaîne de MD5 hachage générée aléatoirement.

```
create user iam_superuser password 'md5A1234567890123456780123456789012' createuser;
```

Le cas d’un *nom d’utilisateur* entre guillemets doubles est toujours conservé quel que soit le réglage de l’option de configuration `enable_case_sensitive_identifier`. Pour plus d'informations, consultez [enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md).

## Exemples
<a name="r_CREATE_USER-examples"></a>

La commande suivante crée un utilisateur nommé dbuser, avec le mot de passe « abcD1234 », des privilèges de création de base de données et un nombre de connexions limité à 30.

```
create user dbuser with password 'abcD1234' createdb connection limit 30;
```

 Interrogez la table de catalogue PG\$1USER\$1INFO pour afficher les détails relatifs à un utilisateur de base de données. 

```
select * from pg_user_info;
         
 usename   | usesysid | usecreatedb | usesuper | usecatupd | passwd   | valuntil | useconfig | useconnlimit
-----------+----------+-------------+----------+-----------+----------+----------+-----------+-------------
 rdsdb     |        1 | true        | true     | true      | ******** | infinity |           |
 adminuser |      100 | true        | true     | false     | ******** |          |           | UNLIMITED
 dbuser    |      102 | true        | false    | false     | ******** |          |           | 30
```

Dans l’exemple suivant, le mot de passe du compte est valide jusqu’au 10 juin 2017.

```
create user dbuser with password 'abcD1234' valid until '2017-06-10';
```

 L’exemple suivant crée un utilisateur avec un mot de passe sensible à la casse qui contient des caractères spéciaux.

```
create user newman with password '@AbC4321!';
```

 Pour utiliser une barre oblique inverse (« \$1 ») dans votre MD5 mot de passe, évitez la barre oblique inverse en ajoutant une barre oblique inverse dans votre chaîne source. L’exemple suivant crée un utilisateur nommé `slashpass` avec une seule barre oblique inverse («`\`») comme mot de passe. 

```
select md5('\\'||'slashpass');
         
md5
--------------------------------
0c983d1a624280812631c5389e60d48c
```

Créez un utilisateur avec le mot de passe md5.

```
create user slashpass password 'md50c983d1a624280812631c5389e60d48c';
```

L’exemple suivant crée un utilisateur nommé `dbuser` avec un délai d’inactivité de la séance défini sur 120 secondes.

```
CREATE USER dbuser password 'abcD1234' SESSION TIMEOUT 120;
```

L’exemple suivant crée un utilisateur nommé `bob`. L’espace de noms est `myco_aad`. Il s’agit uniquement d’un exemple. Pour exécuter la commande avec succès, vous devez disposer d’un fournisseur d’identité enregistré. Pour plus d’informations, consultez [Fédération de fournisseur d’identité natif pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html).

```
CREATE USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

# CREATE VIEW
<a name="r_CREATE_VIEW"></a>

Crée une vue dans une base de données. La vue n’est pas physiquement matérialisée ; la requête qui définit la vue est exécutée chaque fois que la vue est référencée dans une requête. Pour créer une vue avec une table externe, incluez la clause WITH NO SCHEMA BINDING.

Pour créer une vue standard, vous avez besoin d’un accès aux tables sous-jacentes ou à des vues sous-jacentes. Pour interroger une vue standard, vous devez sélectionner des autorisations pour la vue elle-même, mais vous ne devez pas en sélectionner pour les tables sous-jacentes. Dans le cas où vous créez une vue qui fait référence à une table ou à une vue d’un autre schéma, ou si vous créez une vue qui fait référence à une vue matérialisée, vous aurez peut-être besoin d’autorisations d’utilisation. Pour interroger une vue à liaison tardive, vous devez sélectionner des autorisations pour la vue elle-même. Vous devez également vous assurer que le propriétaire de la vue à liaison tardive a des autorisations select pour les objets référencés (tables, vues ou fonctions définies par l’utilisateur). Pour plus d’informations sur les vues à liaison tardive, consultez [Notes d’utilisation](#r_CREATE_VIEW_usage_notes).

## Autorisations requises
<a name="r_CREATE_VIEW-privileges"></a>

Pour utiliser CREATE VIEW, l’une des autorisations suivantes est requise.
+ Pour créer une vue avec CREATE [ OR REPLACE ] VIEW :
  + Superuser
  + Utilisateurs disposant de l’autorisation CREATE [ REPLACE ] VIEW
+ Pour remplacer une vue existante à l’aide de CREATE OR REPLACE VIEW :
  + Superuser
  + Utilisateurs disposant de l’autorisation CREATE [ OR REPLACE ] VIEW
  + Propriétaire de la vue

Si un utilisateur souhaite accéder à une vue qui intègre une fonction définie par l’utilisateur, il doit disposer de l’autorisation EXECUTE sur cette fonction.

## Syntaxe
<a name="r_CREATE_VIEW-synopsis"></a>

```
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query
[ WITH NO SCHEMA BINDING ]
```

## Parameters
<a name="r_CREATE_VIEW-parameters"></a>

OR REPLACE   
Si une vue du même nom existe déjà, la vue est remplacée. Vous pouvez remplacer uniquement par une nouvelle requête qui génère le même ensemble de colonnes, à l’aide des mêmes noms de colonne et des mêmes types de données. CREATE OR REPLACE VIEW verrouille l’affichage pour les lectures et les écritures jusqu’à la fin de l’opération.  
Lorsqu’une vue est remplacée, ses autres propriétés telles que la propriété et les privilèges accordés sont conservées. 

 *nom*   
Nom de la vue. Si un nom de schéma est fourni (tel que `myschema.myview`), la vue est créée à l’aide du schéma spécifié. Sinon, la vue est créée dans le schéma en cours. Le nom de la vue doit être différent du nom de toute autre vue ou table du même schéma.   
Si vous spécifiez un nom de vue commençant par « \$1 », la vue est créée comme vue temporaire qui n’est visible que dans la séance en cours.  
Pour plus d’informations sur les noms valides, consultez [Noms et identificateurs](r_names.md). Vous ne pouvez pas créer de tables ni de vues dans les bases de données système template0, template1, padb\$1harvest ou sys:internal.

 *column\$1name*   
Liste facultative des noms à utiliser pour les colonnes de la vue. Si aucun nom de colonne n’est fourni, les noms de colonnes sont dérivés de la requête. Le nombre maximal de colonnes que vous pouvez définir dans une seule vue est de 1 600.

 *query*   
Requête (sous la forme d’une instruction SELECT) qui est analysée comme table. La table définit les colonnes et les lignes de la vue. 

 WITH NO SCHEMA BINDING   
Clause qui spécifie que la vue n’est pas liée aux objets de base de données sous-jacents, tels que les tables et les fonctions définies par l’utilisateur. Par conséquent, il n’y a aucune dépendance entre la vue et les objets auxquels elle fait référence. Vous pouvez créer une vue même si les objets référencés n’existent pas. Parce qu’il n’y a aucune dépendance, vous pouvez supprimer ou modifier un objet référencé sans affecter la vue. Amazon Redshift ne vérifie pas les dépendances tant que la vue n’est pas interrogée. Les expressions de table communes récursives (rCTE) ne sont pas prises en charge avec les vues à liaison tardive. Pour afficher les détails relatifs aux vues à liaison tardive, exécutez la fonction [PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS](PG_GET_LATE_BINDING_VIEW_COLS.md).  
Lorsque vous incluez la clause WITH NO SCHEMA BINDING, les tables et vues référencées dans l’instruction SELECT doivent être qualifiées par un nom de schéma. Le schéma doit exister lorsque la vue est créée, même si la table référencée n’existe pas. Par exemple, l’instruction suivante renvoie une erreur.   

```
create view myevent as select eventname from event
with no schema binding;
```
L’instruction suivante s’exécute avec succès.  

```
create view myevent as select eventname from public.event
with no schema binding;
```

**Note**  
Vous ne pouvez pas mettre à jour, insérer ou supprimer à partir d’une vue. 

## Notes d’utilisation
<a name="r_CREATE_VIEW_usage_notes"></a>



### Vues à liaison tardive
<a name="r_CREATE_VIEW_late-binding-views"></a>

Une vue à liaison tardive ne contrôle pas les objets de base de données sous-jacents, tels que les autres vues, tant que la vue n’est pas interrogée. En conséquence, vous pouvez supprimer ou modifier les objets sous-jacents sans supprimer la vue et la recréer. Si vous supprimez des objets sous-jacents, les requêtes à la vue à liaison tardive échoueront. Si la requête à la vue à liaison tardive fait référence à des colonnes de l’objet sous-jacent qui ne sont pas présentes, la requête échouera. 

 Si vous supprimez puis recréez une table ou une vue sous-jacente d’une vue à liaison tardive, le nouvel objet est créé avec des autorisations d’accès par défaut. Vous devrez peut-être accorder des autorisations sur les objets sous-jacents aux utilisateurs qui utiliseront la requête. 

Pour créer une vue à liaison tardive, incluez la clause WITH NO SCHEMA BINDING. L’exemple suivant crée une vue sans liaison de schéma. 

```
create view event_vw as select * from public.event
with no schema binding;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | eventname     | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

L’exemple suivant montre que vous pouvez modifier une table sous-jacente sans recréer la vue. 

```
alter table event rename column eventname to title;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | title         | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

Vous ne pouvez faire référence aux tables externes Amazon Redshift Spectrum que dans une vue à liaison tardive. Une application des vues à liaison tardive consiste à interroger les tables Amazon Redshift et Redshift Spectrum. Par exemple, vous pouvez utiliser la commande [UNLOAD](r_UNLOAD.md) pour archiver les données plus anciennes dans Amazon S3. Ensuite, créez une table externe Redshift Spectrum qui fait référence aux données sur Amazon S3 et créez une vue qui interroge les deux tables. L’exemple suivant utilise une clause UNION ALL pour joindre la table `SALES` Amazon Redshift et la table `SPECTRUM.SALES` Redshift Spectrum.

```
create view sales_vw as
select * from public.sales
union all
select * from spectrum.sales
with no schema binding;
```

Pour plus d’informations sur la création de tables externes Redshift Spectrum, y compris la table `SPECTRUM.SALES`, consultez [Mise en route avec Amazon Redshift Spectrum](c-getting-started-using-spectrum.md).

**Important**  
Lorsque vous créez une vue standard à partir d’une vue à liaison tardive, la définition de la vue standard contient la définition de la vue à liaison tardive au moment où la vue standard a été créée, y compris le propriétaire de cette vue à liaison tardive. Si vous apportez une modification à la vue à liaison tardive sous-jacente, ces modifications ne seront pas utilisées dans la vue standard tant que vous n’aurez pas recréé la vue standard. Par conséquent, lorsque la vue standard est interrogée, elle utilise toujours la définition de la vue à liaison tardive et le propriétaire de la vue à liaison tardive pour vérifier les autorisations au moment de la création de cette vue standard.

Pour mettre à jour la vue standard afin qu’elle fasse référence à la dernière définition de la vue à liaison tardive, exécutez CREATE OR REPLACE VIEW avec la définition de vue initiale que vous avez utilisée pour créer la vue standard.

Consultez l’exemple suivant de création d’une vue standard à partir d’une vue à liaison tardive.

```
create view sales_vw_lbv as 
select * from public.sales 
with no schema binding;

show view sales_vw_lbv;
                            Show View DDL statement
--------------------------------------------------------------------------------
 create view sales_vw_lbv as select * from public.sales with no schema binding;
(1 row)

create view sales_vw as 
select * from sales_vw_lbv;

show view sales_vw;
                                               Show View DDL statement
---------------------------------------------------------------------------------------------------------------------
 SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv;
(1 row)
```

Notez que la vue à liaison tardive, telle qu’indiquée dans l’instruction DDL pour la vue standard, est définie lors de la création de la vue standard et ne sera pas mise à jour avec les modifications que vous apporterez ultérieurement à la vue à liaison tardive.

## Exemples
<a name="r_CREATE_VIEW-examples"></a>

Les exemples de commandes utilisent un ensemble d’objets et de données appelé base de données *TICKIT*. Pour plus d’informations, consultez [Exemple de base de données](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

La commande suivante crée une vue nommée *myevent* à partir d’une table appelée EVENT. 

```
create view myevent as select eventname from event
where eventname = 'LeAnn Rimes';
```

La commande suivante crée une vue nommée* myuser* à partir d’une table appelée USERS. 

```
create view myuser as select lastname from users;
```

La commande suivante crée ou remplace une vue nommée* myuser* à partir d’une table appelée USERS. 

```
create or replace view myuser as select lastname from users;
```

L’exemple suivant crée une vue sans liaison de schéma. 

```
create view myevent as select eventname from public.event
with no schema binding;
```

# DEALLOCATE
<a name="r_DEALLOCATE"></a>

Libère une instruction préparée. 

## Syntaxe
<a name="r_DEALLOCATE-synopsis"></a>

```
DEALLOCATE [PREPARE] plan_name
```

## Parameters
<a name="r_DEALLOCATE-parameters"></a>

PREPARE   
Ce mot-clé est facultatif et est ignoré. 

 *nom\$1plan*   
Nom de l’instruction préparée à libérer. 

## Notes d’utilisation
<a name="r_DEALLOCATE_usage_notes"></a>

DEALLOCATE permet de libérer une requête SQL préparée précédemment. Si vous ne libérez pas explicitement une instruction préparée, elle est libérée lorsque la séance en cours se termine. Pour plus d’informations sur les instructions préparées, consultez [PREPARE](r_PREPARE.md).

## Voir aussi
<a name="r_DEALLOCATE-see-also"></a>

 [EXECUTE](r_EXECUTE.md), [PREPARE](r_PREPARE.md) 

# DECLARE
<a name="declare"></a>

Définit un nouveau curseur. Utilisez un curseur pour récupérer en même temps quelques lignes du jeu de résultats d’une requête plus grande. 

Lorsque la première ligne d’un curseur est extraite, le jeu complet de résultats est matérialisé sur le nœud principal, en mémoire ou sur disque, si nécessaire. En raison de l’impact négatif potentiel de l’utilisation de curseurs avec des ensembles de résultats volumineux sur les performances, nous recommandons autant que possible l’utilisation d’approches alternatives. Pour plus d'informations, consultez [Considérations relatives aux performances lors de l’utilisation de curseurs](#declare-performance).

Vous devez déclarer un curseur au sein d’un bloc de transaction. Un seul curseur à la fois peut être ouvert par séance. 

Pour plus d’informations, consultez [FETCH](fetch.md), [CLOSE](close.md).

## Syntaxe
<a name="declare-synopsis"></a>

```
DECLARE cursor_name CURSOR FOR query
```

## Parameters
<a name="declare-parameters"></a>

*nom\$1curseur*   
Nom du nouveau schéma. 

 *query*   
Instruction SELECT qui remplit le curseur.

## Notes d’utilisation sur DECLARE CURSOR
<a name="declare-usage"></a>

Si votre application cliente utilise une connexion ODBC et que votre requête crée un ensemble de résultats trop volumineux pour contenir en mémoire, vous pouvez diffuser l’ensemble de résultats sur votre application cliente à l’aide d’un curseur. Lorsque vous utilisez un curseur, l’ensemble de résultats est matérialisé sur le nœud principal et le client peut ensuite extraire les résultats de façon incrémentielle. 

**Note**  
Pour activer les curseurs dans ODBC pour Microsoft Windows, activez l’option **Use Declare/Fetch** (Utiliser Declare/Fetch) dans le DSN ODBC que vous utilisez pour Amazon Redshift. Nous recommandons de définir la taille du cache ODBC, à l’aide du champ **Cache Size (Taille du cache)** de la boîte de dialogue ODBC DSN, avec la valeur 4 000 ou plus sur les clusters à plusieurs nœuds afin de réduire les allers et retours. Sur un cluster à un seul nœud, définissez Cache Size sur 1 000.

En raison de l’impact négatif potentiel de l’utilisation de curseurs sur les performances, nous recommandons d’utiliser les autres approches autant que possible. Pour plus d'informations, consultez [Considérations relatives aux performances lors de l’utilisation de curseurs](#declare-performance).

Les curseurs Amazon Redshift sont pris en charge avec les limitations suivantes :
+ Un seul curseur à la fois peut être ouvert par séance. 
+ Les curseurs doivent être utilisés au sein d’une transaction (BEGIN … END). 
+ La taille maximale cumulée du jeu de résultats pour tous les curseurs est limitée en fonction du type de nœud du cluster. Si vous avez besoin de jeux de résultats plus larges, vous pouvez redimensionner avec une configuration de nœud XL ou 8XL.

  Pour plus d'informations, consultez [Contraintes de curseur](#declare-constraints). 

## Contraintes de curseur
<a name="declare-constraints"></a>

Lorsque la première ligne d’un curseur est extraite, le jeu complet de résultats est matérialisé sur le nœud principal. Si le jeu de résultats ne contient pas en mémoire, il est écrit sur le disque en fonction des besoins. Pour protéger l’intégrité du nœud principal, Amazon Redshift applique les contraintes sur la taille de tous les jeux de résultats du curseur, en fonction du type de nœud du cluster.

Le tableau suivant illustre la taille maximale du jeu de résultats pour chaque type de nœud de cluster. Les tailles maximales des jeux de résultats sont exprimés en mégaoctets.


| Type de nœud | Ensemble de résultats maximal par cluster (Mo) | 
| --- | --- | 
|   Nœuds multiples DC2 Large   | 192 000 | 
|   Nœud simple DC2 Large   | 8 000 | 
|   DC2 Nœuds multiples 8XL   | 3 200 000 | 
|   RA3 Nœuds multiples 16XL   | 14 400 000 | 
|   RA3 Nœuds multiples 4XL   | 3 200 000 | 
|   RA3 Nœuds multiples XLPLUS   | 1 000 000 | 
|   RA3 Nœud unique XLPLUS   | 64 000 | 
|   RA3 Nœuds multiples de grande taille   | 240 000 | 
|   RA3 Nœud unique de grande taille   | 8 000 | 
| Amazon Redshift sans serveur | 150 000 | 

Pour afficher la configuration de curseur active pour un cluster, interrogez la table système [STV\$1CURSOR\$1CONFIGURATION](r_STV_CURSOR_CONFIGURATION.md) en tant que super-utilisateur. Pour afficher l’état des curseurs actifs, interrogez la table système [STV\$1ACTIVE\$1CURSORS](r_STV_ACTIVE_CURSORS.md). Seules les lignes des curseurs d’un utilisateur sont visibles de l’utilisateur, mais un super-utilisateur peut afficher tous les curseurs.

## Considérations relatives aux performances lors de l’utilisation de curseurs
<a name="declare-performance"></a>

Comme les curseurs matérialisent la totalité de l’ensemble de résultats sur le nœud principal avant de commencer à renvoyer les résultats au client, l’utilisation de curseurs avec des ensembles de résultats très volumineux peut avoir un impact négatif sur les performances. Nous vous déconseillons vivement l’utilisation de curseurs avec des jeux de résultats très volumineux. Dans certains cas, comme lorsque votre application utilise une connexion ODBC, les curseurs peuvent être la seule solution possible. Si possible, nous recommandons d’utiliser ces alternatives :
+ Utilisez [UNLOAD](r_UNLOAD.md) pour exporter une grande table. Lorsque vous utilisez UNLOAD, les nœuds de calcul fonctionnent en parallèle pour transférer directement les données vers les fichiers de données sur Amazon Simple Storage Service. Pour plus d'informations, consultez [Déchargement de données dans Amazon Redshift](c_unloading_data.md). 
+ Définissez le paramètre JDBC de taille d’extraction dans votre application cliente. Si vous utilisez une connexion JDBC et que vous rencontrez des out-of-memory erreurs côté client, vous pouvez permettre à votre client de récupérer des ensembles de résultats par lots plus petits en définissant le paramètre JDBC fetch size. Pour de plus amples informations, veuillez consulter [Définition du paramètre de taille d’extraction JDBC](set-the-JDBC-fetch-size-parameter.md). 

## Exemples DECLARE CURSOR
<a name="declare-example"></a>

L’exemple suivant déclare un curseur nommé LOLLAPALOOZA pour sélectionner les informations sur les ventes pour l’événement Lollapalooza, puis récupère les lignes de l’ensemble de résultats à l’aide du curseur :

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

L’exemple suivant passe en boucle sur un curseur contenant tous les résultats d’une table :

```
CREATE TABLE tbl_1 (a int, b int);
INSERT INTO tbl_1 values (1, 2),(3, 4);

CREATE OR REPLACE PROCEDURE sp_cursor_loop() AS $$
DECLARE
    target record;
    curs1 cursor for select * from tbl_1;
BEGIN
    OPEN curs1;
    LOOP
        fetch curs1 into target;
        exit when not found;
        RAISE INFO 'a %', target.a;
    END LOOP;
    CLOSE curs1;
END;
$$ LANGUAGE plpgsql;

CALL sp_cursor_loop();
         
SELECT message 
   from svl_stored_proc_messages 
   where querytxt like 'CALL sp_cursor_loop()%';
         
  message
----------
      a 1
      a 3
```

# DELETE
<a name="r_DELETE"></a>

Supprime les lignes des tables.

**Note**  
La taille maximale d’une instruction SQL est de 16 Mo.

## Syntaxe
<a name="r_DELETE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
DELETE [ FROM ] { table_name | materialized_view_name }
    [ { USING } table_name, ... ]
    [ WHERE condition ]
```

## Parameters
<a name="r_DELETE-parameters"></a>

Clause WITH  
Clause facultative qui en spécifie une ou plusieurs *common-table-expressions*. Consultez [Clause WITH](r_WITH_clause.md). 

FROM  
Le mot-clé FROM est facultatif, sauf si la clause USING est spécifiée. Les instructions `delete from event;` et `delete event;` sont des opérations équivalentes qui suppriment toutes les lignes de la table EVENT.  
Pour supprimer toutes les lignes d’une table, [TRUNCATE](r_TRUNCATE.md) la table. TRUNCATE est beaucoup plus efficace que DELETE et ne requiert ni opération VACUUM ni opération ANALYZE. Cependant, sachez que TRUNCATE valide la transaction dans laquelle l’opération est exécutée.

 *table\$1name*   
Table temporaire ou permanente. Seul le propriétaire de la table ou un utilisateur avec le privilège DELETE sur la table peut supprimer des lignes de la table.  
Pensez à utiliser la commande TRUNCATE pour les opérations de suppression rapides non qualifiées sur les tables volumineuses ; consultez [TRUNCATE](r_TRUNCATE.md).  
Après avoir supprimé un grand nombre de lignes d’une table :  
+ Exécuter une opération VACUUM sur la table pour récupérer de l’espace de stockage et retrier les lignes.
+ Analysez la table pour mettre à jour les statistiques pour le planificateur de requête.

 *materialized\$1view\$1name*   
Vue matérialisée. L’instruction DELETE fonctionne sur une vue matérialisée utilisée pour [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md). Seul le propriétaire de la vue matérialisée ou un utilisateur disposant du privilège DELETE sur la vue matérialisée peut y supprimer des lignes.  
Vous ne pouvez pas exécuter DELETE sur une vue matérialisée pour l’ingestion en streaming avec une politique de sécurité au niveau des lignes (RLS) qui ne dispose pas de l’autorisation IGNORE RLS accordée à l’utilisateur. Il existe une exception à cette règle : si RLS IGNORE est accordé à l’utilisateur exécutant DELETE, il s’exécute correctement. Pour plus d’informations, consultez [Propriété et gestion des politiques RLS](https://docs.aws.amazon.com/redshift/latest/dg/t_rls_ownership.html).

USING *nom\$1table*, ...  
Le mot-clé USING permet d’introduire une liste de tables lorsque des tables supplémentaires sont référencées dans la condition de la clause WHERE. Par exemple, l’instruction suivante supprime toutes les lignes de la table EVENT qui satisfont à la condition de jointure sur les tables EVENT et SALES. La table SALES doit être explicitement nommée dans la liste FROM :  

```
delete from event using sales where event.eventid=sales.eventid;
```
Si vous répétez le nom de la table cible dans la clause USING, l’opération DELETE exécute une jointure réflexive. Vous pouvez utiliser une sous-requête dans la clause WHERE au lieu de la syntaxe USING comme alternative à l’écriture de la même requête.

WHERE *condition*   
Clause facultative qui limite la suppression de lignes à celles qui correspondent à la condition. Par exemple, la condition peut être une restriction sur une colonne, une condition de jointure ou une condition basée sur le résultat d’une requête. La requête peut faire référence à des tables autres que la cible de la commande DELETE. Par exemple :  

```
delete from t1
where col1 in(select col2 from t2);
```
Si aucune condition n’est spécifiée, toutes les lignes de la table sont supprimées.

## Notes d’utilisation
<a name="r_DELETE-usage"></a>
+ Les opérations DELETE sont verrouillées exclusivement lorsqu’elles sont exécutées sur des vues matérialisées en streaming Amazon Redshift associées à l’un des éléments suivants :
  +  Un flux de données Amazon Kinesis 
  +  Une rubrique Amazon Managed Streaming pour Apache Kafka 
  +  Un flux externe pris en charge, tel qu’une rubrique Confluent Cloud Kafka 

  Pour plus d’informations, consultez [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md).

## Exemples
<a name="r_DELETE-examples"></a>

Supprimez toutes les lignes de la table CATEGORY :

```
delete from category;
```

Supprimez des lignes avec des valeurs CATID comprises entre 0 et 9 de la table CATEGORY :

```
delete from category
where catid between 0 and 9;
```

Supprimez des lignes de la table LISTING dont les valeurs SELLERID n’existent pas dans la table SALES :

```
delete from listing
where listing.sellerid not in(select sales.sellerid from sales);
```

Les deux requêtes suivantes suppriment une ligne de la table CATEGORY, en fonction d’une jointure avec la table EVENT et d’une restriction supplémentaire sur la colonne CATID :

```
delete from category
using event
where event.catid=category.catid and category.catid=9;
```

```
delete from category
where catid in
(select category.catid from category, event
where category.catid=event.catid and category.catid=9);
```

La requête suivante supprime toutes les lignes de la vue matérialisée `mv_cities`. Le nom de la vue matérialisée ici est un exemple :

```
delete from mv_cities;
```

# DESC DATASHARE
<a name="r_DESC_DATASHARE"></a>

Affiche la liste des objets de base de données dans un datashare qui lui sont ajoutés à l’aide de ALTER DATASHARE. Amazon Redshift affiche les noms, les bases de données, les schémas et les types de tables, de vues et de fonctions. 

Des informations supplémentaires sur les objets d’unité de partage des données peuvent être trouvées en utilisant les vues système. Pour plus d’informations, consultez [SVV\$1DATASHARE\$1OBJECTS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARE_OBJECTS.html) et [SVV\$1DATASHARES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARES.html).

## Syntaxe
<a name="r_DESC_DATASHARE-synopsis"></a>

```
DESC DATASHARE datashare_name [ OF [ ACCOUNT account_id ] NAMESPACE namespace_guid ]
```

## Parameters
<a name="r_DESC_DATASHARE-parameters"></a>

 *datashare\$1name*   
Nom de l’unité de partage des données. 

NAMESPACE *namespace\$1guid*   
Valeur qui spécifie l’espace de noms utilisé par l’unité de partage des données. Lorsque vous exécutez DESC DATAHSARE en tant qu’administrateur de cluster consommateur, spécifiez le paramètre NAMESPACE pour afficher les unités de partage des données entrantes.

ACCOUNT *account\$1id*  
Valeur spécifiant le compte auquel l’unité de partage des données appartient.

## Notes d’utilisation
<a name="r_DESC_DATASHARE-usage"></a>

En tant qu'administrateur de compte client, lorsque vous exécutez DESC DATASHARE pour voir les partages de données entrants au sein du AWS compte, spécifiez l'option NAMESPACE. Lorsque vous exécutez DESC DATASHARE pour voir les partages de données entrants entre les AWS comptes, spécifiez les options ACCOUNT et NAMESPACE.

## Exemples
<a name="r_DESC_DATASHARE-examples"></a>

L’exemple suivant affiche les informations relatives aux unités de partage des données sortantes sur un cluster producteur.

```
DESC DATASHARE salesshare;

producer_account |          producer_namespace           | share_type  | share_name   | object_type |        object_name           |  include_new
-----------------+---------------------------------------+-------------+--------------+-------------+------------------------------+--------------
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | TABLE       | public.tickit_sales_redshift |
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | SCHEMA      | public                       |   t
```

L’exemple suivant affiche les informations relatives aux unités de partage des données entrantes sur un cluster producteur.

```
DESC DATASHARE salesshare of ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

 producer_account |          producer_namespace          | share_type | share_name | object_type |         object_name          |  include_new
------------------+--------------------------------------+------------+------------+-------------+------------------------------+--------------
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_sales_redshift |
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | schema      | public                       |
(2 rows)
```

# DESC IDENTITY PROVIDER
<a name="r_DESC_IDENTITY_PROVIDER"></a>

Affiche des informations sur un fournisseur d’identité. Seul un super-utilisateur peut décrire un fournisseur d’identité.

## Syntaxe
<a name="r_DESC_IDENTITY_PROVIDER-synopsis"></a>

```
DESC IDENTITY PROVIDER identity_provider_name
```

## Parameters
<a name="r_DESC_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
Nom du fournisseur d’identité.

## Exemple
<a name="r_DESC_IDENTITY_PROVIDER-examples"></a>

L’exemple suivant affiche des informations sur le fournisseur d’identité.

```
DESC IDENTITY PROVIDER azure_idp;
```

Exemple de sortie.

```
  uid   |   name    | type  |              instanceid              | namespc |                                                                                                                                                 params                                                                                                                                                  | enabled
--------+-----------+-------+--------------------------------------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------
 126692 | azure_idp | azure | e40d4bb2-7670-44ae-bfb8-5db013221d73 | aad     | {"issuer":"https://login.microsoftonline.com/e40d4bb2-7670-44ae-bfb8-5db013221d73/v2.0", "client_id":"871c010f-5e61-4fb1-83ac-98610a7e9110", "client_secret":'', "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift", "https://analysis.windows.net/powerbi/connector/AWSRDS"]} | t
(1 row)
```

# DETACH MASKING POLICY
<a name="r_DETACH_MASKING_POLICY"></a>

Détache une politique de masquage dynamique des données attachée à une colonne. Pour plus d’informations sur le masquage dynamique des données, consultez [Masquage dynamique des données](t_ddm.md).

Les super-utilisateurs et les utilisateurs ou les rôles disposant du rôle sys:secadmin peuvent détacher une politique de masquage.

## Syntaxe
<a name="r_DETACH_MASKING_POLICY-synopsis"></a>

```
DETACH MASKING POLICY
{
  policy_name ON table_name
  | database_name.policy_name ON database_name.schema_name.table_name
}
( output_column_names )
FROM { user_name | ROLE role_name | PUBLIC };
```

## Parameters
<a name="r_DETACH_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Nom de la politique de masquage à détacher.

database\$1name  
Nom de la base de données dans laquelle la politique et la relation sont créées. La politique et la relation doivent figurer dans la même base de données. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

nom\$1schéma  
Nom du schéma auquel appartient la relation.

 *table\$1name*   
Nom de la table depuis laquelle détacher la politique de masquage.

*output\$1column\$1names*   
Noms des colonnes auxquelles la politique de masquage était attachée.

*user\$1name*   
Nom de l’utilisateur auquel la politique de masquage était attachée.  
Vous ne pouvez définir qu’un seul user\$1name, role\$1name et PUBLIC dans une seule instruction DETACH MASKING POLICY.

*role\$1name*   
Nom du rôle auquel la politique de masquage était attachée.  
Vous ne pouvez définir qu’un seul user\$1name, role\$1name et PUBLIC dans une seule instruction DETACH MASKING POLICY.

*PUBLIC*   
Indique que la politique était attachée à tous les utilisateurs de la table.  
Vous ne pouvez définir qu’un seul user\$1name, role\$1name et PUBLIC dans une seule instruction DETACH MASKING POLICY.

Pour en savoir plus sur l'utilisation de la POLITIQUE DE MASQUAGE DÉTACHÉ sur le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# DETACH RLS POLICY
<a name="r_DETACH_RLS_POLICY"></a>

Détachez une politique de sécurité au niveau des lignes sur une table d’un ou de plusieurs utilisateurs ou rôles.

Les super-utilisateurs et les utilisateurs ou les rôles qui disposent du rôle `sys:secadmin` peuvent détacher une stratégie.

## Syntaxe
<a name="r_DETACH_RLS_POLICY-synopsis"></a>

```
DETACH RLS POLICY
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
FROM { user_name | ROLE role_name | PUBLIC } [, ...];
```

## Parameters
<a name="r_DETACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
Nom de la politique .

database\$1name  
Nom de la base de données dans laquelle la politique et la relation sont créées. La politique et la relation doivent figurer dans la même base de données. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

nom\$1schéma  
Nom du schéma auquel appartient la relation.

table\$1name  
Relation à laquelle la politique de sécurité au niveau des lignes est attachée.

FROM \$1 *user\$1name* \$1 ROLE *role\$1name* \$1 PUBLIC\$1 [, ...]  
Spécifie si la politique est détachée à partir d’un ou de plusieurs utilisateurs ou rôles spécifiés. 

Pour en savoir plus sur l'utilisation de DETACH RLS POLICY dans le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Notes d’utilisation
<a name="r_DETACH_RLS_POLICY-usage"></a>

Lorsque vous utilisez l’instruction DETACH RLS POLICY, tenez compte des points suivants :
+ Vous pouvez détacher une politique d’une relation, d’un utilisateur, d’un rôle ou d’un public.

## Exemples
<a name="r_DETACH_RLS_POLICY-examples"></a>

L’exemple suivant détache une politique sur une table à partir d’un rôle.

```
DETACH RLS POLICY policy_concerts ON tickit_category_redshift FROM ROLE analyst, ROLE dbadmin;
```

# DROP DATABASE
<a name="r_DROP_DATABASE"></a>

Supprime une base de données. 

Vous ne pouvez pas exécuter DROP DATABASE au sein d’un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

## Syntaxe
<a name="r_DROP_DATABASE-synopsis"></a>

```
DROP DATABASE database_name [ FORCE ]
```

## Parameters
<a name="r_DROP_DATABASE-parameters"></a>

 *database\$1name*   
Nom de la base de données à supprimer. Vous ne pouvez pas supprimer les bases de données dev, padb\$1harvest, template0, template1 ou sys:internal, et vous ne pouvez pas supprimer la base de données active.  
Pour supprimer une base de données externe, supprimez le schéma externe. Pour plus d’informations, consultez [DROP SCHEMA](r_DROP_SCHEMA.md).

 FORCE   
Lorsque vous spécifiez FORCE, DROP DATABASE tente de mettre fin aux connexions actives avant de supprimer la base de données. Si toutes les connexions actives se terminent avec succès dans un délai imparti, la suppression se poursuit. Si toutes les connexions ne se terminent pas, la commande génère une erreur.

## Notes d’utilisation de DROP DATA
<a name="r_DROP_DATABASE_usage"></a>

Lors de l’utilisation de l’instruction DROP DATABASE, tenez compte des éléments suivants :
+ En règle générale, nous vous recommandons de ne pas supprimer de base de données contenant une unité de partage des données AWS Data Exchange à l’aide de l’instruction DROP DATABASE. Si vous le faites, les Comptes AWS qui ont accès à l’unité de partage des données perdent l’accès. L’exécution de ce type de modification peut enfreindre les termes des produits de données dans AWS Data Exchange.

  L’exemple suivant illustre une erreur lorsqu’une base de données contient une unité de partage des données AWS Data Exchange est supprimée.

  ```
  DROP DATABASE test_db;
  ERROR:   Drop of database test_db that contains ADX-managed datashare(s) requires session variable datashare_break_glass_session_var to be set to value 'ce8d280c10ad41'
  ```

  Pour autoriser la suppression de la base de données, définissez la variable suivante et exécutez à nouveau l’instruction DROP DATABASE.

  ```
  SET datashare_break_glass_session_var to 'ce8d280c10ad41';
  ```

  ```
  DROP DATABASE test_db;
  ```

  Dans ce cas, Amazon Redshift génère une valeur ponctuelle aléatoire pour définir la variable de séance afin d’autoriser DROP DATABASE pour une base de données contenant une unité de partage des données AWS Data Exchange .

## Exemples
<a name="r_DROP_DATABASE-examples"></a>

L’exemple suivant supprime une base de données nommée TICKIT\$1TEST : 

```
drop database tickit_test;
```

# DROP DATASHARE
<a name="r_DROP_DATASHARE"></a>

Supprime une unité de partage des données. La commande n’est pas réversible.

Seul un super-utilisateur ou le propriétaire de l’unité de partage des données peut supprimer une unité de partage des données.

## Privilèges requis
<a name="r_DROP_DATASHARE-privileges"></a>

Les privilèges suivants sont requis pour DROP DATASHARE :
+ Superuser
+ Utilisateurs disposant du privilège DROP DATASHARE
+ Propriétaire de l’unité de partage des données

## Syntaxe
<a name="r_DROP_DATASHARE-synopsis"></a>

```
DROP DATASHARE datashare_name;
```

## Parameters
<a name="r_DROP_DATASHARE-parameters"></a>

 *datashare\$1name*   
Nom de l’unité de partage des données à supprimer.

## Note d’utilisation de DROP DATASHARE
<a name="r_DROP_DATASHARE_usage"></a>

Lors de l’utilisation de l’instruction DROP DATASHARE, tenez compte des éléments suivants :
+ En général, nous vous recommandons de ne pas supprimer un partage de données à l'aide de l'instruction DROP AWS Data Exchange DATASHARE. Si vous le faites, ceux Comptes AWS qui ont accès au partage de données en perdent l'accès. L’exécution de ce type de modification peut enfreindre les termes des produits de données dans AWS Data Exchange.

  L'exemple suivant montre une erreur lors de la suppression d'un AWS Data Exchange partage de données.

  ```
  DROP DATASHARE salesshare;
  ERROR:  Drop of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value '620c871f890c49'
  ```

  Pour autoriser la suppression d'un AWS Data Exchange partage de données, définissez la variable suivante et réexécutez l'instruction DROP DATASHARE.

  ```
  SET datashare_break_glass_session_var to '620c871f890c49';
  ```

  ```
  DROP DATASHARE salesshare;
  ```

  Dans ce cas, Amazon Redshift génère une valeur unique aléatoire pour définir la variable de session afin d'autoriser DROP DATASHARE pour un partage de données. AWS Data Exchange 

## Exemples
<a name="r_DROP_DATASHARE-examples"></a>

L’exemple suivant supprime une unité de partage des données appelé `salesshare`.

```
DROP DATASHARE salesshare;
```

# DROP EXTERNAL VIEW
<a name="r_DROP_EXTERNAL_VIEW"></a>

Supprime une vue externe de la base de données. La suppression d’une vue externe la supprime de tous les moteurs SQL auxquels elle est associée, tels qu’Amazon Athena et Amazon EMR Spark. Cette commande ne peut pas être annulée. Pour plus d’informations sur les vues du Catalogue de données, consultez [Vues AWS Glue Data Catalog](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Syntaxe
<a name="r_DROP_EXTERNAL_VIEW-synopsis"></a>

```
DROP EXTERNAL VIEW schema_name.view_name [ IF EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
```

## Parameters
<a name="r_DROP_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
Le schéma attaché à votre AWS Glue base de données, suivi du nom de la vue.

IF EXISTS  
Supprime la vue uniquement si elle existe.

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
Notation du schéma à utiliser lors de la suppression de la vue. Vous pouvez spécifier d'utiliser une base de AWS Glue Data Catalog données Glue que vous avez créée ou un schéma externe que vous avez créé. Consultez [CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html) et [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) pour plus d’informations.

 *query\$1definition*   
Définition de la requête SQL exécutée par Amazon Redshift pour modifier la vue.

## Exemples
<a name="r_DROP_EXTERNAL_VIEW-examples"></a>

L’exemple suivant supprimer une vue du catalogue de données nommée sample\$1schema.glue\$1data\$1catalog\$1view.

```
DROP EXTERNAL VIEW sample_schema.glue_data_catalog_view IF EXISTS
```

# DROP FUNCTION
<a name="r_DROP_FUNCTION"></a>

Supprime une fonction définie par l’utilisateur (UDF) de la base de données. La signature de la fonction, ou liste des types de données des arguments, doit être spécifiée, car plusieurs fonctions peuvent exister avec le même nom, mais avec des signatures différentes. Vous ne pouvez pas supprimer une fonction intégrée Amazon Redshift.

La commande n’est pas réversible.

## Privilèges requis
<a name="r_DROP_FUNCTION-privileges"></a>

Les privilèges suivants sont requis pour DROP FUNCTION :
+ Superuser
+ Utilisateurs disposant du privilège DROP FUNCTION
+ Propriétaire de la fonction

## Syntaxe
<a name="r_DROP_FUNCTION-synopsis"></a>

```
DROP FUNCTION name
( [arg_name] arg_type   [, ...] )
[ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_FUNCTION-parameters"></a>

 *nom*   
Nom de la fonction à supprimer.

 *nom\$1arg*   
Nom d’un argument d’entrée. DROP FUNCTION ignore les noms d’argument, car seuls les types de données des arguments sont nécessaires pour déterminer l’identité de la fonction.

 *type\$1arg*   
Type de données de l’argument en entrée. Vous pouvez fournir une liste séparée par des virgules d’un maximum de 32 types de données.

 CASCADE   
Mot-clé spécifiant de supprimer automatiquement les objets qui dépendent de la fonction, tel que les vues.   
Pour créer une vue qui ne dépend pas d’une fonction, incluez la clause WITH NO SCHEMA BINDING dans la définition de vue. Pour plus d'informations, consultez [CREATE VIEW](r_CREATE_VIEW.md).

 RESTRICT   
Mot-clé spécifiant que si les objets dépendent de la fonction, il ne faut pas supprimer la fonction ni renvoyer un message. Il s’agit de l’action par défaut.

## Exemples
<a name="r_DROP_FUNCTION-examples"></a>

L’exemple suivant supprime la fonction nommée `f_sqrt` :

```
drop function f_sqrt(int);
```

Pour supprimer une fonction qui comporte des dépendances, utilisez l’option CASCADE, comme illustré dans l’exemple suivant :

```
drop function f_sqrt(int)cascade;
```

# DROP GROUP
<a name="r_DROP_GROUP"></a>

Supprime un groupe d’utilisateurs. La commande n’est pas réversible. Elle ne supprime pas les utilisateurs individuels d’un groupe.

Consultez DROP USER pour supprimer un utilisateur.

## Syntaxe
<a name="r_DROP_GROUP-synopsis"></a>

```
DROP GROUP name
```

## Paramètre
<a name="r_DROP_GROUP-parameter"></a>

 *nom*   
Nom du groupe d’utilisateurs à supprimer.

## Exemple
<a name="r_DROP_GROUP-example"></a>

L’exemple suivant supprime le groupe d’utilisateurs `guests` :

```
DROP GROUP guests;
```

Vous ne pouvez pas supprimer un groupe si le groupe n’a pas de privilèges sur un objet. Si vous essayez de supprimer un tel groupe, vous recevrez l’erreur suivante.

```
ERROR: group "guests" can't be dropped because the group has a privilege on some object
```

Si le groupe dispose de privilèges pour un objet, vous devez d’abord révoquer les privilèges avant de supprimer le groupe. Pour rechercher les objets pour lesquels le groupe `guests` possède des privilèges, utilisez l’exemple suivant. Pour plus d’informations sur la vue des métadonnées utilisée dans l’exemple, consultez [SVV\$1RELATION\$1PRIVILEGES](https://docs.aws.amazon.com//redshift/latest/dg/r_SVV_RELATION_PRIVILEGES.html).

```
SELECT DISTINCT namespace_name, relation_name, identity_name, identity_type 
FROM svv_relation_privileges
WHERE identity_type='group' AND identity_name='guests';

+----------------+---------------+---------------+---------------+
| namespace_name | relation_name | identity_name | identity_type |
+----------------+---------------+---------------+---------------+
| public         | table1        | guests        | group         |
+----------------+---------------+---------------+---------------+
| public         | table2        | guests        | group         |
+----------------+---------------+---------------+---------------+
```

L’exemple suivant révoque tous les privilèges sur toutes les tables du schéma `public` du groupe d’utilisateurs `guests`, puis supprime le groupe.

```
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM GROUP guests;
DROP GROUP guests;
```

# DROP IDENTITY PROVIDER
<a name="r_DROP_IDENTITY_PROVIDER"></a>

Supprime un fournisseur d’identité. La commande n’est pas réversible. Seul un super-utilisateur peut supprimer un fournisseur d’identité.

## Syntaxe
<a name="r_DROP_IDENTITY_PROVIDER-synopsis"></a>

```
DROP IDENTITY PROVIDER identity_provider_name [ CASCADE ]
```

## Paramètres
<a name="r_DROP_IDENTITY_PROVIDER-parameter"></a>

 *identity\$1provider\$1name*   
Nom du fournisseur d’identité à supprimer.

 CASCADE   
Supprime les utilisateurs et les rôles attachés au fournisseur d’identité lorsqu’il est supprimé.

## Exemple
<a name="r_DROP_IDENTITY_PROVIDER-example"></a>

L’exemple suivant supprime le fournisseur d’identité *oauth\$1provider*.

```
DROP IDENTITY PROVIDER oauth_provider;
```

Si vous supprimez le fournisseur d’identité, certains utilisateurs peuvent ne pas être en mesure de se connecter ou d’utiliser les outils clients configurés pour utiliser le fournisseur d’identité.

# DROP LIBRARY
<a name="r_DROP_LIBRARY"></a>

Supprime une bibliothèque Python personnalisée de la base de données. Seul le propriétaire de la bibliothèque ou un super-utilisateur peut supprimer une bibliothèque. 

DROP LIBRARY ne peut pas s’exécuter à l’intérieur d’un bloc de transaction (BEGIN … END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

La commande n’est pas réversible. La commande DROP LIBRARY valide immédiatement. Si une fonction UDF qui dépend de la bibliothèque s’exécute simultanément, la fonction UDF peut échouer, même si la fonction UDF s’exécute au sein d’une transaction.

Pour plus d’informations, consultez [CREATE LIBRARY](r_CREATE_LIBRARY.md). 

## Privilèges requis
<a name="r_DROP_LIBRARY-privileges"></a>

Les privilèges suivants sont requis pour DROP LIBRARY :
+ Superuser
+ Utilisateurs disposant du privilège DROP LIBRARY
+ Propriétaire de la bibliothèque

## Syntaxe
<a name="r_DROP_LIBRARY-synopsis"></a>

```
DROP LIBRARY library_name
```

## Parameters
<a name="r_DROP_LIBRARY-parameters"></a>

 *nom\$1bibliothèque*   
Nom de la bibliothèque.

# DROP MASKING POLICY
<a name="r_DROP_MASKING_POLICY"></a>

Supprime une politique de masquage dynamique des données de toutes les bases de données. Vous ne pouvez pas supprimer une politique de masquage qui est toujours attachée à une ou plusieurs tables. Pour plus d’informations sur le masquage dynamique des données, consultez [Masquage dynamique des données](t_ddm.md).

Les super-utilisateurs et les utilisateurs ou les rôles disposant du rôle sys:secadmin peuvent supprimer une politique de masquage.

## Syntaxe
<a name="r_DROP_MASKING_POLICY-synopsis"></a>

```
DROP MASKING POLICY { policy_name | database_name.policy_name };
```

## Parameters
<a name="r_DROP_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
Nom de la politique de masquage à supprimer.

database\$1name  
Nom de la base de données d'où provient la politique à supprimer. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

Pour en savoir plus sur l'utilisation de DROP MASKING POLICY dans le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

# DROP MODEL
<a name="r_DROP_MODEL"></a>

Supprime un modèle de la base de données. Seul le propriétaire du modèle ou un super-utilisateur peut supprimer un modèle. 

DROP MODEL supprime également toutes les fonctions de prédiction associées dérivées de ce modèle, tous les artefacts Amazon Redshift liés au modèle et toutes les données Amazon S3 liées au modèle. Pendant que le modèle est toujours en cours de formation sur Amazon SageMaker AI, DROP MODEL annulera ces opérations.

La commande n’est pas réversible. La commande DROP MODEL valide immédiatement.

## Autorisations requises
<a name="r_DROP_MODEL-privileges"></a>

Les autorisations suivantes sont requises pour DROP MODEL :
+ Superuser
+ Utilisateurs disposant de l’autorisation DROP MODEL
+ Propriétaire du modèle
+ Propriétaire du schéma

## Syntaxe
<a name="r_DROP_MODEL-synopsis"></a>

```
DROP MODEL [ IF EXISTS ] model_name
```

## Parameters
<a name="r_DROP_MODEL-parameters"></a>

 *IF EXISTS*   
Clause indiquant que si le schéma spécifié existe déjà, la commande ne doit apporter aucune modification et renvoyer un message selon lequel le schéma existe.

 *model\$1name*   
Nom du modèle. Le nom du modèle d’un schéma doit être unique.

## Exemples
<a name="r_DROP_MODEL-examples"></a>

L’exemple suivant supprime le modèle demo\$1ml.customer\$1churn.

```
DROP MODEL demo_ml.customer_churn
```

# DROP MATERIALIZED VIEW
<a name="materialized-view-drop-sql-command"></a>

Supprime une vue matérialisée.

Pour plus d’informations sur les vues matérialisées, consultez [Vues matérialisées dans Amazon Redshift](materialized-view-overview.md).

## Syntaxe
<a name="mv_DROP_MATERIALIZED_VIEW-synopsis"></a>

```
DROP MATERIALIZED VIEW [ IF EXISTS ] mv_name [, ... ] [ CASCADE | RESTRICT ]
```

## Parameters
<a name="mv_DROP_MATERIALIZED_VIEW-parameters"></a>

IF EXISTS  
Clause qui spécifie de vérifier si la vue matérialisée nommée existe. Si la vue matérialisée n’existe pas, la commande `DROP MATERIALIZED VIEW` renvoie un message d’erreur. Cette clause est utile lors de la rédaction des scripts, afin d’éviter l’échec de ces derniers si vous supprimez une vue matérialisée inexistante.

*mv\$1name*  
Nom de la vue matérialisée à supprimer.

CASCADE  
Clause qui indique de supprimer automatiquement les objets dont dépend la vue matérialisée, tels que d’autres vues.

RESTRICT  
Clause qui indique de ne pas supprimer la vue matérialisée si des objets en dépendent. Il s’agit de l’option par défaut.

## Notes d’utilisation
<a name="mv_DROP_MATERIALIZED_VIEW-usage"></a>

Seul le propriétaire d’une vue matérialisée peut utiliser `DROP MATERIALIZED VIEW` sur cette vue. Un superutilisateur ou un utilisateur auquel des privilèges DROP ont été spécifiquement accordés peuvent faire exception à cette règle.

Lorsque vous écrivez une instruction DROP pour une vue matérialisée et qu’il existe une vue de même nom, vous obtenez une erreur qui vous demande d’utiliser DROP VIEW. Une erreur se produit même dans le cas où vous utilisez `DROP MATERIALIZED VIEW IF EXISTS`.

## Exemple
<a name="mv_DROP_MATERIALIZED_VIEW-examples"></a>

L’exemple suivant supprime la vue matérialisée `tickets_mv`.

```
DROP MATERIALIZED VIEW tickets_mv;
```

# DROP PROCEDURE
<a name="r_DROP_PROCEDURE"></a>

Supprime une procédure. Pour supprimer une procédure, le nom de la procédure et les types de données d’argument en entrée (signature), sont requis. Si vous le souhaitez, vous pouvez inclure l’ensemble des types de données d’argument, y compris les arguments OUT. Pour trouver la signature d’une procédure, utilisez la commande [SHOW PROCEDURE](r_SHOW_PROCEDURE.md). Pour plus d’informations sur les signatures d’une procédure, consultez [PG\$1PROC\$1INFO](r_PG_PROC_INFO.md).

## Privilèges requis
<a name="r_DROP_PROCEDURE-privileges"></a>

Les privilèges suivants sont requis pour DROP PROCEDURE :
+ Superuser
+ Utilisateurs disposant du privilège DROP PROCEDURE
+ Propriétaire de la procédure

## Syntaxe
<a name="r_DROP_PROCEDURE-synopsis"></a>

```
DROP PROCEDURE sp_name ( [ [ argname ] [ argmode ] argtype [, ...] ] )
```

## Parameters
<a name="r_DROP_PROCEDURE-parameters"></a>

 *sp\$1name*   
Nom de la procédure à supprimer. 

 *argname*   
Nom d’un argument d’entrée. DROP PROCEDURE ignore les noms d’argument, car seuls les types de données des arguments sont nécessaires pour déterminer l’identité de la procédure. 

 *argmode*   
Mode d’un argument, à savoir IN, OUT ou INOUT. Les arguments OUT ne sont pas obligatoires, car ils ne servent pas à identifier une procédure stockée. 

 *argtype*   
Type de données de l’argument en entrée. Pour afficher la liste des types de données pris en charge, consultez [Types de données](c_Supported_data_types.md). 

## Exemples
<a name="r_DROP_PROCEDURE-examples"></a>

L’exemple suivant supprime une procédure stockée appelée `quarterly_revenue`.

```
DROP PROCEDURE quarterly_revenue(volume INOUT bigint, at_price IN numeric,result OUT int);
```

# DROP RLS POLICY
<a name="r_DROP_RLS_POLICY"></a>

Supprime une politique de sécurité de niveau des lignes pour toutes les tables de toutes les bases de données.

Les super-utilisateurs, les utilisateurs ou les utilisateurs disposant du rôle sys:secadmin peuvent supprimer une stratégie.

## Syntaxe
<a name="r_DROP_RLS_POLICY-synopsis"></a>

```
DROP RLS POLICY [ IF EXISTS ] 
{ policy_name | database_name.policy_name }
[ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_RLS_POLICY-parameters"></a>

 *IF EXISTS*   
Clause qui indique si la politique spécifiée existe déjà.

 *policy\$1name*   
Nom de la politique .

database\$1name  
Nom de la base de données d'où provient la politique à supprimer. La base de données peut être la base de données connectée ou une base de données qui prend en charge les autorisations fédérées Amazon Redshift.

 *CASCADE*   
Clause qui indique de détacher automatiquement la politique de toutes les tables attachées avant de la supprimer.

 *RESTRICT*   
Clause qui indique de ne pas supprimer la politique lorsqu’elle est attachée à certaines tables. Il s’agit de l’option par défaut.

Pour l'utilisation de la POLITIQUE DROP RLS sur le catalogue d'autorisations fédérées Amazon Redshift, [consultez la section Gestion du contrôle d'accès avec les autorisations fédérées Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html).

## Exemples
<a name="r_DROP_RLS_POLICY-examples"></a>

L’exemple suivant supprime la politique de sécurité de niveau des lignes.

```
DROP RLS POLICY policy_concerts;
```

# DROP ROLE
<a name="r_DROP_ROLE"></a>

Supprime un rôle d’une base de données. Seul le propriétaire du rôle qui a créé le rôle, un utilisateur avec l’option WITH ADMIN ou un super-utilisateur peut supprimer un rôle.

Vous ne pouvez pas supprimer un rôle accordé à un utilisateur ou à un autre rôle dépendant de ce rôle.

## Privilèges requis
<a name="r_DROP_ROLE-privileges"></a>

Voici les privilèges requis pour DROP ROLE :
+ Superuser
+ Propriétaire du rôle qui est soit l’utilisateur qui a créé le rôle, soit un utilisateur qui s’est vu accorder le rôle avec le privilège WITH ADMIN OPTION.

## Syntaxe
<a name="r_DROP_ROLE-synopsis"></a>

```
DROP ROLE role_name [ FORCE | RESTRICT ] 
```

## Parameters
<a name="r_DROP_ROLE-parameters"></a>

*role\$1name*  
Nom du rôle.

[ FORCE \$1 RESTRICT ]  
Le paramètre par défaut est RESTRICT. Amazon Redshift génère une erreur lorsque vous tentez de supprimer un rôle qui a hérité d’un autre rôle. Utilisez FORCE pour supprimer, le cas échéant, toutes les affectations de rôle. 

## Exemples
<a name="r_DROP_ROLE-examples"></a>

L’exemple suivant supprime le rôle `sample_role`.

```
DROP ROLE sample_role FORCE;
```

L’exemple suivant tente de supprimer le rôle sample\$1role1 accordé à un utilisateur avec l’option RESTRICT par défaut.

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
DROP ROLE sample_role1;
ERROR:  cannot drop this role since it has been granted on a user
```

Pour supprimer correctement le rôle sample\$1role1 qui a été accordé à un utilisateur, utilisez l’option FORCE.

```
DROP ROLE sample_role1 FORCE;
```

L’exemple suivant tente de supprimer le rôle sample\$1role2 dont un autre rôle dépend avec l’option RESTRICT par défaut.

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO sample_role2;
DROP ROLE sample_role2;
ERROR:  cannot drop this role since it depends on another role
```

Pour supprimer correctement le rôle sample\$1role2 dont un autre rôle dépend, utilisez l’option FORCE.

```
DROP ROLE sample_role2 FORCE;
```

# DROP SCHEMA
<a name="r_DROP_SCHEMA"></a>

Supprime un schéma. Pour un schéma externe, vous pouvez également supprimer la base de données externe associée au schéma. La commande n’est pas réversible.

## Privilèges requis
<a name="r_DROP_SCHEMA-privileges"></a>

Les privilèges suivants sont requis pour DROP SCHEMA :
+ Superuser
+ Propriétaire du schéma
+ Utilisateurs disposant du privilège DROP SCHEMA

## Syntaxe
<a name="r_DROP_SCHEMA-synopsis"></a>

```
DROP SCHEMA [ IF EXISTS ] name [, ...]
[ DROP EXTERNAL DATABASE ]
[ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_SCHEMA-parameters"></a>

IF EXISTS  
Clause indiquant que si le schéma spécifié n’existe pas, la commande ne doit faire aucune modification et renvoyer un message selon lequel le schéma n’existe pas, plutôt que de mettre fin avec une erreur.  
Comme cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si DROP SCHEMA s’exécute sur un schéma qui n’existe pas.

 *nom*   
Noms des schémas à supprimer. Vous pouvez spécifier plusieurs noms de schémas séparés par des virgules.

 DROP EXTERNAL DATABASE   
Clause qui indique que si un schéma externe est supprimé, il convient de supprimer la base de données externe associée au schéma externe, si elle existe. Si aucune base de données externe n’existe, la commande renvoie un message indiquant qu’aucune base de données externe n’existe. Si plusieurs schémas externes sont supprimés, toutes les bases de données associées aux schémas spécifiés sont supprimées.   
Si une base de données externe contient des objets dépendants tels que des tables, incluez l’option CASCADE pour supprimer également ces objets dépendants.   
Lorsque vous supprimez une base de données externe, cette base de données est également supprimée pour tous les autres schémas externes associés à la base de données. Les tables définies dans d’autres schémas externes utilisant cette base de données sont également supprimées.   
DROP EXTERNAL DATABASE ne prend pas en charge les bases de données externes stockées dans un metastore HIVE. 

CASCADE  
Mot-clé qui indique de supprimer automatiquement tous les objets figurant dans le schéma. Si DROP EXTERNAL DATABASE est spécifiée, tous les objets figurant dans la base de données externe sont également supprimés.

RESTRICT  
Mot-clé qui indique de ne pas supprimer un schéma ou une base de données externe s’il contient ou si elle contient des objets. Il s’agit de l’action par défaut.

## Exemple
<a name="r_DROP_SCHEMA-example"></a>

L’exemple suivant supprime un schéma nommé S\$1SALES. Cet exemple utilise RESTRICT comme mécanisme de sécurité de telle sorte que le schéma n’est pas supprimé s’il contient des objets. Dans ce cas, vous devez supprimer les objets du schéma avant de supprimer le schéma.

```
drop schema s_sales restrict;
```

L’exemple suivant supprime un schéma nommé S\$1SALES et tous les objets qui dépendent de ce schéma.

```
drop schema s_sales cascade;
```

L’exemple suivant supprime le schéma S\$1SALES s’il existe, ou ne fait rien et renvoie un message dans le cas contraire.

```
drop schema if exists s_sales;
```

L’exemple suivant supprime un schéma externe nommé S\$1SPECTRUM et la base de données externe qui lui est associée. Cet exemple utilise RESTRICT pour ne pas supprimer le schéma et la base de données s’ils contiennent des objets. Dans ce cas, vous devez supprimer les objets dépendants avant de supprimer le schéma et la base de données.

```
drop schema s_spectrum drop external database restrict;
```

L’exemple suivant supprime plusieurs schémas et les bases de données externes qui leur sont associées, ainsi que tous les objets dépendants éventuels. 

```
drop schema s_sales, s_profit, s_revenue drop external database cascade;
```

# DROP TABLE
<a name="r_DROP_TABLE"></a>

Supprime une table d’une base de données. 

Si vous essayez de vider une table de lignes, sans supprimer la table, utilisez la commande DELETE ou TRUNCATE. 

DROP TABLE supprime les contraintes qui existent sur la table cible. Plusieurs tables peuvent être supprimées avec une seule commande DROP TABLE. 

Vous ne pouvez pas exécuter DROP TABLE avec une table externe à l’intérieur d’une transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md).

Pour trouver un exemple dans lequel le privilège DROP est accordé à un groupe, consultez GRANT [Exemples](r_GRANT-examples.md).

## Privilèges requis
<a name="r_DROP_TABLE-privileges"></a>

Les privilèges suivants sont requis pour DROP TABLE :
+ Superuser
+ Utilisateurs disposant du privilège DROP TABLE
+ Propriétaire de table disposant du privilège USAGE sur le schéma

## Syntaxe
<a name="r_DROP_TABLE-synopsis"></a>

```
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
```

## Parameters
<a name="r_DROP_TABLE-parameters"></a>

IF EXISTS  
Clause indiquant que si la table spécifiée n’existe pas, la commande ne doit faire aucune modification et renvoyer un message selon lequel la table n’existe pas, plutôt que de mettre fin avec une erreur.  
Comme cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si DROP TABLE s’exécute sur une table qui n’existe pas.

 *nom*   
Nom de la table à supprimer. 

CASCADE  
Clause qui indique de supprimer automatiquement les objets qui dépendent de la table, tels que les vues.  
Pour créer une vue qui ne dépend pas d’autres objets de base de données, tels que des vues et des tables, incluez la clause WITH NO SCHEMA BINDING dans la définition de vue. Pour plus d'informations, consultez [CREATE VIEW](r_CREATE_VIEW.md).

RESTRICT   
Clause qui indique de ne pas pour supprimer la table si des objets en dépendent. Il s’agit de l’action par défaut.

## Exemples
<a name="r_DROP_TABLE-examples"></a>

 **Suppression d’une table sans dépendances** 

L’exemple suivant crée et supprime une table appelée FEEDBACK qui n’a pas de dépendances : 

```
create table feedback(a int);

drop table feedback;
```

 Si une table contient des colonnes qui sont référencées par des vues ou par d’autres tables, Amazon Redshift affiche un message tel que le suivant. 

```
Invalid operation: cannot drop table feedback because other objects depend on it
```

 **Suppression simultanée de deux tables** 

L’ensemble de commandes suivant crée une table FEEDBACK et une table BUYERS, puis supprime les deux tables avec une seule commande : 

```
create table feedback(a int);

create table buyers(a int);

drop table feedback, buyers;
```

 **Suppression d’une table avec une dépendance** 

Les étapes suivantes montrent comment supprimer une table appelée FEEDBACK à l’aide de l’option CASCADE. 

Commencez par créer une simple table appelée FEEDBACK en utilisant la commande CREATE TABLE : 

```
create table feedback(a int);
```

 Puis, utilisez la commande CREATE VIEW pour créer une vue appelée FEEDBACK\$1VIEW reposant sur la table FEEDBACK : 

```
create view feedback_view as select * from feedback;
```

 L’exemple suivant supprime la table FEEDBACK, ainsi que la vue FEEDBACK\$1VIEW, car FEEDBACK\$1VIEW dépend de la table FEEDBACK : 

```
drop table feedback cascade;
```

 **Affichage des dépendances pour une table** 

Pour renvoyer les dépendances de votre table, utilisez l’exemple suivant. Remplacez *my\$1schema* et *my\$1table* par votre propre schéma et table. 

```
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;
```

Pour supprimer *my\$1table* et ses dépendances, utilisez l'exemple suivant. Cet exemple renvoie également toutes les dépendances de la table supprimée.

```
DROP TABLE my_table CASCADE;
         
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;

+------------------+----------------+---------------+--------------+-------------+
| dependent_schema | dependent_view | source_schema | source_table | column_name |
+------------------+----------------+---------------+--------------+-------------+
```

 **Suppression d’une table avec IF EXISTS** 

L’exemple suivant supprime la table FEEDBACK si elle existe, ou ne fait rien et renvoie un message dans le cas contraire : 

```
drop table if exists feedback;
```

# MODÈLE DE DÉPÔT
<a name="r_DROP_TEMPLATE"></a>

Supprime un modèle d'une base de données.

## Privilèges requis
<a name="r_DROP_TEMPLATE-privileges"></a>

Pour supprimer un modèle, vous devez disposer de l'un des éléments suivants :
+ Privilèges de superutilisateur
+ Privilège DROP TEMPLATE et privilège USAGE sur le schéma contenant le modèle

## Syntaxe
<a name="r_DROP_TEMPLATE-synopsis"></a>

```
DROP TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameters
<a name="r_DROP_TEMPLATE-parameters"></a>

 *database\$1name*   
(Facultatif) Nom de la base de données dans laquelle le modèle est créé. Si elle n'est pas spécifiée, la base de données actuelle est utilisée. 

 *nom\$1schéma*   
(Facultatif) Nom du schéma dans lequel le modèle est créé. S'il n'est pas spécifié, le modèle est recherché dans le chemin de recherche actuel. 

 *nom\$1modèle*   
Nom du modèle à supprimer. Dans l'exemple suivant, le nom de la base de données est`demo_database`, le nom du schéma est `demo_schema` et le nom du modèle est`test`.  

```
DROP TEMPLATE demo_database.demo_schema.test;
```

## Exemples
<a name="r_DROP_TEMPLATE-examples"></a>

L'exemple suivant supprime le modèle test\$1template du schéma actuel :

```
DROP TEMPLATE test_template;
```

L'exemple suivant supprime le modèle test\$1template du schéma test\$1schema :

```
DROP TEMPLATE test_schema.test_template;
```

# DROP USER
<a name="r_DROP_USER"></a>

Supprime un utilisateur d’une base de données. Plusieurs utilisateurs peuvent être supprimés avec une seule commande DROP USER. Vous devez être un super-utilisateur de base de données ou disposer de l’autorisation DROP USER pour exécuter cette commande.

## Syntaxe
<a name="r_DROP_USER-synopsis"></a>

```
DROP USER [ IF EXISTS ] name [, ... ]
```

## Parameters
<a name="r_DROP_USER-parameters"></a>

IF EXISTS  
Clause indiquant que si l’utilisateur spécifié n’existe pas, la commande ne doit faire aucune modification et renvoyer un message selon lequel l’utilisateur n’existe pas, plutôt que de mettre fin avec une erreur.  
Comme cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si DROP USER s’exécute sur un utilisateur non existant.

 *nom*   
Nom de l’utilisateur à supprimer. Vous pouvez spécifier plusieurs utilisateurs, avec une virgule séparant chaque utilisateur du suivant.

## Notes d’utilisation
<a name="r_DROP_USER-notes"></a>

Vous ne pouvez pas supprimer l’utilisateur nommé `rdsdb` ou l’utilisateur administrateur de la base de données qui est généralement nommée `awsuser` ou `admin`.

Vous ne pouvez pas supprimer un utilisateur si l’utilisateur possède un objet de base de données, tel qu’un schéma, une base de données, une table ou une vue, ou si l’utilisateur a des privilèges sur une base de données, une table, une colonne ou un groupe. Si vous tentez de supprimer un tel utilisateur, vous recevez l’une des erreurs suivantes.

```
ERROR: user "username" can't be dropped because the user owns some object [SQL State=55006]

ERROR: user "username" can't be dropped because the user has a privilege on some object [SQL State=55006]
```

Pour obtenir des instructions détaillées sur la façon de trouver les objets appartenant à un utilisateur de base de données, consultez [Comment résoudre l’erreur « l’utilisateur ne peut pas être supprimé » dans Amazon Redshift ?](https://repost.aws/knowledge-center/redshift-user-cannot-be-dropped) dans le *Centre de connaissances*.

**Note**  
Amazon Redshift vérifie seulement la base de données actuelle avant de supprimer un utilisateur. DROP USER ne renvoie une erreur que si l’utilisateur possède des objets de base de données ou a des privilèges sur des objets d’une autre base de données. Si vous supprimez un utilisateur qui possède des objets d’une autre base de données, le propriétaire de ces objets acquiert l’état « unknown ». 

Si un utilisateur possède un objet, supprimez d’abord l’objet ou remplacez sa propriété par celle d’un autre utilisateur avant de supprimer l’utilisateur original. Si l’utilisateur dispose de privilèges pour un objet, révoquez d’abord les privilèges avant de supprimer l’utilisateur. L’exemple suivant montre la suppression d’un objet, la modification de la propriété et la révocation des privilèges avant de supprimer l’utilisateur.

```
drop database dwdatabase;
alter schema dw owner to dwadmin;
revoke all on table dwtable from dwuser;
drop user dwuser;
```

## Exemples
<a name="r_DROP_USER-examples"></a>

L’exemple suivant supprime un utilisateur appelé paulo :

```
drop user paulo;
```

L’exemple suivant supprime deux utilisateurs, paulo et martha :

```
drop user paulo, martha;
```

L’exemple suivant supprime l’utilisateur paulo s’il existe, ou ne fait rien et renvoie un message dans le cas contraire :

```
drop user if exists paulo;
```

# DROP VIEW
<a name="r_DROP_VIEW"></a>

Supprime une vue de la base de données. Plusieurs vues peuvent être supprimées avec une seule commande DROP VIEW. La commande n’est pas réversible.

## Privilèges requis
<a name="r_DROP_VIEW-privileges"></a>

Les privilèges suivants sont requis pour DROP VIEW :
+ Superuser
+ Utilisateurs disposant du privilège DROP VIEW
+ Propriétaire de la vue

## Syntaxe
<a name="r_DROP_VIEW-synopsis"></a>

```
DROP VIEW [ IF EXISTS ] name [, ... ] [ CASCADE | RESTRICT ] 
```

## Parameters
<a name="r_DROP_VIEW-parameters"></a>

IF EXISTS  
Clause indiquant que si la vue spécifiée n’existe pas, la commande ne doit faire aucune modification et renvoyer un message selon lequel la vue n’existe pas, plutôt que de mettre fin avec une erreur.  
Comme cette clause est utile lors de l’écriture de scripts, le script n’échoue pas si DROP VIEW s’exécute sur une vue non existante.

 *nom*   
Nom de la vue à supprimer.

CASCADE  
Clause qui indique de supprimer automatiquement les objets qui dépendent de la vue, tels que d’autres vues.  
Pour créer une vue qui ne dépend pas d’autres objets de base de données, tels que des vues et des tables, incluez la clause WITH NO SCHEMA BINDING dans la définition de vue. Pour plus d’informations, consultez [CREATE VIEW](r_CREATE_VIEW.md).  
Notez que si vous incluez CASCADE et que le nombre d’objets de base de données supprimés atteint dix ou plus, il est possible que votre client de base de données ne répertorie pas tous les objets supprimés dans les résultats récapitulatifs. Cela est généralement dû au fait que les outils client SQL ont des limites par défaut sur les résultats renvoyés.

RESTRICT  
Clause qui indique de ne pas supprimer la vue si des objets en dépendent. Il s’agit de l’action par défaut.

## Exemples
<a name="r_DROP_VIEW-examples"></a>

L’exemple suivant supprime la vue appelée *event* :

```
drop view event;
```

Pour supprimer une vue qui comporte des dépendances, utilisez l’option CASCADE. Par exemple, imaginons que nous commencions avec une table appelée EVENT. Nous créons ensuite la vue eventview de la table EVENT, à l’aide de la commande CREATE VIEW, comme illustré dans l’exemple suivant : 

```
create view eventview as
select dateid, eventname, catid
from event where catid = 1;
```

Maintenant, nous créons une deuxième vue appelée *myeventview*, qui est basée sur la première vue *eventview* :

```
create view myeventview as
select eventname, catid
from eventview where eventname <> ' ';
```

À ce stade, deux vues ont été créées : *eventview* et *myeventview*.

La vue *myeventview* est une vue enfant avec *eventview* en tant que parent.

Pour supprimer la vue *eventview*, la commande évidente à utiliser est la suivante : 

```
drop view eventview;
```

Notez que si vous exécutez cette commande dans ce cas, vous obtenez l’erreur suivante :

```
drop view eventview;
ERROR: can't drop view eventview because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too.
```

Pour résoudre le problème, exécutez la commande suivante (comme indiqué dans le message d’erreur) : 

```
drop view eventview cascade;
```

Les deux vues *eventview* et *myeventview* ont été supprimées avec succès.

L’exemple suivant supprime la vue *eventview* si elle existe, ou ne fait rien et renvoie un message dans le cas contraire :

```
drop view if exists eventview;
```

# FIN
<a name="r_END"></a>

Valide la transaction actuelle. Effectue exactement la même fonction que la commande COMMIT.

Consultez [COMMIT](r_COMMIT.md) pour une documentation plus détaillée.

## Syntaxe
<a name="r_END-synopsis"></a>

```
END [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_END-parameters"></a>

WORK  
Mot-clé facultatif.

TRANSACTION  
Mot-clé facultatif ; WORK et TRANSACTION sont synonymes.

## Exemples
<a name="r_END-examples"></a>

Les exemples suivants mettent tous fin au bloc de transaction et valident la transaction :

```
end;
```

```
end work;
```

```
end transaction;
```

Après une de ces commandes, Amazon Redshift termine le bloc de transaction et valide les modifications.

# EXECUTE
<a name="r_EXECUTE"></a>

Exécute une instruction préalablement préparée. 

## Syntaxe
<a name="r_EXECUTE-synopsis"></a>

```
EXECUTE plan_name [ (parameter [, ...]) ]
```

## Parameters
<a name="r_EXECUTE-parameters"></a>

 *nom\$1plan*   
Nom de l’instruction préparée à exécuter. 

 *paramètre*   
Valeur réelle d’un paramètre de l’instruction préparée. Ce doit être une expression générant une valeur dont le type est compatible avec le type de données spécifié pour cette position de paramètre de la commande PREPARE qui a créé l’instruction préparée. 

## Notes d’utilisation
<a name="r_EXECUTE_usage_notes"></a>

EXECUTE permet d’exécuter une requête préalablement préparée. Comme les instructions préparées existent uniquement pendant la durée d’une séance, l’instruction préparée doit avoir été créée par une instruction PREPARE exécutée plus tôt dans la séance en cours. 

Si l’instruction PREPARE précédente spécifiait certains paramètres, un ensemble compatible de paramètres doit être passé à l’instruction EXECUTE ou Amazon Redshift renvoie une erreur. Contrairement aux fonctions, les instructions préparées ne sont pas surchargées en fonction du type ou du nombre de paramètres spécifiés ; le nom d’une instruction préparée doit être unique au sein d’une séance de base de données. 

Quand une commande EXECUTE est émise pour l’instruction préparée, Amazon Redshift peut le cas échéant réviser le plan d’exécution de la requête (pour améliorer les performances en fonction des valeurs de paramètre spécifiées) avant l’exécution de l’instruction préparée. En outre, pour chaque nouvelle exécution d’une instruction préparée, Amazon Redshift peut réviser le plan d’exécution de la requête en fonction des différentes valeurs de paramètre spécifiées avec l’instruction EXECUTE. Pour examiner le plan d’exécution de la requête qu’Amazon Redshift a choisi pour les instructions EXECUTE données, utilisez la commande [EXPLAIN](r_EXPLAIN.md). 

Pour obtenir des exemples et plus d’informations sur la création et l’utilisation des instructions préparées, consultez [PREPARE](r_PREPARE.md). 

## Consultez aussi
<a name="r_EXECUTE-see-also"></a>

 [DEALLOCATE](r_DEALLOCATE.md), [PREPARE](r_PREPARE.md) 

# EXPLAIN
<a name="r_EXPLAIN"></a>

Affiche le plan d’exécution d’une instruction de requête sans exécution de la requête. Pour plus d’informations sur le flux de travail d’analyse des requêtes, consultez [Flux de travail d’analyse des requêtes](c-query-analysis-process.md).

## Syntaxe
<a name="r_EXPLAIN-synopsis"></a>

```
EXPLAIN [ VERBOSE ] query
```

## Parameters
<a name="r_EXPLAIN-parameters"></a>

VERBOSE   
Affiche le plan de requête complet au lieu d’un simple résumé.

 *query*   
Instruction de la requête à expliquer. La requête peut être une instruction SELECT, INSERT, CREATE TABLE AS, UPDATE ou DELETE.

## Notes d’utilisation
<a name="r_EXPLAIN-usage-notes"></a>

Les performances d’EXPLAIN sont parfois influencées par le temps nécessaire à la création de tables temporaires. Par exemple, une requête qui utilise l’optimisation courante des sous-expressions nécessite la création et l’analyse de tables temporaires pour renvoyer la sortie EXPLAIN. Le plan de requête dépend du schéma et des statistiques des tables temporaires. Par conséquent, la commande EXPLAIN pour ce type de requête peut prendre plus de temps pour s’exécuter que prévu.

Vous pouvez utiliser EXPLAIN uniquement pour les commandes suivantes :
+ SELECT
+ SELECT INTO
+ CREATE TABLE AS
+ INSERT
+ UPDATE
+ DELETE

La commande EXPLAIN échoue si vous l’utilisez pour d’autres commandes SQL, telles que le langage de définition de données (DDL) ou les opérations de base de données.

Les coûts unitaires relatifs de sortie EXPLAIN sont utilisés par Amazon Redshift pour choisir un plan de requête. Amazon Redshift compare les tailles de différentes estimations de ressources pour déterminer le plan.

## Étapes de planification et d’exécution de la requête
<a name="r_EXPLAIN-query-planning-and-execution-steps"></a>

Le plan d’exécution d’une instruction de requête Amazon Redshift spécifique ventile l’exécution et le calcul d’une requête en une séquence discrète d’étapes et d’opérations de table qui produisent un ensemble de résultats final pour la requête. Pour obtenir des informations sur la planification des requêtes, consultez [Traitement des requêtes](c-query-processing.md).

Le tableau suivant fournit un résumé des étapes qu’Amazon Redshift peut utiliser dans le développement d’un plan d’exécution dans le cas d’une requête qu’un utilisateur soumet pour l’exécution.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_EXPLAIN.html)

## Utilisation d’EXPLAIN pour RLS
<a name="r_EXPLAIN-RLS"></a>

Si une requête contient une table soumise à des politiques de sécurité au niveau des lignes (RLS), EXPLAIN affiche un nœud RLS spécial. SecureScan Amazon Redshift enregistre également le même type de nœud dans la table système STL\$1EXPLAIN. EXPLAIN ne révèle pas le prédicat RLS qui s’applique à dim\$1tbl. Le type de SecureScan nœud RLS indique que le plan d'exécution contient des opérations supplémentaires invisibles pour l'utilisateur actuel.

L'exemple suivant illustre un SecureScan nœud RLS.

```
EXPLAIN
SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   ->  *XN* *RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)*
         Filter: ((k_dim / 10) > 0)
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

Pour permettre une enquête complète des plans de requêtes soumis au RLS, Amazon Redshift propose les autorisations système EXPLAIN RLS. Les utilisateurs auxquels cette autorisation a été accordée peuvent inspecter des plans de requêtes complets qui comprennent également des prédicats RLS. 

L'exemple suivant illustre un Seq Scan supplémentaire situé sous le SecureScan nœud RLS et inclut également le prédicat de politique RLS (k\$1dim > 1).

```
EXPLAIN SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                                   QUERY PLAN
---------------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   *->  XN RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)
         Filter: ((k_dim / 10) > 0)*
         ->  *XN* *Seq Scan on fact_tbl rls_table  (cost=0.00..0.06 rows=5 width=8)
               Filter: (k_dim > 1)*
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

Lorsque l’autorisation EXPLAIN RLS est accordée à un utilisateur, Amazon Redshift enregistre le plan de requêtes complet, y compris les prédicats RLS dans la table système STL\$1EXPLAIN. Les requêtes qui sont exécutées alors que cette autorisation n’est pas accordée seront enregistrées sans les données internes RLS. Accorder ou supprimer l’autorisation EXPLAIN RLS ne changera pas ce qu’Amazon Redshift a enregistré dans STL\$1EXPLAIN pour les requêtes précédentes.

### Relations Redshift protégées par AWS Lake Formation-RLS
<a name="r_EXPLAIN_RLS-LF"></a>

L'exemple suivant illustre un SecureScan nœud LF, que vous pouvez utiliser pour visualiser les relations Lake Formation-RLS.

```
EXPLAIN
SELECT *
FROM lf_db.public.t_share
WHERE a > 1;
QUERY PLAN
---------------------------------------------------------------
XN LF SecureScan t_share  (cost=0.00..0.02 rows=2 width=11)
(2 rows)
```

## Exemples
<a name="r_EXPLAIN-examples"></a>

**Note**  
Pour ces exemples, l’exemple de sortie peut varier selon la configuration d’Amazon Redshift.

L’exemple suivant renvoie le plan de requête pour une requête qui sélectionne EVENTID, EVENTNAME, VENUEID et VENUENAME à partir des tables EVENT et VENUE :

```
explain
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(5 rows)
```

L’exemple suivant renvoie le plan de requête pour la même requête avec la sortie des commentaires :

```
explain verbose
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
{HASHJOIN
:startup_cost 2.52
:total_cost 58653620.93
:plan_rows 8712
:plan_width 43
:best_pathkeys <>
:dist_info DS_DIST_OUTER
:dist_info.dist_keys (
TARGETENTRY
{
VAR
:varno 2
:varattno 1
...

XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(519 rows)
```

L’exemple suivant renvoie le plan de requête pour une instruction CREATE TABLE AS (CTAS) : 

```
explain create table venue_nonulls as
select * from venue
where venueseats is not null;

QUERY PLAN
-----------------------------------------------------------
XN Seq Scan on venue  (cost=0.00..2.02 rows=187 width=45)
Filter: (venueseats IS NOT NULL)
(2 rows)
```

# FETCH
<a name="fetch"></a>

Extrait les lignes à l’aide d’un curseur. Pour obtenir des informations sur la déclaration d’un curseur, consultez [DECLARE](declare.md).

FETCH extrait les lignes en fonction de la position actuelle du curseur. Lorsqu’un curseur est créé, il est placé avant la première ligne. Après une opération FETCH, le curseur est placé sur la dernière ligne récupérée. Si FETCH s’exécute hors de la fin des lignes disponibles, comme après une opération FETCH ALL, le curseur est placé à gauche après la dernière ligne. 

FORWARD 0 extrait la ligne actuelle sans déplacer le curseur ; autrement dit, extrait la ligne plus récemment extraite. Si le curseur est placé avant la première ligne ou après la dernière ligne, aucune ligne n’est retournée. 

Lorsque la première ligne d’un curseur est extraite, le jeu complet de résultats est matérialisé sur le nœud principal, en mémoire ou sur disque, si nécessaire. En raison de l’impact négatif potentiel de l’utilisation de curseurs avec des ensembles de résultats volumineux sur les performances, nous recommandons autant que possible l’utilisation d’approches alternatives. Pour plus d'informations, consultez [Considérations relatives aux performances lors de l’utilisation de curseurs](declare.md#declare-performance).

Pour plus d’informations, consultez [DECLARE](declare.md), [CLOSE](close.md). 

## Syntaxe
<a name="fetch-synopsis"></a>

```
FETCH [ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor
```

## Parameters
<a name="fetch-parameters"></a>

NEXT  
Récupère la ligne suivante. Il s’agit de l’option par défaut.

ALL  
Récupère toutes les lignes restantes. (Identique à FORWARD ALL.) ALL n’est pas pris en charge pour les clusters à un seul nœud.

FORWARD [ *nombre* \$1 ALL ]   
Extrait les *nombre* lignes suivantes, ou toutes les lignes restantes. `FORWARD 0` extrait la ligne actuelle. Pour les clusters à un seul nœud, la valeur maximale de count est `1000`. FORWARD ALL n’est pas pris en charge pour les clusters à un seul nœud. 

*curseur*   
Nom du nouveau schéma. 

## Exemple FETCH
<a name="fetch-example"></a>

L’exemple suivant déclare un curseur nommé LOLLAPALOOZA pour sélectionner les informations sur les ventes pour l’événement Lollapalooza, puis récupère les lignes de l’ensemble de résultats à l’aide du curseur :

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

# GRANT
<a name="r_GRANT"></a>

Définit les autorisations d’accès pour un utilisateur ou un rôle.

Les autorisations incluent les options d’accès telles que pouvoir lire les données des tables et des vues, écrire des données, créer et supprimer des tables. Utilisez cette commande pour accorder des autorisations spécifiques pour une table, une base de données, un schéma, une fonction, une procédure, un langage ou une colonne. Pour révoquer les autorisations d’un objet de base de données, utilisez la commande [REVOKE](r_REVOKE.md). 

Les autorisations incluent également les options d’accès producteur suivantes aux unités de partage des données :
+  Octroi d’accès à l’unité de partage des données aux espaces de noms et comptes consommateur. 
+  Octroi de l’autorisation de modifier une unité de partage des données en y ajoutant ou supprimant des objets. 
+  Octroi de l’autorisation de partager une unité de partage des données en y ajoutant ou supprimant des espaces de noms consommateur. 

Les options d’accès consommateur à l’unité de partage des données sont les suivantes :
+ Octroi aux utilisateurs d’un accès complet aux bases de données créées à partir d’une unité de partage des données, ou à des schémas externes pointant vers de telles bases de données.
+ Octroi aux utilisateurs des autorisations de niveau objet sur les bases de données créées à partir d’une unité de partage des données, comme cela est possible pour les objets de base de données locaux. Pour accorder ce niveau d’autorisation, vous devez utiliser la clause WITH PERMISSIONS lors de la création d’une base de données à partir de l’unité de partage des données. Pour plus d’informations, consultez [CREATE DATABASE](r_CREATE_DATABASE.md).

Pour plus d’informations sur les autorisations liées aux unités de partage des données, consultez [Autorisations que vous pouvez accorder aux unités de partages des données](permissions-datashares.md).

Les autorisations incluent également le catalogue d'autorisations fédérées Amazon Redshift suivant :
+ Octroi d'autorisations au niveau de la table aux utilisateurs et aux rôles.
+ Octroi d'autorisations détaillées au niveau des colonnes sur les tables, les vues et les vues matérialisées.
+ Octroi d'autorisations étendues aux utilisateurs et aux rôles.
+ Octroi d'autorisations au niveau de la base de données sur le catalogue d'autorisations fédérées Amazon Redshift.

Pour plus d'informations sur la gestion des autorisations sur le catalogue des autorisations fédérées Amazon Redshift, consultez. [Gestion du contrôle d'accès sur le catalogue d'autorisations fédérées Amazon RedshiftAccorder/Révoquer](federated-permissions-managing-access.md) [Pour plus d'informations sur les grant/revoke syntaxes prises en charge par Amazon Redshift Federated Permissions Catalog, consultez Grant/Revoke.](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html#federated-permissions-managing-access-grant-revoke)

Les autorisations incluent également le privilège CONNECT pour les utilisateurs AWS IAM Identity Center fédérés. Ce privilège permet aux administrateurs de contrôler l'accès des utilisateurs par le biais d'autorisations détaillées dans chaque groupe de travail ou cluster Amazon Redshift où les autorisations fédérées Amazon Redshift sont activées. L'administrateur Amazon Redshift peut spécifier quels utilisateurs ou groupes AWS IAM Identity Center fédérés ont accès pour se connecter directement au groupe de travail Amazon Redshift, ce qui permet de contrôler avec précision l'accès des utilisateurs à chaque groupe de travail ou cluster. AWS IAM Identity Center 

Vous pouvez également attribuer des rôles pour gérer les autorisations de la base de données et contrôler ce que les utilisateurs peuvent faire par rapport à vos données. En définissant des rôles et en les attribuant à des utilisateurs, vous pouvez limiter les actions que ces derniers peuvent entreprendre, par exemple en les limitant aux commandes CREATE TABLE et INSERT. Pour plus d’informations sur la commande CREATE ROLE, consultez [CREATE ROLE](r_CREATE_ROLE.md). Amazon Redshift dispose de certains rôles définis par le système que vous pouvez également utiliser pour accorder des autorisations spécifiques à vos utilisateurs. Pour plus d’informations, consultez [Rôles définis par le système Amazon Redshift](r_roles-default.md).

Vous pouvez accorder les autorisations GRANT ou REVOKE USAGE sur un schéma externe à des utilisateurs et des groupes d’utilisateurs de base de données qui utilisent la syntaxe ON SCHEMA. Lorsque vous utilisez ON EXTERNAL SCHEMA avec AWS Lake Formation, vous pouvez uniquement ACCORDER et RÉVOQUER des autorisations pour un rôle Gestion des identités et des accès AWS (IAM). Pour connaître la liste des autorisations, reportez-vous à la syntaxe.

Pour les procédures stockées, la seule autorisation que vous pouvez accorder est EXECUTE.

Vous ne pouvez pas exécuter GRANT (sur une ressource externe) dans un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

Pour connaître les autorisations accordées aux utilisateurs pour une base de données, utilisez [HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md). Pour connaître les autorisations accordées aux utilisateurs pour un schéma, utilisez [HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md). Pour connaître les autorisations accordées aux utilisateurs pour une table, utilisez [HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md). 

## Syntaxe
<a name="r_GRANT-synopsis"></a>



```
GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]             

GRANT { { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE [database_name.][schema_name.]template_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Octroi d’autorisations au niveau des colonnes pour les tables
<a name="grant-column-level"></a>

Voici la syntaxe des autorisations de niveau colonne sur les tables et les vues Amazon Redshift.

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }

     TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Octroi d’autorisations à ASSUMEROLE
<a name="grant-assumerole-permissions"></a>

Voici la syntaxe des autorisations ASSUMEROLE accordées aux utilisateurs et aux groupes ayant un rôle spécifié. Pour commencer à utiliser le privilège ASSUMEROLE, consultez [Notes d’utilisation pour l’octroi de l’autorisation ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole).

```
GRANT ASSUMEROLE
       ON { 'iam_role' [, ...] | default | ALL }
       TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
       FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]
```

### Octroi d’autorisations pour l’intégration de Redshift Spectrum avec Lake Formation
<a name="grant-spectrum-integration-with-lf-syntax"></a>

La syntaxe suivante s’applique à l’intégration de Redshift Spectrum à Lake Formation. 

```
GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ]

GRANT { { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]
```

### Octroi d’autorisations d’unité de partage des données
<a name="grant-datashare-syntax"></a>

**Autorisations d’unité de partage des données côté producteur**  
La syntaxe suivante permet d’utiliser GRANT pour accorder des autorisations ALTER ou SHARE à un utilisateur ou à un rôle. L’utilisateur peut modifier l’unité de partage des données avec l’autorisation ALTER, ou en autoriser l’utilisation à un consommateur avec l’autorisation SHARE. ALTER et SHARE sont les seules autorisations que vous pouvez accorder aux utilisateurs et aux rôles sur une unité de partage des données.

```
GRANT { ALTER | SHARE } ON DATASHARE datashare_name
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

Voici la syntaxe d’utilisation de GRANT pour les autorisations d’unité de partage des données sur Amazon Redshift. Vous accordez l’accès à une unité de partage des données à un consommateur en utilisant l’autorisation USAGE. Vous ne pouvez pas accorder cette autorisation à des utilisateurs ou à des groupes d’utilisateurs. Cette autorisation ne prend pas non plus en charge WITH GRANT OPTION pour l’instruction GRANT. Seuls les utilisateurs ou groupes d’utilisateurs disposant de l’autorisation SHARE qui leur a été préalablement accordée POUR l’unité de partage des données peuvent exécuter ce type d’instruction GRANT.

```
GRANT USAGE
    ON DATASHARE datashare_name
    TO NAMESPACE 'namespaceGUID' | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]
```

L’exemple suivant montre comment autoriser l’utilisation d’une unité de partage des données à un compte Lake Formation.

```
GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012' VIA DATA CATALOG;
```

**Autorisations d’unité de partage des données côté consommateur**  
Voici la syntaxe des autorisations d’utilisation d’unité de partage des données GRANT sur une base de données spécifique ou un schéma créé à partir d’une unité de partage des données. 

Les autorisations supplémentaires requises pour que les consommateurs puissent accéder à une base de données créée à partir d’une unité de partage des données varient selon que la commande CREATE DATABASE utilisée pour créer la base de données à partir de l’unité de partage des données utilisait ou non la clause WITH PERMISSIONS. Pour plus d’informations sur la commande CREATE DATABASE et la clause WITH PERMISSIONS, consultez [CREATE DATABASE](r_CREATE_DATABASE.md).

**Bases de données créées sans utiliser la clause WITH PERMISSIONS**  
Lorsque vous accordez l’accès USAGE sur une base de données créée à partir d’une unité de partage des données sans utiliser la clause WITH PERMISSIONS, vous n’avez pas besoin d’accorder des autorisations séparément sur les objets de la base de données partagée. Les entités autorisées à utiliser les bases de données créées à partir d’unités de partage des données sans la clause WITH PERMISSIONS ont automatiquement accès à tous les objets de la base de données.

**Bases de données créées avec la clause WITH PERMISSIONS**  
Lorsque vous accordez l’accès USAGE à une base de données dont la base de données partagée a été créée à partir d’une unité de partage des données utilisant la clause WITH PERMISSIONS, les identités côté consommateur doivent toujours bénéficier des autorisations appropriées pour les objets de base de données de la base de données partagée afin de pouvoir y accéder, tout comme vous accorderiez des autorisations pour les objets de base de données locale. Pour accorder des autorisations aux objets d’une base de données créée à partir d’une unité de partage des données, utilisez la syntaxe en trois parties `database_name.schema_name.object_name`. Pour accorder des autorisations aux objets d’un schéma externe pointant vers un schéma partagé au sein de la base de données partagée, utilisez la syntaxe en deux parties `schema_name.object_name`.

```
GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
    TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Octroi d’autorisations étendues
<a name="grant-scoped-syntax"></a>

Les autorisations étendues vous permettent d’accorder des autorisations à un utilisateur ou à un rôle sur tous les objets d’un type au sein d’une base de données ou d’un schéma. Les utilisateurs et les rôles dotés d’autorisations étendues ont les autorisations spécifiées sur tous les objets actuels et futurs de la base de données ou du schéma.

Vous pouvez consulter l’étendue des autorisations délimitées au niveau de la base de données dans [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md). Vous pouvez consulter l’étendue des autorisations délimitées au niveau du schéma dans [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md).

Pour plus d’informations sur les autorisations étendues, consultez [Autorisations délimitées](t_scoped-permissions.md).

La syntaxe suivante permet d’accorder des autorisations étendues aux utilisateurs et rôles.

```
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT 
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name} [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT USAGE
FOR LANGUAGES IN
{DATABASE db_name}
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]  

GRANT { { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]
```

Notez que les autorisations étendues ne font pas de distinction entre les autorisations relatives aux fonctions et aux procédures. Par exemple, l’instruction suivante accorde à `bob` l’autorisation `EXECUTE` pour les fonctions et les procédures du schéma `Sales_schema`.

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

### Accorder des autorisations de machine learning
<a name="grant-model-syntax"></a>

Voici la syntaxe pour les autorisations des modèles de machine learning sur Amazon Redshift.

```
GRANT CREATE MODEL
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Octroi d’autorisations de rôle
<a name="grant-roles"></a>

La syntaxe suivante s’applique à l’octroi de rôles sur Amazon Redshift.

```
GRANT { ROLE role_name } [, ...] TO { { user_name [ WITH ADMIN OPTION ] } | ROLE role_name }[, ...]
```

Voici la syntaxe permettant d’accorder des autorisations système aux rôles sur Amazon Redshift. Notez que vous ne pouvez accorder des autorisations qu’aux rôles, et non aux utilisateurs.

```
GRANT
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG | ACCESS SYSTEM TABLE
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE |
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL |
    IGNORE RLS | EXPLAIN RLS | 
    EXPLAIN MASKING }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
TO ROLE role_name [, ...]
```

### Octroi d’autorisations d’explication pour les politiques de sécurité
<a name="grant-row-level-security"></a>

Voici la syntaxe permettant d’accorder des autorisations pour expliquer les filtres de politique de sécurité d’une requête dans le plan EXPLAIN. Les politiques de sécurité possibles incluent des politiques de sécurité au niveau des lignes et des politiques de masquage dynamique des données.

```
GRANT EXPLAIN { RLS | MASKING } TO ROLE rolename 
```

Voici la syntaxe permettant d’accorder des autorisations permettant de contourner les politiques de sécurité au niveau des lignes pour une requête. Cette syntaxe ne s’applique pas aux politiques de masquage dynamique des données.

```
GRANT IGNORE RLS TO ROLE rolename 
```

Voici la syntaxe permettant d’accorder des autorisations pour les tables de recherche à la politique de sécurité spécifiée. Les politiques de sécurité possibles incluent des politiques de sécurité au niveau des lignes et des politiques de masquage dynamique des données.

```
GRANT SELECT ON [ TABLE ] table_name [, ...]
TO { RLS | MASKING } POLICY policy_name [, ...]
```

### Octroi d'autorisations de connexion
<a name="grant-connection-permissions"></a>

Voici la syntaxe permettant d'accorder des autorisations aux utilisateurs (ou groupes) AWS IAM Identity Center fédérés pour se connecter à un groupe de travail/cluster :

```
GRANT CONNECT [ON WORKGROUP]
TO [USER] <prefix>:<username> | ROLE <prefix>:<rolename> | PUBLIC;
```

## Parameters
<a name="r_GRANT-parameters"></a>

SELECT   <a name="grant-select"></a>
Autorise la sélection de données dans une table ou une vue à l’aide d’une instruction SELECT. L’autorisation SELECT est également requise pour référencer les valeurs des colonnes existantes pour les opérations UPDATE ou DELETE.

INSERT   <a name="grant-insert"></a>
Autorise le chargement de données dans une table à l’aide d’une instruction INSERT ou d’une instruction COPY. 

UPDATE   <a name="grant-update"></a>
Autorise la mise à jour d’une colonne de table à l’aide d’une instruction UPDATE. Les opérations UPDATE nécessitent également l’autorisation SELECT, car elles doivent faire référence aux colonnes de la table pour déterminer les lignes à mettre à jour ou pour calculer les nouvelles valeurs des colonnes.

DELETE  <a name="grant-delete"></a>
Autorise la suppression d’une ligne de données d’une table. Les opérations DELETE nécessitent également l’autorisation SELECT, car elles doivent faire référence aux colonnes de la table pour déterminer les lignes à supprimer.

DROP  <a name="grant-drop"></a>
En fonction de l’objet de la base de données, accorde les autorisations suivantes à l’utilisateur ou au rôle :   
+  Pour les tables, DROP autorise la suppression d’une table ou d’une vue. Pour plus d’informations, consultez [DROP TABLE](r_DROP_TABLE.md). 
+  Pour les bases de données, DROP autorise la suppression d’une base de données. Pour plus d’informations, consultez [DROP DATABASE](r_DROP_DATABASE.md). 
+  Pour les schémas, DROP autorise la suppression d’un schéma. Pour plus d’informations, consultez [DROP SCHEMA](r_DROP_SCHEMA.md). 

REFERENCES   <a name="grant-references"></a>
Autorise la création d’une contrainte de clé étrangère. Vous devez accorder cette autorisation à la fois à la table référencée et à la table qui fait référence ; sinon, l’utilisateur ne peut pas créer la contrainte. 

ALTER  <a name="grant-alter"></a>
En fonction de l’objet de la base de données, accorde les autorisations suivantes à l’utilisateur ou au groupe d’utilisateurs :   
+ Pour les tables, ALTER autorise la modification d’une table ou d’une vue. Pour plus d’informations, consultez [ALTER TABLE](r_ALTER_TABLE.md).
+ Pour les bases de données, ALTER autorise la modification d’une base de données. Pour plus d’informations, consultez [ALTER DATABASE](r_ALTER_DATABASE.md).
+ Pour les schémas, ALTER autorise la modification d’un schéma. Pour plus d’informations, consultez [ALTER SCHEMA](r_ALTER_SCHEMA.md).
+ Pour les tables externes, ALTER autorise la modification d’une table dans un AWS Glue Data Catalog qui est activé pour Lake Formation. Cette autorisation s’applique uniquement lors de l’utilisation de Lake Formation.

TRUNCATE  <a name="grant-truncate"></a>
Accorde l’autorisation de tronquer une table. Sans cette autorisation, seul le propriétaire d’une table ou un super-utilisateur peut tronquer une table. Pour plus d’informations sur la commande TRUNCATE, consultez [TRUNCATE](r_TRUNCATE.md).

ALL [ PRIVILEGES ]   <a name="grant-all"></a>
Accorde toutes les autorisations disponibles en une seule fois à l’utilisateur ou au rôle spécifié. Le mot-clé PRIVILEGES est facultatif.  
GRANT ALL ON SCHEMA n’accorde pas les autorisations CREATE pour les schémas externes.  
Vous pouvez accorder l'autorisation ALL à une table dans un AWS Glue Data Catalog fichier activé pour Lake Formation. Dans ce cas, les autorisations individuelles (telles que SELECT, ALTER, etc.) sont enregistrées dans le catalogue de données.   
 Amazon Redshift ne prend pas en charge les autorisations RULE et TRIGGER. Pour plus d’informations, consultez la section concernant [Fonctions PostgreSQL non prises en charge](c_unsupported-postgresql-features.md). 

ASSUMEROLE  <a name="assumerole"></a>
Accorde l’autorisation d’exécuter les commandes COPY, UNLOAD, EXTERNAL FUNCTION et CREATE MODEL aux utilisateurs, aux rôles et aux groupes ayant un rôle spécifié. L’utilisateur, le rôle ou le groupe assume ce rôle lors de l’exécution de la commande spécifiée. Pour commencer à utiliser l’autorisation ASSUMEROLE, consultez [Notes d’utilisation pour l’octroi de l’autorisation ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole).

ON [ TABLE ] *nom\$1table*   <a name="grant-on-table"></a>
Accorde les autorisations spécifiées sur une table ou une vue. Le mot-clé TABLE est facultatif. Vous pouvez afficher plusieurs tables et vues dans une seule instruction.

ON ALL TABLES IN SCHEMA *nom\$1schéma*   <a name="grant-all-tables"></a>
Accorde les autorisations spécifiées sur toutes les tables et vues du schéma référencé.

( *nom\$1colonne* [,...] ) ON TABLE *nom\$1table*   <a name="grant-column-level-privileges"></a>
Accorde les autorisations spécifiées aux utilisateurs, groupes ou PUBLIC sur les colonnes spécifiées de la table ou vue Amazon Redshift.

( *column\$1list* ) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table-column"></a>
Accorde les autorisations spécifiées à un rôle IAM sur les colonnes spécifiées de la table Lake Formation dans le schéma référencé.

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table"></a>
Accorde les autorisations spécifiées à un rôle IAM sur les tables Lake Formation spécifiées dans le schéma référencé.

ON EXTERNAL SCHEMA *schema\$1name*   <a name="grant-external-schema"></a>
Accorde les autorisations spécifiées à un rôle IAM sur le schéma référencé.

ON *iam\$1role*   <a name="grant-iam_role"></a>
Accorde les autorisations spécifiées à un rôle IAM.

TO *nom\$1utilisateur*   <a name="grant-to"></a>
Indique l’utilisateur qui reçoit les autorisations.

TO IAM\$1ROLE *iam\$1role*   <a name="grant-to-iam-role"></a>
Indique le rôle IAM qui reçoit les autorisations.

WITH GRANT OPTION   <a name="grant-with-grant"></a>
Indique que l’utilisateur qui reçoit les autorisations peut à son tour accorder les mêmes autorisations à d’autres personnes. WITH GRANT OPTION ne peut pas être accordé à un groupe ou à PUBLIC.

ROLE *role\$1name*   <a name="grant-role"></a>
Octroie les autorisations à un rôle.

GROUP *group\$1name*   <a name="grant-group"></a>
Octroie les autorisations à un groupe d’utilisateurs. Il peut s’agir d’une liste séparée par des virgules pour spécifier plusieurs groupes d’utilisateurs.

PUBLIC   <a name="grant-public"></a>
Accorde les autorisations spécifiées à tous les utilisateurs, y compris aux utilisateurs créés ultérieurement. PUBLIC représente un groupe qui inclut toujours tous les utilisateurs. Les autorisations d’un utilisateur sont la somme des autorisations accordées à PUBLIC, des autorisations accordées aux groupes auxquels l’utilisateur appartient et des autorisations accordées à l’utilisateur à titre individuel.  
L’octroi de PUBLIC à une TABLE EXTERNE de Lake Formation a pour effet d’accorder l’autorisation au groupe de personnes *tout le monde* de Lake Formation.

CONNECTEZ [SUR LE GROUPE DE TRAVAIL] À \$1[UTILISATEUR] <prefix>: <username>\$1 RÔLE <prefix>: <rolename>\$1 PUBLIC\$1  
Accorde l'autorisation de se connecter à un groupe de travail ou à un cluster à des utilisateurs ou à des groupes AWS IAM Identity Center fédérés. Le préfixe identifie le fournisseur d'identité. Lorsqu'elle est accordée à PUBLIC, l'autorisation s'applique à tous les utilisateurs AWS IAM Identity Center fédérés, y compris les utilisateurs créés ultérieurement. Cette autorisation n'est applicable que lorsque les autorisations fédérées Amazon Redshift sont activées sur le groupe de travail ou le cluster.

CREATE   <a name="grant-create"></a>
En fonction de l’objet de la base de données, accorde les autorisations suivantes à l’utilisateur ou au groupe d’utilisateurs :  
+ Pour les bases de données, CREATE permet aux utilisateurs de créer des schémas au sein de la base de données.
+ Pour les schémas, CREATE permet aux utilisateurs de créer des objets au sein d’un schéma. Pour renommer un objet, l’utilisateur doit disposer de l’autorisation CREATE et posséder l’objet à renommer.
+ CREATE ON SCHEMA n’est pas pris en charge pour les schémas externes Amazon Redshift Spectrum. Pour accorder l’utilisation de tables externes dans un schéma externe, accordez USAGE ON SCHEMA aux utilisateurs qui nécessitent un accès. Seul le propriétaire d’un schéma externe ou un super-utilisateur est autorisé à créer des tables externes dans le schéma externe. Pour transférer la propriété d’un schéma externe, utilisez [ALTER SCHEMA](r_ALTER_SCHEMA.md) pour modifier le propriétaire. 

TEMPORARY \$1 TEMP   <a name="grant-temporary"></a>
Accorde l’autorisation de créer des tables temporaires dans la base de données spécifiée. Pour exécuter des requêtes Amazon Redshift Spectrum, l’utilisateur de la base de données doit avoir l’autorisation d’y créer des tables temporaires.   
Par défaut, les utilisateurs ont l’autorisation de créer des tables temporaires grâce à leur appartenance automatique au groupe PUBLIC. Pour retirer à tout utilisateur l’autorisation de créer des tables temporaires, révoquez l’autorisation TEMP du groupe PUBLIC. Accordez ensuite explicitement l’autorisation de créer des tables temporaires à des utilisateurs ou à des groupes d’utilisateurs spécifiques.

ON DATABASE *nom\$1db*   <a name="grant-database"></a>
Accorde les autorisations spécifiées à une base de données.

USAGE   <a name="grant-usage"></a>
Accorde l’autorisation USAGE sur un schéma spécifique, ce qui rend les objets de ce schéma accessibles aux utilisateurs. Les actions spécifiques sur ces objets doivent être accordées séparément (par exemple, l’autorisation SELECT ou UPDATE sur les tables) pour les schémas Amazon Redshift locaux. Par défaut, tous les utilisateurs disposent de l’autorisation CREATE et USAGE sur le schéma PUBLIC.   
 Lorsque vous autorisez USAGE pour des schémas externes à l’aide de la syntaxe ON SCHEMA, vous n’avez pas besoin d’accorder des actions séparément sur les objets du schéma externe. Les autorisations de catalogue correspondantes contrôlent les autorisations granulaires sur les objets de schéma externes. 

ON SCHEMA *nom\$1schéma*   <a name="grant-schema"></a>
Accorde les autorisations spécifiées à un schéma.  
GRANT CREATE ON SCHEMA et l’autorisation CREATE dans GRANT ALL ON SCHEMA ne sont pas pris en charge pour les schémas externes Amazon Redshift Spectrum. Pour accorder l’utilisation de tables externes dans un schéma externe, accordez USAGE ON SCHEMA aux utilisateurs qui nécessitent un accès. Seul le propriétaire d’un schéma externe ou un super-utilisateur est autorisé à créer des tables externes dans le schéma externe. Pour transférer la propriété d’un schéma externe, utilisez [ALTER SCHEMA](r_ALTER_SCHEMA.md) pour modifier le propriétaire. 

EXECUTE ON ALL FUNCTIONS IN SCHEMA *nom\$1schéma*  <a name="grant-all-functions"></a>
Accorde les autorisations spécifiées à toutes les fonctions du schéma référencé.  
Amazon Redshift ne prend pas en charge les instructions GRANT ou REVOKE pour les entrées intégrées pg\$1proc définies dans l’espace de noms pg\$1catalog. 

EXECUTE ON PROCEDURE *procedure\$1name*   <a name="grant-procedure"></a>
Accorde l’autorisation EXECUTE à une procédure stockée spécifique. Comme les noms de procédures stockées peuvent être surchargés, vous devez inclure la liste des arguments de la procédure. Pour plus d'informations, consultez [Dénomination des procédures stockées](stored-procedure-naming.md).

EXECUTE ON ALL PROCEDURES IN SCHEMA *nom\$1schéma*  <a name="grant-all-procedures"></a>
Accorde les autorisations spécifiées à toutes les procédures stockées du schéma référencé.

USAGE ON LANGUAGE *nom\$1langage*   
Accorde l’autorisation USAGE à une langue.   
À compter du 1er novembre 2025, Amazon Redshift ne prendra plus en charge la création de nouveaux Python. UDFs UDFs Le Python existant continuera de fonctionner jusqu'au 30 juin 2026. À compter du 1er juillet 2026, Amazon Redshift ne prendra plus en charge Python. UDFs Nous vous recommandons de migrer votre Python existant UDFs vers Lambda UDFs avant le 1er novembre 2025. Pour plus d'informations sur la création et l'utilisation de Lambda UDFs, consultez. [Lambda scalaire UDFs](udf-creating-a-lambda-sql-udf.md) Pour plus d'informations sur la conversion de Python existant UDFs en Lambda UDFs, 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/).
L'autorisation USAGE ON LANGUAGE est requise pour créer des fonctions définies par l'utilisateur (UDFs) en exécutant la [CREATE FUNCTION](r_CREATE_FUNCTION.md) commande. Pour de plus amples informations, veuillez consulter [Sécurité et autorisations des fonctions définies par l’utilisateur](udf-security-and-privileges.md).   
L’autorisation USAGE ON LANGUAGE est requise pour créer des procédures stockées définies par l’utilisateur (UDF) en exécutant la commande [CREATE PROCEDURE](r_CREATE_PROCEDURE.md). Pour de plus amples informations, veuillez consulter [Sécurité et privilèges des procédures stockées](stored-procedure-security-and-privileges.md).  
Pour Python UDFs, utilisez`plpythonu`. Pour SQL UDFs, utilisez`sql`. Pour les procédures stockées, utilisez `plpgsql`.

ON COPY JOB *job\$1name*  <a name="on-copy-job"></a>
Accorde les autorisations spécifiées à une tâche copy.

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]   <a name="grant-for"></a>
Spécifie la commande SQL pour laquelle l’autorisation est accordée. Vous pouvez spécifier ALL pour accorder l’autorisation sur les instructions COPY, UNLOAD, EXTERNAL FUNCTION et CREATE MODEL. Cette clause ne s’applique qu’à l’octroi de l’autorisation ASSUMEROLE.

ALTER  
Accorde l’autorisation ALTER aux utilisateurs pour ajouter ou supprimer des objets d’une unité de partage des données, ou pour définir la propriété PUBLICACCESSIBLE. Pour plus d’informations, consultez [ALTER DATASHARE](r_ALTER_DATASHARE.md).

SHARE  
Accorde des autorisations aux utilisateurs et aux groupes d’utilisateurs pour ajouter des consommateurs de données à une unité de partage des données. Cette autorisation est requise pour permettre au consommateur particulier (compte ou espace de noms) d’accéder à l’unité de partage des données à partir de ses clusters. Le consommateur peut être le même compte ou un AWS compte différent, avec le même espace de noms de cluster ou un autre, tel que spécifié par un identifiant unique global (GUID).

ON DATASHARE *datashare\$1name*   <a name="grant-datashare"></a>
Accorde les autorisations spécifiées sur l’unité de partage des données référencée. Pour obtenir des informations sur la granularité du contrôle d’accès des consommateurs, consultez [Partage de données à différents niveaux dans Amazon Redshift](datashare-overview.md#granularity).

USAGE  
Lorsque le privilège USAGE est accordé à un compte consommateur ou à un espace de noms au sein du même compte, le compte ou l’espace de noms spécifique du compte peut accéder à l’unité de partage des données et aux objets de l’unité de partage des données en lecture seule. 

TO NAMESPACE ’clusternamespace GUID’  
Indique un espace de noms dans le même compte où les consommateurs peuvent recevoir les autorisations spécifiées pour l’unité de partage des données. Les espaces de noms utilisent un GUID alphanumérique 128 bits.

TO ACCOUNT ’accountnumber’ [ VIA DATA CATALOG ]  
Indique le numéro d’un autre compte dont les consommateurs peuvent recevoir les autorisations spécifiées pour l’unité de partage des données. La spécification « VIA DATA CATALOG » indique que vous autorisez un compte Lake Formation à utiliser l’unité de partage des données. L’omission de ce paramètre signifie que vous accordez l’utilisation à un compte propriétaire du cluster.

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="grant-datashare"></a>
Accorde les autorisations d’utilisation spécifiées à la base de données spécifiée qui est créée dans l’unité de partage des données spécifiée.

ON SCHEMA* shared\$1schema*   <a name="grant-datashare"></a>
Accorde les autorisations spécifiées au schéma spécifié qui est créé dans l’unité de partage des données spécifiée.

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
Spécifie les objets de base de données auxquels accorder une autorisation. Les paramètres situés après IN définissent l’étendue de l’autorisation accordée.

CREATE MODEL  
Accorde l’autorisation CREATE MODEL à des utilisateurs ou groupes d’utilisateurs spécifiques.

ON MODEL *model\$1name*  
Accorde l’autorisation EXECUTE à un modèle spécifique. 

ACCESS CATALOG  
Accorde l’autorisation d’afficher les métadonnées pertinentes des objets auxquels le rôle a accès.

\$1 role \$1 [, ...]  
Rôle à attribuer à un autre rôle, à un utilisateur ou à PUBLIC.  
PUBLIC représente un groupe qui inclut toujours tous les utilisateurs. Les autorisations d’un utilisateur sont la somme des autorisations accordées à PUBLIC, des autorisations accordées aux groupes auxquels l’utilisateur appartient et des autorisations accordées à l’utilisateur à titre individuel.

TO \$1 \$1 *user\$1name* [ WITH ADMIN OPTION ] \$1 \$1 role \$1[, ...]  
Attribue le rôle spécifié à un utilisateur spécifié avec WITH ADMIN OPTION, à un autre rôle ou à PUBLIC.  
La clause WITH ADMIN OPTION fournit les options d’administration de tous les rôles accordés à tous les bénéficiaires. 

EXPLAIN \$1 RLS \$1 MASKING \$1 TO ROLE *rolename*  
Accorde à un rôle l’autorisation d’expliquer les filtres de politique de sécurité d’une requête dans le plan EXPLAIN. RLS accorde l’autorisation d’explication pour les filtres de politique de sécurité au niveau des lignes. MASKING accorde l’autorisation d’explication pour les filtres de politique de masquage dynamique des données.

IGNORE RLS TO ROLE *rolename*   
Accorde à un rôle l’autorisation de contourner les politiques de sécurité au niveau des lignes pour une requête.

TO \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
Indique la politique de sécurité qui reçoit les autorisations. TO RLS POLICY indique une politique de sécurité de niveau des lignes. TO MASKING POLICY indique une politique de masquage dynamique des données.

## Notes d’utilisation
<a name="r_GRANT-usage-notes-link"></a>

Pour en savoir plus sur les notes d’utilisation de GRANT, consultez [Notes d’utilisation](r_GRANT-usage-notes.md).

## Exemples
<a name="r_GRANT-examples-link"></a>

Pour des exemples d’utilisation de GRANT, consultez [Exemples](r_GRANT-examples.md).

# Notes d’utilisation
<a name="r_GRANT-usage-notes"></a>

Pour attribuer des privilèges sur un objet, vous devez répondre à l’un des critères suivants :
+ Être le propriétaire de l’objet.
+ Être un super-utilisateur.
+ Avoir un privilège accordé pour cet objet et ce privilège.

Par exemple, la commande suivante autorise l’utilisateur HR à exécuter des commandes SELECT sur la table des employés et à accorder et révoquer le même privilège aux autres utilisateurs.

```
grant select on table employees to HR with grant option;
```

HR ne peut pas accorder de privilèges pour une opération autre que SELECT, ou sur toute autre table que celle des employés. 

Par exemple, la commande suivante autorise l’utilisateur HR à exécuter des commandes ALTER sur la table des employés et à accorder et révoquer le même privilège aux autres utilisateurs.

```
grant ALTER on table employees to HR with grant option;
```

HR ne peut pas accorder de privilèges pour une opération autre que ALTER ou sur toute autre table que celle des employés. 

Le fait d’avoir les privilèges octroyés sur une vue n’implique pas d’avoir les privilèges sur les tables sous-jacentes. De même, le fait d’avoir les privilèges octroyés sur un schéma n’implique pas d’avoir les privilèges sur les tables du schéma. Accordez explicitement l’accès aux tables sous-jacentes.

Pour accorder des privilèges à une AWS Lake Formation table, le rôle IAM associé au schéma externe de la table doit être autorisé à accorder des privilèges à la table externe. L’exemple suivant crée un schéma externe avec un rôle IAM `myGrantor` associé. Le rôle IAM `myGrantor` a l’autorisation d’accorder des autorisations. La commande GRANT utilise l’autorisation du rôle IAM `myGrantor` associé au schéma externe pour accorder des autorisations au rôle IAM `myGrantee`.

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
grant select
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

Si vous accordez des privilèges GRANT ALL à un rôle IAM, des privilèges individuels sont accordés dans le catalogue de données Lake Formation. Par exemple, les privilèges GRANT ALL suivants permettent aux privilèges individuels accordés (SELECT, ALTER, DROP, DELETE et INSERT) de s’afficher dans la console Lake Formation.

```
grant all
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

Les super-utilisateurs peuvent accéder à tous les objets, quelle que soit les commandes GRANT et REVOKE qui définissent les privilèges d’objet.

## Notes d’utilisation pour le contrôle d’accès de niveau colonne
<a name="r_GRANT-usage-notes-clp"></a>

Les notes d’utilisation suivantes s’appliquent aux privilèges de niveau colonne sur les tables et les vues Amazon Redshift. Ces notes décrivent des tableaux ; les mêmes notes s’appliquent aux vues, sauf signalement explicite d’une exception. 
+ Pour une table Amazon Redshift, vous pouvez accorder uniquement les privilèges SELECT et UPDATE au niveau de la colonne. Pour une vue Amazon Redshift, vous pouvez accorder uniquement le privilège SELECT au niveau de la colonne. 
+ Le mot-clé ALL est synonyme des privilèges combinés SELECT et UPDATE lorsqu’ils sont utilisés dans le contexte d’un GRANT de niveau colonne sur une table. 
+ Si vous ne disposez pas du privilège SELECT sur toutes les colonnes d’une table, l’opération SELECT \$1 ne renvoie que les colonnes auxquelles vous avez accès. Lorsque vous utilisez une vue, une opération SELECT \$1 tente d’accéder à toutes les colonnes de la vue. Si vous n’êtes pas autorisé à accéder à toutes les colonnes, ces requêtes échouent avec un message d’erreur de refus d’autorisation.
+ SELECT \$1 ne s’étend pas aux seules colonnes accessibles dans les cas suivants :
  + Vous ne pouvez pas créer une vue normale avec seulement des colonnes accessibles en utilisant SELECT \$1.
  + Vous ne pouvez pas créer une vue matérialisée avec seulement des colonnes accessibles en utilisant SELECT \$1.
+ Si vous disposez du privilège SELECT ou UPDATE sur une table ou une vue et que vous ajoutez une colonne, vous disposez toujours des mêmes privilèges sur la table ou la vue et donc, sur toutes ses colonnes. 
+ Seul le propriétaire d’une table ou un superutilisateur peut accorder des privilèges de niveau colonne. 
+ La clause WITH GRANT OPTION n’est pas prise en charge pour les privilèges de niveau colonne.
+ Vous ne pouvez pas détenir le même privilège au niveau de la table et de la colonne. Par exemple, l’utilisateur `data_scientist` ne peut pas avoir à la fois le privilège SELECT sur la table `employee` et le privilège SELECT sur la colonne `employee.department`. Tenez compte des résultats suivants lorsque vous accordez le même privilège à une table et à une colonne de la table :
  + Si un utilisateur dispose d’un privilège de niveau table sur une table, l’octroi du même privilège au niveau de la colonne n’a aucun effet. 
  + Si un utilisateur dispose d’un privilège de niveau table sur une table, la révocation du même privilège pour une ou plusieurs colonnes de la table renvoie une erreur. Au lieu de cela, révoquez le privilège au niveau de la table. 
  + Si un utilisateur dispose d’un privilège au niveau de la colonne, l’octroi du même privilège au niveau de la table renvoie une erreur. 
  + Si un utilisateur dispose d’un privilège au niveau de la colonne, la révocation du même privilège au niveau de la table révoque les privilèges de colonne et de table pour toutes les colonnes de la table. 
+ Vous ne pouvez pas accorder de privilèges de niveau colonne sur les vues de liaison tardive.
+ Pour créer une vue matérialisée, vous devez disposer du privilège SELECT au niveau de la table sur les tables de base. Même si vous disposez de privilèges au niveau de colonnes spécifiques, vous ne pouvez pas créer de vue matérialisée uniquement avec ces colonnes. Toutefois, vous pouvez accorder le privilège SELECT aux colonnes d’une vue matérialisée, de la même manière que les vues régulières. 
+ Pour rechercher des privilèges de niveau colonne, utilisez la vue [PG\$1ATTRIBUTE\$1INFO](r_PG_ATTRIBUTE_INFO.md). 

## Notes d’utilisation pour l’octroi de l’autorisation ASSUMEROLE
<a name="r_GRANT-usage-notes-assumerole"></a>

Les notes d’utilisation suivantes s’appliquent à l’octroi de l’autorisation ASSUMEROLE dans Amazon Redshift. 

Vous utilisez l’autorisation ASSUMEROLE pour contrôler les autorisations d’accès des rôles IAM pour les utilisateurs, les rôles ou les groupes de bases de données sur des commandes telles que COPY, UNLOAD, EXTERNAL FUNCTION ou CREATE MODEL. Après avoir accordé l’autorisation ASSUMEROLE à un utilisateur, un rôle ou un groupe pour un rôle IAM, l’utilisateur, le rôle ou le groupe peut assumer ce rôle lors de l’exécution de la commande. L’autorisation ASSUMEROLE vous permet d’accorder l’accès aux autorisations appropriées en fonction des besoins.

Seul un super-utilisateur de la base de données peut accorder ou révoquer l’autorisation ASSUMEROLE pour les utilisateurs, les rôles et les groupes. Un super-utilisateur conserve toujours l’autorisation ASSUMEROLE.

Pour autoriser l’utilisation de l’autorisation ASSUMEROLE pour les utilisateurs, les rôles et les groupes, un super-utilisateur effectue les deux actions suivantes :
+ Exécuter l’instruction suivante une fois sur le cluster :

  ```
  revoke assumerole on all from public for all;
  ```
+ Accordez l’autorisation ASSUMEROLE aux utilisateurs, aux rôles et aux groupes pour les autorisations appropriées.

Vous pouvez spécifier la création de chaînes de rôles dans la clause ON lorsque vous accordez l’autorisation ASSUMEROLE. Vous utilisez des virgules pour séparer les rôles dans une chaîne de rôles, par exemple `Role1,Role2,Role3`. Si la création de chaînes de rôles a été spécifiée lors de l’octroi de l’autorisation ASSUMEROLE, vous devez spécifier la chaîne de rôles lors de l’exécution des autorisations accordées par l’autorisation ASSUMEROLE. Vous ne pouvez pas spécifier des rôles individuels dans la chaîne de rôles lorsque vous exécutez des autorisations accordées par l’autorisation ASSUMEROLE. Par exemple, si un utilisateur, un rôle ou un groupe se voit attribuer la chaîne de rôles `Role1,Role2,Role3`, vous ne pouvez pas spécifier uniquement `Role1` pour effectuer des opérations. 

Si un utilisateur tente d’effectuer une opération COPY, UNLOAD, EXTERNAL FUNCTION ou CREATE MODEL et n’a pas obtenu l’autorisation ASSUMEROLE, un message semblable au suivant s’affiche.

```
ERROR:  User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY 
```

Pour répertorier les utilisateurs qui ont obtenu l’accès aux rôles et commandes IAM via l’autorisation ASSUMEROLE, consultez [HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md). Pour répertorier les rôles IAM et les autorisations de commande qui ont été accordées à un utilisateur que vous spécifiez, consultez [PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md). Pour répertorier les utilisateurs, les rôles et les groupes auxquels l’accès a été accordé à un rôle IAM que vous spécifiez, consultez [PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md).

## Notes d’utilisation pour l’octroi d’autorisations de machine learning
<a name="r_GRANT-usage-notes-create-model"></a>

Vous ne pouvez pas accorder ou révoquer directement les autorisations liées à une fonction ML. Une fonction ML appartient à un modèle ML et les autorisations sont contrôlées par le biais du modèle. En revanche, vous pouvez accorder des autorisations liées au modèle ML. L’exemple suivant montre comment autoriser tous les utilisateurs à exécuter la fonction ML associée au modèle `customer_churn`.

```
GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;
```

Vous pouvez également accorder toutes les autorisations à un utilisateur pour le modèle ML `customer_churn`.

```
GRANT ALL on MODEL customer_churn TO ml_user;
```

L’octroi de l’autorisation `EXECUTE` liée à une fonction de ML échouera s’il existe une fonction de ML dans le schéma, même si cette fonction de ML dispose déjà de l’autorisation `EXECUTE` par le biais de `GRANT EXECUTE ON MODEL`. Nous vous recommandons d’utiliser un schéma distinct lorsque vous utilisez la commande `CREATE MODEL` afin de conserver les fonctions ML dans un schéma distinct. L’exemple suivant vous montre comment procéder.

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# Exemples
<a name="r_GRANT-examples"></a>

 L’exemple suivant accorde le privilège SELECT sur la table SALES à l’utilisateur `fred`. 

```
grant select on table sales to fred;
```

L’exemple suivant accorde le privilège SELECT sur toutes les tables du schéma QA\$1TICKIT à l’utilisateur `fred`. 

```
grant select on all tables in schema qa_tickit to fred;
```

L’exemple suivant accorde tous les privilèges de schéma sur le schéma QA\$1TICKIT au groupe d’utilisateurs QA\$1USERS. Les privilèges de schéma sont CREATE et USAGE. USAGE accorde aux utilisateurs l’accès aux objets du schéma, mais n’accorde pas les privilèges tels que INSERT or SELECT sur ces objets. Accordez des privilèges sur chaque objet séparément.

```
create group qa_users;
grant all on schema qa_tickit to group qa_users;
```

L’exemple suivant accorde tous les privilèges sur la table SALES du schéma QA\$1TICKIT à tous les utilisateurs du groupe QA\$1USERS.

```
grant all on table qa_tickit.sales to group qa_users;
```

L’exemple suivant accorde tous les privilèges sur la table SALES du schéma QA\$1TICKIT à tous les utilisateurs des groupes QA\$1USERS et RO\$1USERS.

```
grant all on table qa_tickit.sales to group qa_users, group ro_users;
```

L’exemple suivant accorde le privilège DROP sur la table SALES du schéma QA\$1TICKIT à tous les utilisateurs du groupe QA\$1USERS.

```
grant drop on table qa_tickit.sales to group qa_users;>
```

La séquence de commandes suivante montre comment l’accès à un schéma n’accorde pas de privilèges sur une table du schéma. 

```
create user schema_user in group qa_users password 'Abcd1234';
create schema qa_tickit;
create table qa_tickit.test (col1 int);
grant all on schema qa_tickit to schema_user;

set session authorization schema_user;
select current_user;


current_user
--------------
schema_user
(1 row)


select count(*) from qa_tickit.test;


ERROR: permission denied for relation test [SQL State=42501]


set session authorization dw_user;
grant select on table qa_tickit.test to schema_user;
set session authorization schema_user;
select count(*) from qa_tickit.test;


count
-------
0
(1 row)
```

La séquence de commandes suivante montre comment l’accès à une vue n’implique pas l’accès à ses tables sous-jacentes. L’utilisateur appelé VIEW\$1USER ne peut pas sélectionner à partir de la table DATE, même si cet utilisateur s’est vu accorder tous les privilèges sur VIEW\$1DATE. 

```
create user view_user password 'Abcd1234';
create view view_date as select * from date;
grant all on view_date to view_user;
set session authorization view_user;
select current_user;


current_user
--------------
view_user
(1 row)


select count(*) from view_date;


count
-------
365
(1 row)


select count(*) from date;


ERROR:  permission denied for relation date
```

L’exemple suivant accorde le privilège SELECT sur les colonnes `cust_name` et `cust_phone` de la table `cust_profile` à l’utilisateur `user1`. 

```
grant select(cust_name, cust_phone) on cust_profile to user1;
```

L’exemple suivant accorde le privilège SELECT sur les colonnes `cust_name` et `cust_phone` et le privilège UPDATE sur la colonne `cust_contact_preference` de la table `cust_profile` au groupe `sales_group`. 

```
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
```

L’exemple suivant montre l’utilisation du mot-clé ALL pour accorder au groupe `sales_admin` les privilèges SELECT et UPDATE sur trois colonnes de la table `cust_profile`. 

```
grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;
```

L’exemple suivant accorde à l’utilisateur `user2` le privilège SELECT sur la colonne `cust_name` de la vue `cust_profile_vw`. 

```
grant select(cust_name) on cust_profile_vw to user2;
```

## Exemples d’octroi d’accès à des unités de partage des données
<a name="r_GRANT-examples-datashare"></a>

Les exemples suivants illustrent les autorisations d’utilisation de partage de données GRANT sur une base de données spécifique ou un schéma créé à partir d’une unité de partage des données. 

Dans l’exemple suivant, un administrateur côté producteur accorde à l’espace de noms spécifié l’autorisation USAGE sur l’unité de partage des données `salesshare`. 

```
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

Dans l’exemple suivant, un administrateur côté consommateur accorde à `Bob` l’autorisation USAGE sur la base de données `sales_db`.

```
GRANT USAGE ON DATABASE sales_db TO Bob;
```

Dans l’exemple suivant, un administrateur côté consommateur accorde au rôle `Analyst_role`l’autorisation GRANT USAGE sur le schéma `sales_schema`. `sales_schema` est un schéma externe qui pointe vers sales\$1db.

```
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
```

À ce stade, `Bob` et `Analyst_role` peuvent accéder à tous les objets de base de données dans `sales_schema` et`sales_db`.

L’exemple suivant montre comment accorder une autorisation de niveau objet supplémentaire pour les objets d’une base de données partagée. Ces autorisations supplémentaires ne sont nécessaires que si la commande CREATE DATABASE utilisée pour créer la base de données partagée utilisait la clause WITH PERMISSIONS. Si la commande CREATE DATABASE n’a pas utilisé la clause WITH PERMISSIONS, accorder l’autorisation USAGE sur la base de données partagée donne un accès complet à tous les objets de cette base de données.

```
GRANT SELECT ON sales_db.sales_schema.tickit_sales_redshift to Bob;
```

## Exemples d’octroi d’autorisations étendues
<a name="r_GRANT-examples-scoped"></a>

L’exemple suivant autorise le rôle `Sales` à utiliser tous les schémas actuels et futurs de la base de données `Sales_db`.

```
GRANT USAGE FOR SCHEMAS IN DATABASE Sales_db TO ROLE Sales;
```

L’exemple suivant accorde à l’utilisateur `alice` l’autorisation SELECT pour toutes les tables actuelles et futures de la base de données `Sales_db`, et donne aussi à `alice` l’autorisation d’accorder à d’autres utilisateurs des autorisations étendues sur les tables de `Sales_db`.

```
GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;
```

L’exemple suivant accorde à l’utilisateur `bob` l’autorisation EXECUTE pour les fonctions du schéma `Sales_schema`.

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

L’exemple suivant accorde au `Sales` rôle toutes les autorisations pour toutes les tables du schéma `ShareSchema` de la base de données `ShareDb`. Lorsque vous spécifiez le schéma, vous pouvez spécifier la base de données du schéma en utilisant le format en deux parties `database.schema`.

```
GRANT ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema TO ROLE Sales;
```

L’exemple suivant est le même que le précédent. Vous pouvez spécifier la base de données à l’aide du mot-clé `DATABASE` au lieu d’utiliser un format en deux parties.

```
GRANT ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb TO ROLE Sales;
```

## Exemples d’octroi du privilège ASSUMEROLE
<a name="r_GRANT-examples-assumerole"></a>

Voici des exemples d’octroi du privilège ASSUMEROLE.

L’exemple suivant montre l’instruction REVOKE qu’un super-utilisateur exécute une fois sur le cluster pour activer l’utilisation du privilège ASSUMEROLE pour les utilisateurs et les groupes. Ensuite, le super-utilisateur accorde le privilège ASSUMEROLE aux utilisateurs et aux groupes pour les commandes appropriées. Pour obtenir des informations sur l’activation du privilège ASSUMEROLE pour les utilisateurs et les groupes, consultez [Notes d’utilisation pour l’octroi de l’autorisation ASSUMEROLE](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole).

```
revoke assumerole on all from public for all;
```

L’exemple suivant accorde le privilège ASSUMEROLE à l’utilisateur `reg_user1` pour le rôle IAM `Redshift-S3-Read` pour effectuer des opérations COPY. 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read'
to reg_user1 for copy;
```

L’exemple suivant accorde le privilège ASSUMEROLE à l’utilisateur `reg_user1` pour la chaîne de rôles IAM `RoleA`, `RoleB` pour effectuer des opérations UNLOAD. 

```
grant assumerole
on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB'
to reg_user1
for unload;
```

Voici un exemple de commande UNLOAD utilisant la chaîne de rôles IAM `RoleA`, `RoleB`.

```
unload ('select * from venue limit 10')
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

L’exemple suivant accorde le privilège ASMEROLE à l’utilisateur `reg_user1` pour le rôle IAM `Redshift-Exfunc` pour créer des fonctions externes. 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc'
to reg_user1 for external function;
```

L’exemple suivant accorde le privilège ASSUMEROLE à l’utilisateur `reg_user1` pour le rôle IAM `Redshift-model` pour créer des modèles de machine learning. 

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML'
to reg_user1 for create model;
```

## Exemples d’octroi de privilèges ROLE
<a name="r_GRANT-examples-role"></a>

L’exemple suivant accorde le rôle sample\$1role1 à l’utilisateur user1.

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
```

L’exemple suivant accorde le rôle sample\$1role1 à l’utilisation user1 avec la clause WITH ADMIN OPTION, définit la séance actuelle pour user1, et user1 accorde le rôle sample\$1role1 à l’utilisateur user2.

```
GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION;
SET SESSION AUTHORIZATION user1;
GRANT ROLE sample_role1 TO user2;
```

L’exemple suivant accorde le rôle sample\$1role1 au rôle sample\$1role2.

```
GRANT ROLE sample_role1 TO ROLE sample_role2;
```

L’exemple suivant accorde le rôle sample\$1role2 au rôle sample\$1role3 et au rôle sample\$1role4. Ensuite, il tente d’accorder le rôle sample\$1role3 au rôle sample\$1role1.

```
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2;
ERROR: cannot grant this role, a circular dependency was detected between these roles
```

L’exemple suivant accorde les privilèges système CREATE USER au rôle sample\$1role1.

```
GRANT CREATE USER TO ROLE sample_role1;
```

L’exemple suivant accorde le rôle défini par le système `sys:dba` à l’utilisateur user1.

```
GRANT ROLE sys:dba TO user1;
```

L’exemple suivant tente d’accorder le rôle sample\$1role3 dans une dépendance circulaire au rôle sample\$1role2.

```
CREATE ROLE sample_role3;
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2; -- fail
ERROR:  cannot grant this role, a circular dependency was detected between these roles
```

# INSERT
<a name="r_INSERT_30"></a>

**Topics**
+ [Syntaxe](#r_INSERT_30-synopsis)
+ [Parameters](#r_INSERT_30-parameters)
+ [Notes d’utilisation](#r_INSERT_30_usage_notes)
+ [Exemples INSERT](c_Examples_of_INSERT_30.md)

Insère de nouvelles lignes dans une table. Vous pouvez insérer une seule ligne avec la syntaxe VALUES, plusieurs lignes avec la syntaxe VALUES, ou une ou plusieurs lignes définies par les résultats d’une requête (INSERT INTO...SELECT).

**Note**  
Nous vous encourageons vivement à utiliser la commande [COPY](r_COPY.md) pour charger de grandes quantités de données. La lenteur liée à l’utilisation d’instructions INSERT pour remplir une table peut être prohibitive. Sinon, si vos données existent déjà dans d’autres tables de bases de données Amazon Redshift, utilisez INSERT INTO SELECT ou [CREATE TABLE AS](r_CREATE_TABLE_AS.md) pour améliorer les performances. Pour plus d’informations sur l’utilisation de la commande COPY pour charger les tables, consultez [Chargement de données dans Amazon Redshift](t_Loading_data.md).

**Note**  
La taille maximale d’une instruction SQL est de 16 Mo.

## Syntaxe
<a name="r_INSERT_30-synopsis"></a>

```
INSERT INTO table_name [ ( column [, ...] ) ]
{DEFAULT VALUES |
VALUES ( { expression | DEFAULT } [, ...] )
[, ( { expression | DEFAULT } [, ...] )
[, ...] ] |
query }
```

## Parameters
<a name="r_INSERT_30-parameters"></a>

 *table\$1name*   
Table temporaire ou permanente. Seul le propriétaire de la table ou un utilisateur avec le privilège INSERT sur la table peut insérer des lignes. Si vous utilisez la clause *query* pour insérer des lignes, vous devez avoir le privilège SELECT sur les tables nommées de la requête.   
Utilisez INSERT (table externe) pour insérer les résultats d’une requête SELECT dans des tables existantes du catalogue externe. Pour plus d'informations, consultez [INSERT (table externe)](r_INSERT_external_table.md).

 *column*   
Vous pouvez insérer des valeurs dans une ou plusieurs colonnes de la table. Vous pouvez afficher les noms de colonne cible dans n’importe quel ordre. Si vous ne spécifiez pas une liste de colonnes, les valeurs à insérer doivent correspondre aux Colonnes de la table, dans l’ordre dans lequel elles ont été déclarés dans l’instruction CREATE TABLE. Si le nombre de valeurs à insérer est inférieur au nombre de colonnes de la table, les *n* premières colonnes sont chargées.   
La valeur par défaut déclaré ou une valeur null est chargée dans l’une des colonnes qui n’est pas répertoriée (implicitement ou explicitement) dans l’instruction INSERT. 

DEFAULT VALUES   
Si des valeurs par défaut ont été attribuées aux colonnes de la table lorsque la table a été créée, utilisez ces mots-clés pour insérer une ligne qui se compose entièrement de valeurs par défaut. Si aucun des colonnes n’a de valeurs par défaut, des valeurs null sont insérées dans ces colonnes. Si aucune des colonnes n’est déclarée NOT NULL, l’instruction INSERT renvoie une erreur. 

VALUES   
Utilisez ce mot-clé pour insérer une ou plusieurs lignes, chaque ligne consistant en une ou plusieurs valeurs. La liste VALUES de chaque ligne doit être alignée avec la liste des colonnes. Pour insérer plusieurs lignes, utilisez une virgule de séparation entre chaque liste d’expressions. Ne répétez pas le mot-clé VALUES. Toutes les listes VALUES d’une instruction INSERT à plusieurs lignes doivent contenir le même nombre de valeurs. 

 *expression*   
Une expression ou valeur unique analysée comme valeur unique. Chaque valeur doit être compatible avec le type de données de la colonne où elle est insérée. Si possible, une valeur dont le type de données ne correspond pas au type de données déclaré de la colonne est automatiquement convertie en un type de données compatible. Par exemple :   
+ Une valeur décimale `1.1` est insérée dans une colonne INT en tant que `1`. 
+ Une valeur décimale `100.8976` est insérée dans une colonne DEC(5,2) en tant que `100.90`. 
Vous pouvez convertir explicitement une valeur en un type de données compatible en incluant la syntaxe de cast de type dans l’expression. Par exemple, si la colonne COL1 de la table T1 est une colonne CHAR (3) :   

```
insert into t1(col1) values('Incomplete'::char(3));
```
Cette instruction insère la valeur `Inc` dans la colonne.   
Pour une instruction INSERT VALUES à une seule valeur, vous pouvez utiliser une sous-requête scalaire comme expression. Le résultat de la sous-requête est inséré dans la colonne appropriée.   
Les sous-requêtes ne sont pas prises en charge comme expressions pour les instructions INSERT VALUES à plusieurs lignes. 

DEFAULT   
Utilisez ce mot-clé pour insérer la valeur par défaut d’une colonne, comme défini lors de la création de la table. S’il n’existe aucune valeur par défaut pour une colonne, une valeur null est insérée. Vous ne pouvez pas insérer une valeur par défaut dans une colonne ayant une contrainte NOT NULL si cette colonne n’a pas une valeur par défaut explicite qui lui est attribuée dans l’instruction CREATE TABLE. 

 *query*   
Insérez une ou plusieurs lignes dans la table en définissant une requête. Toutes les lignes que la requête produit sont insérées dans la table. La requête doit renvoyer une liste de colonnes compatible avec les colonnes de la table, mais les noms de colonnes n’ont pas à correspondre. 

## Notes d’utilisation
<a name="r_INSERT_30_usage_notes"></a>

**Note**  
Nous vous encourageons vivement à utiliser la commande [COPY](r_COPY.md) pour charger de grandes quantités de données. La lenteur liée à l’utilisation d’instructions INSERT pour remplir une table peut être prohibitive. Sinon, si vos données existent déjà dans d’autres tables de bases de données Amazon Redshift, utilisez INSERT INTO SELECT ou [CREATE TABLE AS](r_CREATE_TABLE_AS.md) pour améliorer les performances. Pour plus d’informations sur l’utilisation de la commande COPY pour charger les tables, consultez [Chargement de données dans Amazon Redshift](t_Loading_data.md).

Le format de données pour les valeurs insérées doit correspondre au format de données spécifié par la définition de CREATE TABLE. 

 Après l’insertion d’un grand nombre de nouvelles lignes dans une table : 
+ Exécuter une opération VACUUM sur la table pour récupérer de l’espace de stockage et retrier les lignes. 
+ Analysez la table pour mettre à jour les statistiques pour le planificateur de requête. 

Lorsque les valeurs sont insérées dans des colonnes DECIMAL et qu’elles dépassent l’échelle spécifiée, les valeurs chargées sont arrondies le cas échéant. Par exemple, si la valeur `20.259` est insérée dans une colonne DECIMAL(8,2), la valeur est stockée sous la forme `20.26`. 

Vous pouvez insérer dans une colonne GENERATED BY DEFAULT AS IDENTITY. Vous pouvez mettre à jour des colonnes définies comme GENERATED BY DEFAULT AS IDENTITY avec des valeurs que vous fournissez. Pour plus d'informations, consultez [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

# Exemples INSERT
<a name="c_Examples_of_INSERT_30"></a>

La table CATEGORY de la base de données TICKIT contient les lignes suivantes : 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
     1 | Sports   | MLB       | Major League Baseball
     2 | Sports   | NHL       | National Hockey League
     3 | Sports   | NFL       | National Football League
     4 | Sports   | NBA       | National Basketball Association
     5 | Sports   | MLS       | Major League Soccer
     6 | Shows    | Musicals  | Musical theatre
     7 | Shows    | Plays     | All non-musical theatre
     8 | Shows    | Opera     | All opera and light opera
     9 | Concerts | Pop       | All rock and pop music concerts
    10 | Concerts | Jazz      | All jazz singers and bands
    11 | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

 Créez une table CATEGORY\$1STAGE avec un schéma similaire à la table CATEGORY, mais définissez les valeurs par défaut pour les colonnes : 

```
create table category_stage
(catid smallint default 0,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');
```

L’instruction INSERT suivante sélectionne toutes les lignes de la table CATEGORY et les insère dans la table CATEGORY\$1STAGE. 

```
insert into category_stage
(select * from category);
```

Les parenthèses autour de la requête sont facultatives.

Cette commande insère une nouvelle ligne dans la table CATEGORY\$1STAGE avec une valeur spécifiée pour chaque colonne dans l’ordre : 

```
insert into category_stage values
(12, 'Concerts', 'Comedy', 'All stand-up comedy performances');
```

Vous pouvez également insérer une nouvelle ligne qui associe des valeurs spécifiques et des valeurs par défaut : 

```
insert into category_stage values
(13, 'Concerts', 'Other', default);
```

Exécutez la requête suivante pour renvoyer les lignes insérées : 

```
select * from category_stage
where catid in(12,13) order by 1;

 catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
    12 | Concerts | Comedy  | All stand-up comedy performances
    13 | Concerts | Other   | General
(2 rows)
```

Les exemples suivants illustrent quelques instructions INSERT VALUES à plusieurs lignes. Le premier exemple insère les valeurs spécifiques CATID pour deux lignes et les valeurs par défaut pour les autres colonnes des deux lignes. 

```
insert into category_stage values
(14, default, default, default),
(15, default, default, default);

select * from category_stage where catid in(14,15) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
    14 | General  | General | General
    15 | General  | General | General
(2 rows)
```

L’exemple suivant insère trois lignes avec différentes combinaisons de valeurs spécifiques et de valeurs par défaut : 

```
insert into category_stage values
(default, default, default, default),
(20, default, 'Country', default),
(21, 'Concerts', 'Rock', default);

select * from category_stage where catid in(0,20,21) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
     0 | General  | General | General
    20 | General  | Country | General
    21 | Concerts | Rock    | General
(3 rows)
```

Le premier ensemble de VALUES de cet exemple produit les mêmes résultats que la spécification de DEFAULT VALUES pour une instruction INSERT à ligne unique.

Les exemples suivants illustrent le comportement INSERT lorsqu’une table possède une colonne IDENTITY. D’abord, créez une nouvelle version de la table CATEGORY, puis insérez-y des lignes de CATEGORY : 

```
create table category_ident
(catid int identity not null,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');


insert into category_ident(catgroup,catname,catdesc)
select catgroup,catname,catdesc from category;
```

Notez que vous ne pouvez pas insérer des valeurs entières spécifiques dans la colonne CATID IDENTITY. Les valeurs de colonne IDENTITY sont générées automatiquement.

L’exemple suivant montre que les sous-requêtes ne peuvent pas être utilisées comme expressions dans les instructions INSERT VALUES à plusieurs lignes : 

```
insert into category(catid) values
((select max(catid)+1 from category)),
((select max(catid)+2 from category));

ERROR: can't use subqueries in multi-row VALUES
```

L’exemple suivant montre une insertion dans une table temporaire remplie avec les données de la table `venue` à l’aide de la clause `WITH SELECT`. Pour plus d’informations sur la table `venue`, consultez [Exemple de base de données](c_sampledb.md).

Commencez par créer la table temporaire `#venuetemp`.

```
CREATE TABLE #venuetemp AS SELECT * FROM venue;
```

Répertoriez les lignes de la table `#venuetemp`.

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756	
...
```

Insérez 10 lignes dupliquées dans la table `#venuetemp` à l’aide de la clause `WITH SELECT`.

```
INSERT INTO #venuetemp (WITH venuecopy AS (SELECT * FROM venue) SELECT * FROM venuecopy ORDER BY 1 LIMIT 10);
```

Répertoriez les lignes de la table `#venuetemp`.

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756
5        Gillette Stadium           Foxborough   MA          68756
...
```

# INSERT (table externe)
<a name="r_INSERT_external_table"></a>

Insère les résultats d'une requête SELECT dans des tables externes existantes d'un catalogue externe, telles que for AWS Glue AWS Lake Formation, ou une métastore Apache Hive. Utilisez le même rôle Gestion des identités et des accès AWS (IAM) que celui utilisé pour la commande CREATE EXTERNAL SCHEMA pour interagir avec les catalogues externes et Amazon S3.

Pour les tables non partitionnées, la commande INSERT (table externe) écrit les données à l’emplacement Amazon S3 défini dans la table, en fonction des propriétés de la table et du format de fichier spécifiés.

Pour les tables partitionnées, INSERT (table externe) écrit les données à l’emplacement Amazon S3 en fonction de la clé de partition spécifiée dans la table. Il enregistre également automatiquement les nouvelles partitions dans le catalogue externe une fois l’opération INSERT terminée.

Vous ne pouvez pas exécuter INSERT (table externe) dans un bloc de transactions (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 

## Syntaxe
<a name="r_INSERT_external_table-synopsis"></a>

```
INSERT INTO external_schema.table_name
{ select_statement }
```

## Parameters
<a name="r_INSERT_external_table-parameters"></a>

 *schéma\$1externe.nom\$1table*   
Nom d’un schéma externe existant et d’une table externe cible pour l’insertion.

 *select\$1statement*   
Instruction qui insère une ou plusieurs lignes dans la table externe en définissant une requête. Toutes les lignes produites par la requête sont écrites dans Amazon S3 au format texte ou Parquet, en fonction de la définition de la table. La requête doit renvoyer une liste de colonnes compatible avec les types de données de colonne de la table externe. Cependant, les noms des colonnes ne doivent pas obligatoirement correspondre.

## Notes d’utilisation
<a name="r_INSERT_external_table_usage_notes"></a>

Le nombre de colonnes de la requête SELECT doit être identique à la somme des colonnes de données et des colonnes de partition. L’emplacement et le type de données de chaque colonne de données doivent correspondre à ceux de la table externe. L’emplacement des colonnes de partition doit se trouver à la fin de la requête SELECT, dans le même ordre que celui utilisé pour les définir dans la commande CREATE EXTERNAL TABLE. Les noms des colonnes ne doivent pas obligatoirement correspondre.

Dans certains cas, vous pouvez exécuter la commande INSERT (table externe) sur un catalogue de données AWS Glue ou un métastore Hive. Dans le cas de AWS Glue, le rôle IAM utilisé pour créer le schéma externe doit disposer à la fois d'autorisations de lecture et d'écriture sur Amazon S3 et AWS Glue. Si vous utilisez un AWS Lake Formation catalogue, ce rôle IAM devient propriétaire de la nouvelle table Lake Formation. Ce rôle IAM doit au moins disposer des autorisations suivantes : 
+ Autorisation SELECT, INSERT, UPDATE sur la table externe
+ Autorisation d’emplacement des données sur le chemin d’accès Amazon S3 de la table externe

Pour vous assurer que les noms de fichiers sont uniques, Amazon Redshift utilise le format suivant pour le nom de chaque fichier téléchargé dans Amazon S3 par défaut. 

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

Par exemple : `20200303_004509_810669_1007_0001_part_00.parquet`.

Tenez compte des éléments suivants lors de l’exécution de la commande INSERT (table externe) :
+ Les tables externes qui ont un format autre que PARQUET ou TEXTFILE ne sont pas prises en charge.
+ Cette commande prend en charge les propriétés de table existantes telles que ’write.parallel’, ’write.maxfilesize.mb’, ’compression\$1type’ et ’serialization.null.format’. Pour mettre à jour ces valeurs, exécutez la commande ALTER TABLE SET TABLE PROPERTIES.
+ La propriété de table ’numRows’ est automatiquement mise à jour vers la fin de l’opération INSERT. La propriété de la table doit déjà être définie ou ajoutée à la table si elle n’a pas été créée par l’opération CREATE EXTERNAL TABLE AS.
+ La clause LIMIT n’est pas prise en charge dans la requête SELECT externe. A la place, utilisez une clause LIMIT imbriquée.
+ Vous pouvez utiliser la table [STL\$1UNLOAD\$1LOG](r_STL_UNLOAD_LOG.md) pour suivre les fichiers qui ont été écrits sur Amazon S3 par chaque opération INSERT (table externe).
+ Amazon Redshift prend en charge uniquement le chiffrement standard Amazon S3 pour INSERT (table externe).

## Exemples d’opération INSERT (table externe)
<a name="c_Examples_of_INSERT_external_table"></a>

L’exemple suivant insère les résultats de l’instruction SELECT dans la table externe.

```
INSERT INTO spectrum.lineitem
SELECT * FROM local_lineitem;
```

L’exemple suivant insère les résultats de l’instruction SELECT dans une table externe partitionnée à l’aide d’un partitionnement statique. Les colonnes de partition sont codées de manière irréversible dans l’instruction SELECT. Les colonnes de partition doivent se trouver à la fin de la requête.

```
INSERT INTO spectrum.customer
SELECT name, age, gender, 'May', 28 FROM local_customer;
```

L’exemple suivant insère les résultats de l’instruction SELECT dans une table externe partitionnée à l’aide d’un partitionnement dynamique. Les colonnes de partition ne sont pas codées de manière irréversible. Les données sont automatiquement ajoutées aux dossiers de partition existants ou aux nouveaux dossiers si une nouvelle partition est ajoutée.

```
INSERT INTO spectrum.customer
SELECT name, age, gender, month, day FROM local_customer;
```

# LOCK
<a name="r_LOCK"></a>

Limite l’accès à une table de base de données. Cette commande n’est significative que lorsqu’elle est exécutée à l’intérieur d’un bloc de transaction.

La commande LOCK obtient un verrou de niveau table en mode « ACCESS EXCLUSIVE », attendant si nécessaire que des verrous en conflit soient libérés. Un tel verrou explicite d’une table peut entraîner une attente des lectures et des écritures sur la table lorsqu’elles sont tentées à partir d’autres transactions ou séances. Un verrou de table explicite créé par un utilisateur empêche temporairement un autre utilisateur de sélectionner les données de cette table ou de les y charger. Le verrou est libéré lorsque la transaction qui contient la commande LOCK est terminée.

Les verrous de table moins restrictifs sont acquis implicitement par les commandes qui font référence aux tables, telles que les opérations d’écriture. Par exemple, si un utilisateur tente de lire les données d’une table pendant qu’un autre utilisateur met à jour la table, les données qui sont lues constituent un instantané des données déjà validées. (Dans certains cas, les requêtes sont arrêtées si elles violent les règles d’isolement sérialisable.) Consultez [Gestion des opérations d’écriture simultanées](c_Concurrent_writes.md).

Certaines opérations DDL, telles que DROP TABLE et TRUNCATE, créent des verrous exclusifs. Ces opérations empêchent les lectures de données.

Si un conflit de verrou se produit, Amazon Redshift affiche un message d’erreur pour avertir l’utilisateur qui a démarré la transaction en conflit. La transaction qui a reçu le conflit de verrou est arrêtée. Chaque fois qu’un conflit de verrou se produit, Amazon Redshift écrit une entrée dans la table [STL\$1TR\$1CONFLICT](r_STL_TR_CONFLICT.md).

## Syntaxe
<a name="section_r_LOCK-synopsis"></a>

```
LOCK [ TABLE ] table_name [, ...]
```

## Parameters
<a name="parameters"></a>

TABLE   
Mot-clé facultatif.

 *table\$1name*   
Nom de la table à verrouiller. Vous pouvez verrouiller plusieurs tables en utilisant une liste de noms de table séparés par des virgules. Vous ne pouvez pas verrouiller les vues. 

## Exemple
<a name="example2"></a>

```
begin;

lock event, sales;

...
```

# MERGE
<a name="r_MERGE"></a>

Fusionne de manière conditionnelle les lignes d’une table source dans une table cible. Traditionnellement, cela ne peut être réalisé qu’en utilisant plusieurs instructions d’insertion, de mise à jour ou de suppression séparément. Pour plus d’informations sur les opérations que MERGE vous permet de combiner, consultez [UPDATE](https://docs.aws.amazon.com/redshift/latest/dg/r_UPDATE.html), [DELETE](https://docs.aws.amazon.com/redshift/latest/dg/r_DELETE.html) et [INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_INSERT_30.html).

## Syntaxe
<a name="r_MERGE-synopsis"></a>

```
MERGE INTO target_table 
USING source_table [ [ AS ] alias ] 
ON match_condition 
[ WHEN MATCHED THEN { UPDATE SET col_name = { expr } [,...] | DELETE }
WHEN NOT MATCHED THEN INSERT [ ( col_name [,...] ) ] VALUES ( { expr } [, ...] ) |
REMOVE DUPLICATES ]
```

## Parameters
<a name="r_MERGE-parameters"></a>

 *target\$1table*  
Table temporaire ou permanente dans laquelle l’instruction MERGE est fusionnée.

 *source\$1table*  
Table temporaire ou permanente fournissant les lignes à fusionner dans *target\$1table*. *source\$1table* peut également être une table Spectrum. 

 *alias*  
Nom alternatif temporaire pour *source\$1table*.  
Ce paramètre est facultatif. L’*alias* précédent avec AS est également facultatif.

 *match\$1condition*  
Spécifie des prédicats égaux entre la colonne de la table source et la colonne de la table cible qui sont utilisés pour déterminer si les lignes de *source\$1table* peuvent correspondre aux lignes de *target\$1table*. Si la condition est remplie, MERGE exécute *matched\$1clause* pour cette ligne. Sinon, MERGE exécute *not\$1matched\$1clause* pour cette ligne.

WHEN MATCHED  
 Spécifie l’action à exécuter lorsque la condition de correspondance entre une ligne source et une ligne cible est évaluée sur True. Vous pouvez spécifier une action UPDATE ou une action DELETE. 

UPDATE  
 Met à jour la ligne correspondante dans *target\$1table*. Seules les valeurs dans *col\$1name* que vous spécifiez sont mises à jour. 

DELETE  
 Supprime la ligne correspondante dans *target\$1table*. 

WHEN NOT MATCHED  
 Spécifie l’action à exécuter lorsque la condition de correspondance est évaluée sur False ou Unknown. Vous pouvez uniquement spécifier l’action d’insertion INSERT pour cette clause. 

INSERT  
 Insère dans les lignes *target\$1table* à partir de *source\$1table* ne correspondant à aucune ligne dans *target\$1table*, en fonction de *match\$1condition*. *col\$1name* cible peut être répertorié dans n’importe quel ordre. Si vous ne fournissez aucune valeur *col\$1name*, l’ordre par défaut correspond à l’ordre déclaré de toutes les colonnes de la table. 

 *col\$1name*  
Un ou plusieurs noms de colonnes que vous voulez modifier. N’incluez pas le nom de la table quand vous spécifiez la colonne cible.

 *expr*  
Expression définissant la nouvelle valeur pour *col\$1name*.

 REMOVE DUPLICATES  
Spécifie que la commande MERGE s’exécute en mode simplifié. Le mode simplifié a les exigences suivantes :  
+  *target\$1table* et *source\$1table* doivent avoir le même nombre de colonnes, des types de colonnes compatibles et le même ordre de colonnes. 
+  Omettez la clause WHEN et les clauses UPDATE et INSERT de votre commande MERGE. 
+  Utilisez la clause REMOVE DUPLICATES dans votre commande MERGE. 
En mode simplifié, MERGE effectue les opérations suivantes :  
+  Les lignes dans *target\$1table* qui ont une correspondance dans *source\$1table* sont mises à jour pour correspondre aux valeurs dans *source\$1table*. 
+  Les lignes dans *source\$1table* qui n’ont pas de correspondance dans *target\$1table* sont insérées dans *target\$1table*. 
+  Lorsque plusieurs lignes dans *target\$1table* correspondent à la même ligne dans *source\$1table*, les lignes dupliquées sont supprimées. Amazon Redshift conserve une ligne et la met à jour. Les lignes dupliquées qui ne correspondent pas à une ligne dans *source\$1table* restent inchangées. 
L’utilisation de REMOVE DUPLICATES donne de meilleures performances que l’utilisation de WHEN MATCHED et WHEN NOT MATCHED. Nous vous recommandons d’utiliser REMOVE DUPLICATES si *target\$1table* et *source\$1table* sont compatibles et si vous n’avez pas besoin de conserver les lignes dupliquées dans *target\$1table*.

## Notes d’utilisation
<a name="r_MERGE_usage_notes"></a>
+ Pour exécuter des instructions MERGE, vous devez être propriétaire à la fois de *source\$1table* et de *target\$1table*, ou disposer de l’autorisation SELECT pour ces tables. En outre, vous devez disposer des autorisations UPDATE, DELETE et INSERT pour *target\$1table* en fonction des opérations incluses dans votre instruction MERGE.
+  *target\$1table* ne peut pas être une table système, une table de catalogue ou une table externe. 
+  *source\$1table* et *target\$1table* ne peuvent pas être la même table. 
+  Vous ne pouvez pas utiliser la clause WITH dans une instruction MERGE. 
+  Les lignes de la *target\$1table* ne peuvent pas correspondre à plusieurs lignes de la *source\$1table*. 

  Prenez l’exemple suivant :

  ```
  CREATE TABLE target (id INT, name CHAR(10));
  CREATE TABLE source (id INT, name CHAR(10));
  
  INSERT INTO target VALUES (1, 'Bob'), (2, 'John');
  INSERT INTO source VALUES (1, 'Tony'), (1, 'Alice'), (3, 'Bill');
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN DELETE
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  ```

  Dans les deux instructions MERGE, l’opération échoue parce qu’il y a plusieurs lignes dans la table `source` avec une valeur ID de `1`.
+  *match\$1condition* et *expr* ne peuvent pas référencer partiellement les colonnes de type SUPER. Par exemple, si votre objet de type SUPER est un tableau ou une structure, vous ne pouvez pas utiliser des éléments individuels de cette colonne pour *match\$1condition* ou *expr*, mais vous pouvez utiliser la colonne entière. 

  Prenez l’exemple suivant :

  ```
  CREATE TABLE IF NOT EXISTS target (key INT, value SUPER);
  CREATE TABLE IF NOT EXISTS source (key INT, value SUPER);
  
  INSERT INTO target VALUES (1, JSON_PARSE('{"key": 88}'));
  INSERT INTO source VALUES (1, ARRAY(1, 'John')), (2, ARRAY(2, 'Bill'));
  
  MERGE INTO target USING source ON target.key = source.key
  WHEN matched THEN UPDATE SET value = source.value[0]
  WHEN NOT matched THEN INSERT VALUES (source.key, source.value[0]);
  ERROR: Partial reference of SUPER column is not supported in MERGE statement.
  ```

  Pour plus d’informations sur le type SUPER, consultez [Type SUPER](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html).
+ Si *source\$1table* est volumineuse, définir les colonnes de jointure de *target\$1table* et de *source\$1table* comme clés de distribution peut améliorer les performances.
+ Pour utiliser la clause REMOVE DUPLICATES, vous devez disposer des autorisations SELECT, INSERT et DELETE pour *target\$1table*.
+  *source\$1table* peut être une vue ou une sous-requête. Voici un exemple d’instruction MERGE dans laquelle *source\$1table* est une sous-requête qui supprime les lignes dupliquées. 

  ```
  MERGE INTO target
  USING (SELECT id, name FROM source GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```
+ La cible ne peut pas être la source de données d’une sous-requête de la même instruction MERGE. Par exemple, la commande SQL suivante renvoie une erreur du type ERROR : L'instruction Source view/subquery in Merge ne peut pas référencer la table cible. car la sous-requête fait référence `target` au lieu de. `source`

  ```
  MERGE INTO target
  USING (SELECT id, name FROM target GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```

## Exemples
<a name="sub-examples-merge"></a>

L’exemple suivant crée deux tables, puis exécute une opération MERGE sur celles-ci qui met à jour les lignes correspondantes dans la table cible et insère des lignes qui ne correspondent pas. Elle insère ensuite une autre valeur dans la table source et exécute une autre opération MERGE, qui supprime cette fois les lignes correspondantes et insère la nouvelle ligne de la table source.

Créez et remplissez d’abord les tables source et cible.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (101, 'Bob'), (102, 'John'), (103, 'Susan');
INSERT INTO source VALUES (102, 'Tony'), (103, 'Alice'), (104, 'Bill');

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | John
 103 | Susan
(3 rows)

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
(3 rows)
```

Fusionnez ensuite la table source dans la table cible, ce qui met à jour la table cible avec les lignes correspondantes et insère les lignes de la table source qui n’ont aucune correspondance.

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | Tony
 103 | Alice
 104 | Bill
(4 rows)
```

Notez que les lignes dont les valeurs d’id sont 102 et 103 sont mises à jour pour correspondre aux valeurs de nom de la table cible. En outre, une nouvelle ligne avec une valeur d’id 104 et une valeur de nom Bill est insérée dans la table cible.

Ensuite, insérez une nouvelle ligne dans la table source.

```
INSERT INTO source VALUES (105, 'David');

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
 105 | David
(4 rows)
```

Enfin, exécutez une opération de fusion en supprimant les lignes correspondantes dans la table cible et en insérant les lignes qui ne correspondent pas.

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 105 | David
(2 rows)
```

Les lignes avec les valeurs d’id 102, 103 et 104 sont supprimées de la table cible, et une nouvelle ligne avec une valeur d’id de 105 et la valeur de nom David est insérée dans la table cible.

L’exemple suivant affiche la syntaxe simplifiée d’une commande MERGE utilisant la clause REMOVE DUPLICATES.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (11, 'Alice'), (23, 'Bill');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
11 | Alice
23 | David
22 | Clarence
(4 rows)
```

L’exemple suivant affiche la syntaxe simplifiée d’une commande MERGE utilisant la clause REMOVE DUPLICATES, qui supprime les lignes dupliquées de *target\$1table* si elles ont des lignes correspondantes dans *source\$1table*.

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (30, 'Daisy'), (11, 'Alice'), (23, 'Bill'), (23, 'Nikki');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
30 | Daisy
11 | Alice
23 | David
22 | Clarence
(5 rows)
```

Après l’exécution de MERGE, il n’y a qu’une seule ligne avec une valeur d’ID 23 dans *target\$1table*. Comme aucune ligne n’avait la valeur d’ID 30 dans *source\$1table*, les deux lignes dupliquées avec des valeurs d’ID 30 restent dans *target\$1table*.

## Consultez aussi
<a name="r_MERGE-see-also"></a>

 [INSERT](r_INSERT_30.md), [UPDATE](r_UPDATE.md), [DELETE](r_DELETE.md) 

# PREPARE
<a name="r_PREPARE"></a>

Prépare une instruction pour l’exécution. 

PREPARE crée une instruction préparée. Lorsque l’instruction PREPARE est exécutée, l’instruction spécifiée (SELECT, INSERT, UPDATE ou DELETE) est analysée, réécrite et planifiée. Quand une commande EXECUTE est ensuite émise pour l’instruction préparée, Amazon Redshift peut le cas échéant réviser le plan d’exécution de la requête (pour améliorer les performances en fonction des valeurs de paramètre spécifiées) avant l’exécution de l’instruction préparée. 

## Syntaxe
<a name="r_PREPARE-synopsis"></a>

```
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
```

## Parameters
<a name="r_PREPARE-parameters"></a>

 *nom\$1plan*   
Nom arbitraire donné à cette instruction préparée particulière. Il doit être unique au sein d’une même séance et est ensuite utilisé pour exécuter ou libérer une instruction préalablement préparée.

 *datatype*   
Type de données d’un paramètre de l’instruction préparée. Pour faire référence aux paramètres de l’instruction préparée elle-même, utilisez \$11, \$12, et ainsi de suite, jusqu’à un maximum de \$132767.

 *instruction *   
Toute instruction SELECT, INSERT, UPDATE ou DELETE.

## Notes d’utilisation
<a name="r_PREPARE_usage_notes"></a>

Les instructions préparées peuvent accepter des paramètres : les valeurs qui sont remplacées dans l’instruction lors de l’exécution. Pour inclure des paramètres dans une instruction préparée, fournissez une liste de types de données dans l’instruction PREPARE et, dans l’instruction à préparer elle-même, faites référence aux paramètres de position à l’aide de la notation \$11, \$12, etc. Le nombre maximum de paramètres est 32767. Lors de l’exécution de l’instruction, spécifiez les valeurs réelles de ces paramètres dans l’instruction EXECUTE. Pour en savoir plus, consultez [EXECUTE](r_EXECUTE.md). 

Les instructions préparées ne sont valables que sur la durée de la séance en cours. Lorsque la séance se termine, comme l’instruction préparée est écartée, elle devra être recréée avant d’être utilisée à nouveau. Cela signifie également qu’une même instruction préparée ne peut pas être utilisée simultanément par plusieurs clients de base de données ; néanmoins, chaque client peut créer sa propre instruction à utiliser. L’instruction préparée peut être supprimée manuellement à l’aide de la commande DEALLOCATE. 

Les instructions préparées ont l’avantage d’offrir les meilleures performances lorsqu’une même séance est utilisée pour exécuter un grand nombre d’instructions similaires. Comme mentionné, pour chaque nouvelle exécution d’une instruction préparée, Amazon Redshift peut réviser le plan d’exécution afin d’améliorer les performances en fonction des valeurs de paramètre spécifiées. Pour examiner le plan d’exécution de requête qu’Amazon Redshift a choisi pour des instructions EXECUTE spécifiques, utilisez la commande [EXPLAIN](r_EXPLAIN.md). 

Pour plus d’informations sur la planification des requêtes et les statistiques recueillies par Amazon Redshift pour l’optimisation des requêtes, consultez la commande [ANALYSE](r_ANALYZE.md). 

## Exemples
<a name="sub-examples-prepare"></a>

Créez une table temporaire, préparez l’instruction INSERT, puis exécutez-la :

```
DROP TABLE IF EXISTS prep1;
CREATE TABLE prep1 (c1 int, c2 char(20));
PREPARE prep_insert_plan (int, char)
AS insert into prep1 values ($1, $2);
EXECUTE prep_insert_plan (1, 'one');
EXECUTE prep_insert_plan (2, 'two');
EXECUTE prep_insert_plan (3, 'three');
DEALLOCATE prep_insert_plan;
```

Préparez une instruction SELECT, puis exécutez-la :

```
PREPARE prep_select_plan (int)
AS select * from prep1 where c1 = $1;
EXECUTE prep_select_plan (2);
EXECUTE prep_select_plan (3);
DEALLOCATE prep_select_plan;
```

## Consultez aussi
<a name="r_PREPARE-see-also"></a>

 [DEALLOCATE](r_DEALLOCATE.md), [EXECUTE](r_EXECUTE.md) 

# REFRESH MATERIALIZED VIEW
<a name="materialized-view-refresh-sql-command"></a>

Actualise une vue matérialisée.

Lorsque vous créez une vue matérialisée, son contenu reflète l’état de la ou des tables de base de données sous-jacentes à ce moment-là. Les données de la vue matérialisée restent inchangées, même si les applications modifient les données dans les tables sous-jacentes.

Pour mettre à jour les données de la vue matérialisée, vous pouvez utiliser l’instruction `REFRESH MATERIALIZED VIEW` à tout moment. Lorsque vous utilisez cette instruction, Amazon Redshift identifie les modifications qui ont eu lieu dans la ou les tables de base, puis applique ces modifications à la vue matérialisée.

Pour plus d’informations sur les vues matérialisées, consultez [Vues matérialisées dans Amazon Redshift](materialized-view-overview.md).

## Syntaxe
<a name="mv_REFRESH_MATERIALIZED_VIEW-synopsis"></a>

```
REFRESH MATERIALIZED VIEW mv_name [ RESTRICT | CASCADE ]
```

## Parameters
<a name="mv_REFRESH_MATERIALIZED_VIEW-parameters"></a>

*mv\$1name*  
Nom de la vue matérialisée à actualiser.

RESTRICT  
Mot-clé facultatif. Actualise la vue matérialisée spécifiée, mais pas ses vues matérialisées dépendantes. Valeur par défaut si ni RESTRICT ni CASCADE ne sont spécifiés.

CASCADE  
Mot-clé facultatif. Actualise la vue matérialisée spécifiée et toutes ses vues matérialisées dépendantes.

## Notes d’utilisation
<a name="mv_REFRESH_MARTERIALIZED_VIEW_usage"></a>

Seul le propriétaire d’une vue matérialisée peut effectuer une opération `REFRESH MATERIALIZED VIEW` sur cette vue matérialisée. En outre, le propriétaire doit disposer du privilège SELECT au niveau des tables de base sous-jacentes pour exécuter correctement `REFRESH MATERIALIZED VIEW`. 

La commande `REFRESH MATERIALIZED VIEW` s’exécute en tant que transaction. La sémantique de transaction Amazon Redshift est respectée pour déterminer quelles données des tables de base sont accessibles à la commande `REFRESH` ou quand les modifications apportées par la commande `REFRESH` deviennent accessibles à d’autres transactions exécutées dans Amazon Redshift.
+ Pour les vues matérialisées incrémentielles, `REFRESH MATERIALIZED VIEW` utilise uniquement les lignes de la table de base qui sont déjà validées. Par conséquent, si l’opération d’actualisation s’exécute après une instruction DML (Data Manipulation Language) dans la même transaction, les modifications de cette instruction DML ne sont pas visibles pour l’actualisation. 
+ Pour une actualisation complète d’une vue matérialisée, `REFRESH MATERIALIZED VIEW` voit toutes les lignes de table de base visibles par la transaction d’actualisation, selon la sémantique de transaction Amazon Redshift habituelle. 
+ Selon le type d’argument d’entrée, Amazon Redshift prend toujours en charge l’actualisation incrémentielle pour les vues matérialisées pour les fonctions suivantes avec des types d’arguments d’entrée spécifiques : DATE (horodatage), DATE\$1PART (date, heure, intervalle, heure-tz), DATE\$1TRUNC (horodatage, intervalle).
+ L’actualisation incrémentielle est également prise en charge sur une vue matérialisée dont la table de base est une unité de partage des données.
+ L'actualisation des vues matérialisées partagées à partir de clusters de partage de données distants n'est pas prise en charge pour les vues matérialisées contenant des références à d'autres vues matérialisées, les tables Spectrum, les tables définies dans un autre cluster Redshift ou. UDFs Ces vues matérialisées peuvent être actualisées à partir du cluster local (producteur).

Certaines opérations dans Amazon Redshift interagissent avec les vues matérialisées. Certaines de ces opérations peuvent forcer une opération `REFRESH MATERIALIZED VIEW` à recalculer complètement la vue matérialisée, même si la requête qui définit cette dernière utilise uniquement les fonctionnalités SQL éligibles à l’actualisation incrémentielle. Par exemple :
+ Les opérations VACUUM en arrière-plan peuvent être bloquées si les vues matérialisées ne sont pas actualisées. Après une période de seuil définie en interne, l’exécution de l’opération VACUUM est autorisée. Lorsque cette opération VACUUM se produit, toutes les vues matérialisées dépendantes sont marquées pour le recalcul lors de l’actualisation suivante (même si elles sont incrémentielles). Pour obtenir des informations sur VACUUM, consultez [VACUUM](r_VACUUM_command.md). Pour plus d’informations sur les événements et les changements d’état, consultez [STL\$1MV\$1STATE](r_STL_MV_STATE.md).
+ Certaines opérations effectuées par l’utilisateur sur les tables de base forcent le recalcul d’une vue matérialisée lors de l’exécution suivante d’une opération REFRESH. Des exemples d’opération de ce type sont une opération VACUUM appelée manuellement, un redimensionnement classique, une opération ALTER DISTKEY, une opération ALTER SORTKEY et une opération TRUNCATE. Dans certains cas, les opérations automatiques peuvent également entraîner le recalcul complet d’une vue matérialisée lors de la prochaine exécution d’une opération REFRESH. Par exemple, une opération de suppression automatique par aspiration peut entraîner un recalcul complet. Pour plus d’informations sur les événements et les changements d’état, consultez [STL\$1MV\$1STATE](r_STL_MV_STATE.md). 

## Rafraîchissement en cascade
<a name="mv_REFRESH_MATERIALIZED_VIEW_cascading"></a>

L'option CASCADE actualise la vue matérialisée spécifiée et toutes ses vues matérialisées dépendantes, par ordre de dépendance : la base MVs se trouve REFRESHed avant le MVs dessus (ordre topologique). Cela vous permet de mettre à jour un ensemble imbriqué de vues matérialisées en une seule commande.

L’option RESTRICT (par défaut si ni RESTRICT ni CASCADE ne sont spécifiés) actualise uniquement la vue matérialisée spécifiée.

Les règles suivantes s’appliquent lors de l’utilisation de l’option CASCADE :
+ Seul le propriétaire de la vue matérialisée ou un super-utilisateur peut exécuter la commande `REFRESH MATERIALIZED VIEW ... CASCADE`.
+ Si l’une des vues matérialisées de la cascade ne peut pas être actualisée, l’ensemble de l’opération de cascade s’arrête.

La fonctionnalité d'actualisation en cascade n'est prise en charge que pour les vues matérialisées MVs imbriquées au-dessus des vues matérialisées locales et en streaming. Les vues matérialisées avec d’autres types de sources, tels que Spectrum ou Data Sharing, ne sont pas prises en charge en mode cascade. CASCADE exécute l'actualisation en une seule transaction pour tous les éléments imbriqués MVs.

## Actualisation incrémentielle des vues matérialisées dans une unité de partage des données
<a name="mv_REFRESH_MATERIALIZED_VIEW_datashare"></a>

 Amazon Redshift prend en charge l’actualisation automatique et incrémentielle des vues matérialisées dans une unité de partage des données consommateur lorsque les tables de base sont partagées. L’actualisation incrémentielle est une opération au cours de laquelle Amazon Redshift identifie les modifications apportées à la ou les tables de base après l’actualisation précédente et met à jour uniquement les enregistrements correspondants dans la vue matérialisée. Pour plus d’informations sur ce comportement, consultez [CREATE MATERIALIZED VIEW](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html#mv_CREATE_MARTERIALIZED_VIEW_datashare). 

## Limites d’actualisation incrémentielle
<a name="mv_REFRESH_MARTERIALIZED_VIEW_limitations"></a>

Pour l’instant, Amazon Redshift ne prend pas en charge l’actualisation incrémentielle pour les vues matérialisées qui sont définies avec une requête utilisant l’un des éléments SQL suivants :
+ OUTER JOIN (RIGHT, LEFT ou FULL).
+ Opérations d’ensemble : UNION, INTERSECT, EXCEPT, MINUS.
+ UNION ALL lorsqu’elle se produit dans une sous-requête et qu’une fonction d’agrégation ou une clause GROUP BY est présente dans la requête ou si la vue matérialisée cible contient une clé de tri.
+ Fonctions d’agrégation : MEDIAN, PERCENTILE\$1CONT, LISTAGG, STDDEV\$1SAMP, STDDEV\$1POP, APPROXIMATE COUNT, APPROXIMATE PERCENTILE et les fonctions d’agrégation bit par bit.
**Note**  
Les fonctions d’agrégation COUNT, SUM, MIN, MAX et AVG sont prises en charge.
+ Fonctions d’agrégation DISTINCT, telles que DISTINCT COUNT, DISTINCT SUM, etc.
+ Fonctions de fenêtrage.
+ Requête qui utilise des tables temporaires pour l’optimisation des requêtes, telle que l’optimisation des sous-expressions courantes.
+ Sous-requêtes
+ Tables externes référençant les formats suivants dans la requête qui définit la vue matérialisée. 
  +  Delta Lake 
  +  Hudi 

  L’actualisation incrémentielle est prise en charge pour les vues matérialisées définies à l’aide de formats autres que ceux répertoriés ci-dessus. Pour plus d’informations, consultez [Vues matérialisées sur des tables de lacs de données externes dans Amazon Redshift SpectrumVues matérialisées sur des tables de lacs de données externes](materialized-view-external-table.md). 
+ Fonctions mutables, telles que les fonctions date-heure, RANOM et non-STABLE définies par l’utilisateur.
+ Pour connaître les limites relatives à l’actualisation incrémentielle pour les intégrations zéro ETL, consultez [Considérations relatives à l’utilisation d’intégrations zéro ETL avec Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl.reqs-lims.html).
+ Accès aux tables depuis plusieurs bases de données.

Pour plus d’informations sur les limites de la vue matérialisée, y compris l’effet des opérations d’arrière-plan telles que VACUUM sur les opérations d’actualisation de la vue matérialisée, consultez [Notes d’utilisation](#mv_REFRESH_MARTERIALIZED_VIEW_usage).

## Exemples
<a name="mv_REFRESH_MARTERIALIZED_VIEW_examples"></a>

L’exemple suivant actualise la vue matérialisée `tickets_mv`.

```
REFRESH MATERIALIZED VIEW tickets_mv;
```

L’exemple suivant actualise la vue matérialisée `products_mv` et toutes ses vues matérialisées dépendantes :

```
REFRESH MATERIALIZED VIEW products_mv CASCADE; 
```

# RESET
<a name="r_RESET"></a>

Restaure la value d’un paramètre de configuration à sa valeur par défaut.

Vous pouvez réinitialiser un seul paramètre ou tous les paramètres à la fois. Pour définir un paramètre sur une valeur spécifique, utilisez la commande [SET](r_SET.md). Pour afficher la valeur actuelle d’un paramètre, utilisez la commande [MONTRER](r_SHOW.md).

## Syntaxe
<a name="r_RESET-synopsis"></a>

```
RESET { parameter_name | ALL }
```

L’instruction suivante définit la valeur d’une variable de contexte de session sur NULL.

```
RESET { variable_name | ALL }
```

## Parameters
<a name="r_RESET-parameters"></a>

 *nom\$1paramètre*   
Nom du paramètre à réinitialiser. Pour plus d’informations sur les paramètres, consultez [Modification de la configuration du serveur](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings).

ALL   
Réinitialise tous les paramètres d’exécution, y compris toutes les variables de contexte de session.

*variable*   
Le nom de la variable à réinitialiser. Si la valeur à RÉINITIALISER est une variable de contexte de session, Amazon Redshift la définit sur NULL.

## Exemples
<a name="r_RESET-examples"></a>

L’exemple suivant réinitialise le paramètre `query_group` à sa valeur par défaut : 

```
reset query_group;
```

L’exemple suivant réinitialise tous les paramètres d’exécution à leurs valeurs par défaut. 

```
reset all;
```

L’exemple suivant réinitialise la variable de contexte.

```
RESET app_context.user_id;
```

# REVOKE
<a name="r_REVOKE"></a>

Supprime les autorisations d’accès d’un utilisateur ou d’un rôle, comme celles permettant de créer, de supprimer ou de mettre à jour des tables.

Vous ne pouvez accorder (GRANT) ou révoquer l’utilisation (REVOKE USAGE) sur un schéma externe à des utilisateurs et des rôles de base de données qu’en utilisant la syntaxe ON SCHEMA. Lorsque vous utilisez ON EXTERNAL SCHEMA avec AWS Lake Formation, vous pouvez uniquement ACCORDER et RÉVOQUER des autorisations pour un rôle Gestion des identités et des accès AWS (IAM). Pour connaître la liste des autorisations, reportez-vous à la syntaxe.

Pour les procédures stockées, les autorisations USAGE ON LANGUAGE `plpgsql` sont accordées par défaut à PUBLIC. L’autorisation EXECUTE ON PROCEDURE est uniquement accordée au propriétaire et aux super-utilisateurs par défaut.

Spécifiez dans la commande REVOKE les autorisations que vous souhaitez supprimer. Pour accorder des autorisations, utilisez la commande [GRANT](r_GRANT.md). 

## Syntaxe
<a name="r_REVOKE-synopsis"></a>

```
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE db_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
EXECUTE
    ON FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { EXECUTE } [,...] | ALL [ PRIVILEGES ] }
    ON PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
USAGE
    ON LANGUAGE language_name [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [GRANT OPTION FOR] 
{ { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]    

REVOKE [GRANT OPTION FOR]
{ { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE template_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Révoquer les autorisations au niveau des colonnes pour les tables
<a name="revoke-column-level"></a>

Voici la syntaxe des autorisations de niveau colonne sur les tables et les vues Amazon Redshift. 

```
REVOKE { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
     [ RESTRICT ]
```

### Révoquer les autorisations ASSUMEROLE
<a name="revoke-assumerole-permissions"></a>

La syntaxe suivante permet de révoquer l’autorisation ASSUMEROLE pour les utilisateurs et les groupes ayant un rôle spécifique. 

```
REVOKE ASSUMEROLE
    ON { 'iam_role' [, ...]  | default | ALL }
    FROM { user_name | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL }
```

### Révoquer les autorisations pour Redshift Spectrum pour Lake Formation
<a name="revoke-spectrum-integration-with-lf-permissions"></a>

La syntaxe suivante s’applique à l’intégration de Redshift Spectrum à Lake Formation.

```
REVOKE [ GRANT OPTION FOR ]
{ SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    FROM { IAM_ROLE iam_role } [, ...]

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    FROM { { IAM_ROLE iam_role } [, ...] | PUBLIC }

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    FROM { IAM_ROLE iam_role } [, ...]
```

### Révoquer les autorisations d’unité de partage des données
<a name="revoke-datashare-permissions"></a>

**Autorisations d’unité de partage des données côté producteur**  
La syntaxe suivante permet d’utiliser REVOKE pour supprimer les autorisations ALTER ou SHARE d’un utilisateur ou d’un rôle. L’utilisateur dont les autorisations ont été révoquées ne peut plus modifier l’unité de partage des données ni en autoriser l’utilisation à un consommateur. 

```
REVOKE { ALTER | SHARE } ON DATASHARE datashare_name
 FROM { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

La syntaxe suivante permet d’utiliser REVOKE pour supprimer l’accès d’un consommateur à une unité de partage des données.

```
REVOKE USAGE
 ON DATASHARE datashare_name
 FROM NAMESPACE 'namespaceGUID' [, ...] | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ] [, ...]
```

L’exemple suivant montre la révocation de l’utilisation d’une unité de partage des données depuis un compte Lake Formation.

```
REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012' VIA DATA CATALOG;
```

**Autorisations d’unité de partage des données côté consommateur**  
Voici la syntaxe REVOKE pour les autorisations d’utilisation d’unité de partage des données sur une base de données spécifique ou un schéma créé à partir d’une unité de partage des données. La révocation de l’autorisation d’utilisation d’une base de données créée à l’aide de la clause WITH PERMISSIONS ne révoque aucune autorisation supplémentaire que vous avez accordée à un utilisateur ou à un rôle, y compris les autorisations de niveau objet accordées pour les objets sous-jacents. Si vous accordez de nouveau l’autorisation d’utilisation à cet utilisateur ou à ce rôle, il conserve toutes les autorisations supplémentaires dont il disposait avant que vous ne révoquiez l’utilisation.

```
REVOKE USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
 FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### Révocation d’autorisations étendues
<a name="revoke-scoped-permissions"></a>

Les autorisations étendues vous permettent d’accorder des autorisations à un utilisateur ou à un rôle sur tous les objets d’un type au sein d’une base de données ou d’un schéma. Les utilisateurs et les rôles dotés d’autorisations étendues ont les autorisations spécifiées sur tous les objets actuels et futurs de la base de données ou du schéma.

Vous pouvez consulter l’étendue des autorisations délimitées au niveau de la base de données dans [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md). Vous pouvez consulter l’étendue des autorisations délimitées au niveau du schéma dans [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md).

Pour plus d’informations sur les autorisations étendues, consultez [Autorisations délimitées](t_scoped-permissions.md).

La syntaxe suivante permet de révoquer des autorisations étendues aux utilisateurs et rôles. 

```
REVOKE [ GRANT OPTION ] 
{ CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{ SCHEMA schema_name [ DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] USAGE
FOR LANGUAGES IN
DATABASE db_name
FROM { username | ROLE role_name } [, ...]  

REVOKE [GRANT_OPTION] 
{ { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
FROM { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]      

REVOKE [ GRANT OPTION ]
{ {ALTER | DROP  | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]
```

Notez que les autorisations étendues ne font pas de distinction entre les autorisations relatives aux fonctions et aux procédures. Par exemple, l’instruction suivante révoque les autorisations `EXECUTE` pour les fonctions et les procédures de `bob` dans le schéma `Sales_schema`. 

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

### Révoquer les autorisations de machine learning
<a name="revoke-model-permissions"></a>

Voici la syntaxe pour les autorisations des modèles de machine learning sur Amazon Redshift.

```
REVOKE [ GRANT OPTION FOR ]
    CREATE MODEL FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]
```

### Révoquer les autorisations d’un rôle
<a name="revoke-roles"></a>

Voici la syntaxe permettant de révoquer les autorisations de rôle sur Amazon Redshift.

```
REVOKE [ ADMIN OPTION FOR ] { ROLE role_name } [, ...] FROM { user_name } [, ...]
```

```
REVOKE { ROLE role_name } [, ...] FROM { ROLE role_name } [, ...]
```

Voici la syntaxe permettant de révoquer les autorisations système des rôles sur Amazon Redshift.

```
REVOKE
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG |
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
FROM { ROLE role_name } [, ...]
```

### Révocation des autorisations liées aux politiques de sécurité
<a name="revoke-role-level"></a>

Voici la syntaxe permettant de révoquer des autorisations pour expliquer les filtres de politique de sécurité d’une requête dans le plan EXPLAIN. Les politiques de sécurité possibles incluent des politiques de sécurité au niveau des lignes et des politiques de masquage dynamique des données.

```
REVOKE EXPLAIN { RLS | MASKING } FROM ROLE rolename 
```

Voici la syntaxe permettant de révoquer des autorisations permettant de contourner les politiques de sécurité au niveau des lignes pour une requête. 

```
REVOKE IGNORE RLS FROM ROLE rolename 
```

Voici la syntaxe permettant de révoquer les autorisations SELECT de la politique de sécurité spécifiée. Les politiques de sécurité possibles incluent des politiques de sécurité au niveau des lignes et des politiques de masquage dynamique des données.

```
REVOKE SELECT ON [ TABLE ] table_name [, ...]
            FROM { RLS | MASKING } POLICY policy_name [, ...]
```

## Parameters
<a name="r_REVOKE-parameters"></a>

GRANT OPTION FOR   
Révoque uniquement l’option d’accorder une autorisation spécifiée à d’autres utilisateurs et ne révoque pas l’autorisation elle-même. Vous ne pouvez pas retirer GRANT OPTION d’un groupe ou de PUBLIC.

SELECT   
Révoque l’autorisation de sélectionner les données d’une table ou d’une vue à l’aide d’une instruction SELECT.

INSERT   
Révoque l’autorisation de charger les données dans une table à l’aide d’une instruction INSERT ou COPY. 

UPDATE   
Révoque l’autorisation de mettre à jour une colonne de table à l’aide d’une instruction UPDATE. 

DELETE   
Révoque l’autorisation de supprimer une ligne d’une table.

REFERENCES   
Révoque l’autorisation de créer une contrainte de clé étrangère. Vous devez révoquer cette autorisation sur la table référencée et sur la table qui fait référence.

TRUNCATE  
Révoque l’autorisation de tronquer une table. Sans cette autorisation, seul le propriétaire d’une table ou un super-utilisateur peut tronquer une table. Pour plus d’informations sur la commande TRUNCATE, consultez [TRUNCATE](r_TRUNCATE.md).

ALL [ PRIVILEGES ]   
Révoque simultanément toutes les autorisations disponibles de l’utilisateur ou groupe spécifié. Le mot-clé PRIVILEGES est facultatif.  
 Amazon Redshift ne prend pas en charge les autorisations RULE et TRIGGER. Pour plus d’informations, consultez la section concernant [Fonctions PostgreSQL non prises en charge](c_unsupported-postgresql-features.md). 

ALTER  
En fonction de l’objet de la base de données, révoque les autorisations suivantes de l’utilisateur ou du groupe d’utilisateurs :   
+ Pour les tables, ALTER révoque la modification d’une table ou d’une vue. Pour plus d’informations, consultez [ALTER TABLE](r_ALTER_TABLE.md).
+ Pour les bases de données, ALTER révoque la modification d’une base de données. Pour plus d’informations, consultez [ALTER DATABASE](r_ALTER_DATABASE.md).
+ Pour les schémas, ALTER révoque la modification d’un schéma. Pour plus d’informations, consultez [ALTER SCHEMA](r_ALTER_SCHEMA.md).
+ Pour les tables externes, ALTER révoque la modification d’une table dans un AWS Glue Data Catalog qui est activé pour Lake Formation. Cette autorisation s’applique uniquement lors de l’utilisation de Lake Formation.

DROP  
En fonction de l’objet de la base de données, révoque les autorisations suivantes de l’utilisateur ou du rôle :  
+  Pour les tables, DROP révoque l’autorisation de suppression d’une table ou d’une vue. Pour plus d’informations, consultez [DROP TABLE](r_DROP_TABLE.md). 
+  Pour les bases de données, DROP révoque l’autorisation de suppression d’une base de données. Pour plus d’informations, consultez [DROP DATABASE](r_DROP_DATABASE.md). 
+  Pour les schémas, DROP révoque l’autorisation de suppression d’un schéma. Pour plus d’informations, consultez [DROP SCHEMA](r_DROP_SCHEMA.md). 

ASSUMEROLE  <a name="assumerole"></a>
Révoque l’autorisation d’exécuter les commandes COPY, UNLOAD, EXTERNAL FUNCTION ou CREATE MODEL à partir d’utilisateurs, de rôles ou de groupes possédant un rôle spécifié. 

ON [ TABLE ] *nom\$1table*   
Révoque les autorisations spécifiées sur une table ou une vue. Le mot-clé TABLE est facultatif.

ON ALL TABLES IN SCHEMA *nom\$1schéma*   
Révoque les autorisations spécifiées sur toutes les tables du schéma référencé.

( *nom\$1colonne* [,...] ) ON TABLE *nom\$1table*   <a name="revoke-column-level-privileges"></a>
Révoque les autorisations spécifiées des utilisateurs, groupes ou PUBLIC sur les colonnes spécifiées de la table ou de la vue Amazon Redshift.

( *column\$1list* ) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table-column"></a>
Révoque les autorisations spécifiées d’un rôle IAM sur les colonnes spécifiées de la table Lake Formation dans le schéma référencé.

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table"></a>
Révoque les autorisations spécifiées d’un rôle IAM sur les tables Lake Formation spécifiées dans le schéma référencé.

ON EXTERNAL SCHEMA *schema\$1name*   <a name="revoke-external-schema"></a>
Révoque les autorisations spécifiées d’un rôle IAM sur le schéma référencé.

FROM IAM\$1ROLE *iam\$1role*   <a name="revoke-from-iam-role"></a>
Indique le rôle IAM qui perd les autorisations.

ROLE *role\$1name*   
Révoque les autorisations du rôle spécifié.

GROUP *group\$1name*   
Révoque les autorisations du groupe d’utilisateurs spécifié.

PUBLIC   
Révoque les autorisations spécifiées pour tous les utilisateurs. PUBLIC représente un groupe qui inclut toujours tous les utilisateurs. Les autorisations d’un utilisateur sont la somme des autorisations accordées à PUBLIC, des autorisations accordées aux groupes auxquels l’utilisateur appartient et des autorisations accordées à l’utilisateur à titre individuel.  
La révocation de PUBLIC d’une table externe Lake Formation entraîne la révocation de l’autorisation du groupe *everyone* de Lake Formation.

CREATE   
En fonction de l’objet de la base de données, révoque les autorisations suivantes de l’utilisateur ou du groupe :  
+ Pour les bases de données, l’utilisation de la clause CREATE pour REVOKE empêche les utilisateurs de créer des schémas dans la base de données.
+ Pour les schémas, l’utilisation de la clause CREATE pour REVOKE empêche les utilisateurs de créer des objets dans un schéma. Pour renommer un objet, l’utilisateur doit disposer de l’autorisation CREATE et posséder l’objet à renommer. 
Par défaut, tous les utilisateurs disposent des autorisations CREATE et USAGE sur le schéma PUBLIC.

TEMPORARY \$1 TEMP   
Révoque l’autorisation de créer des tables temporaires dans la base de données spécifiée.  
Par défaut, les utilisateurs ont l’autorisation de créer des tables temporaires grâce à leur appartenance automatique au groupe PUBLIC. Pour retirer à tout utilisateur l’autorisation de créer des tables temporaires, révoquez l’autorisation TEMP du groupe PUBLIC, puis accordez explicitement l’autorisation de créer des tables temporaires à des utilisateurs ou groupes d’utilisateurs spécifiques.

ON DATABASE *nom\$1db*   
Révoque les autorisations sur la base de données spécifiée.

USAGE   
Révoque les autorisations USAGE sur les objets d’un schéma spécifique, ce qui rend ces objets inaccessibles aux utilisateurs. Les actions spécifiques sur ces objets doivent être révoquées séparément (comme l’autorisation EXECUTE sur les autorisations).  
Par défaut, tous les utilisateurs disposent des autorisations CREATE et USAGE sur le schéma PUBLIC.

ON SCHEMA *nom\$1schéma*   
Révoque les autorisations sur le schéma spécifié. Vous pouvez utiliser les autorisations de schéma pour contrôler la création de tables ; l’autorisation CREATE pour une base de données ne contrôle que la création de schémas.

RESTRICT   
Révoque uniquement les autorisations que l’utilisateur a directement accordées. Il s’agit du comportement par défaut.

EXECUTE ON PROCEDURE *procedure\$1name*   
Révoque l’autorisation EXECUTE sur une procédure stockée spécifique. Comme les noms de procédures stockées peuvent être surchargés, vous devez inclure la liste des arguments de la procédure. Pour plus d'informations, consultez [Dénomination des procédures stockées](stored-procedure-naming.md).

EXECUTE ON ALL PROCEDURES IN SCHEMA *procedure\$1name*   
Révoque les autorisations spécifiées pour toutes les procédures du schéma référencé.

USAGE ON LANGUAGE *nom\$1langage*   
Révoque l’autorisation d’utilisation d’une langue. Pour les fonctions définies par l'utilisateur en Python (UDFs), utilisez`plpythonu`. Pour SQL UDFs, utilisez`sql`. Pour les procédures stockées, utilisez `plpgsql`.   
Pour créer une fonction définie par l’utilisateur, vous devez avoir l’autorisation pour USAGE ON LANGUAGE pour SQL ou `plpythonu` (Python). Par défaut, USAGE ON LANGUAGE SQL est accordé à PUBLIC. Toutefois, vous devez accorder explicitement USAGE ON LANGUAGE PLPYTHONU à des utilisateurs ou des groupes spécifiques.   
Pour révoquer le privilège USAGE pour SQL, révoquez d’abord USAGE de PUBLIC. Accordez ensuite l'utilisation de SQL uniquement aux utilisateurs ou groupes spécifiques autorisés à créer du SQL UDFs. L’exemple suivant révoque le privilège USAGE pour SQL de PUBLIC, puis accorde USAGE au groupe d’utilisateurs `udf_devs`.   

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```
Pour plus d'informations, consultez [Sécurité et autorisations des fonctions définies par l’utilisateur](udf-security-and-privileges.md).   
Pour révoquer le privilège USAGE pour les procédures stockées, révoquez d’abord USAGE de PUBLIC. Ensuite, accordez le privilège USAGE sur `plpgsql` uniquement aux utilisateurs ou groupes spécifiques autorisés à créer des procédures stockées. Pour plus d’informations, consultez [Sécurité et privilèges des procédures stockées](stored-procedure-security-and-privileges.md). 

ON COPY JOB *job\$1name*  <a name="on-copy-job-revoke"></a>
Révoque les autorisations spécifiées à une tâche copy.

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]  <a name="revoke-for"></a>
Spécifie la commande SQL pour laquelle l’autorisation est révoquée. Vous pouvez spécifier ALL pour révoquer l’autorisation sur les instructions COPY, UNLOAD, EXTERNAL FUNCTION et CREATE MODEL. Cette clause s’applique uniquement à la révocation de l’autorisation ASSUMEROLE.

ALTER  
Révoque l’autorisation ALTER pour les utilisateurs ou les groupes d’utilisateurs, ce qui permet à ceux qui ne possèdent pas une unité de partage des données de modifier cette dernière. Cette autorisation est nécessaire pour ajouter ou supprimer des objets d’une unité de partage des données, ou pour définir la propriété PUBLICACCESSIBLE. Pour plus d’informations, consultez [ALTER DATASHARE](r_ALTER_DATASHARE.md).

SHARE  
Révoque les autorisations pour les utilisateurs et les groupes d’utilisateurs d’ajouter des consommateurs à une unité de partage des données. La révocation de cette autorisation est nécessaire pour empêcher le consommateur concerné d’accéder à l’unité de partage des données à partir de ses clusters. 

ON DATASHARE *datashare\$1name *  
Accorde les autorisations spécifiées sur l’unité de partage des données référencée.

FROM username  
Indique que l’utilisateur a perdu les autorisations.

FROM GROUP *group\$1name*  
Indique le groupe d’utilisateurs qui perd les autorisations.

WITH GRANT OPTION  
Indique que l’utilisateur qui perd les autorisations peut à son tour révoquer les mêmes autorisations pour d’autres personnes. Vous ne pouvez pas révoquer le privilège WITH GRANT OPTION d’un groupe ou de PUBLIC. 

USAGE  
Lorsque USAGE est révoqué pour un compte consommateurs ou un espace de noms dans le même compte, le compte consommateurs ou l’espace de noms spécifié dans un compte ne peut pas accéder à l’unité de partage des données et aux objets de l’unité de partage des données en lecture seule.   
La révocation de l’autorisation d’UTILISATION révoque l’accès des consommateurs à une unité de partage des données. 

FROM NAMESPACE ’clusternamespace GUID’   
Indique l’espace de noms dans le même compte que celui dont les consommateurs ont perdu les autorisations sur l’unité de partage des données. Les espaces de noms utilisent un identifiant global unique (GUID) alphanumérique de 128 bits.

FROM ACCOUNT ’accountnumber’ [ VIA DATA CATALOG ]  
Indique le numéro de compte d’un autre compte dont les consommateurs perdent les autorisations sur le partage des données. La spécification « VIA DATA CATALOG » indique que vous révoquez un compte Lake Formation à utiliser l’unité de partage des données. Si vous omettez le numéro de compte, vous révoquez le compte qui possède le cluster.

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="revoke-datashare"></a>
Révoque les autorisations d’utilisation spécifiées sur la base de données spécifiée qui a été créée dans l’unité de partage des données spécifiée. 

ON SCHEMA* shared\$1schema*   <a name="revoke-datashare"></a>
Révoque les autorisations spécifiées sur le schéma spécifié qui a été créé dans l’unité de partage des données spécifiée.

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
Spécifie les objets de base de données dont révoquer l’autorisation. Les paramètres situés après IN définissent l’étendue de l’autorisation révoquée.

CREATE MODEL  
Révoque l’autorisation CREATE MODEL pour créer des modèles de machine learning dans la base de données spécifiée.

ON MODEL *model\$1name*  
Révoque l’autorisation EXECUTE pour un modèle spécifique. 

ACCESS CATALOG  
Révoque l’autorisation d’afficher les métadonnées pertinentes des objets auxquels le rôle a accès.

[ ADMIN OPTION FOR ] \$1 role \$1 [, ...]  
Rôle que vous révoquez pour un utilisateur spécifié disposant de la clause WITH ADMIN OPTION.

FROM \$1 role \$1 [, ...]  
Rôle pour lequel vous révoquez le rôle spécifié.

EXPLAIN \$1 RLS \$1 MASKING \$1 FROM ROLE *rolename*  
Révoque à un rôle l’autorisation d’expliquer les filtres de politique de sécurité d’une requête dans le plan EXPLAIN. RLS révoque l’autorisation d’explication pour les filtres de politique de sécurité au niveau des lignes. MASKING révoque l’autorisation d’explication pour les filtres de politique de masquage dynamique des données.

IGNORE RLS FROM ROLE *rolename*   
Révoque à un rôle l’autorisation de contourner les politiques de sécurité au niveau des lignes pour une requête.

FROM \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
Indique la politique de sécurité qui perd les autorisations. TO RLS POLICY indique une politique de sécurité de niveau des lignes. TO MASKING POLICY indique une politique de masquage dynamique des données.

## Notes d’utilisation
<a name="r_REVOKE-usage-notes-link"></a>

Pour en savoir plus sur les notes d’utilisation de REVOKE, consultez [Notes d’utilisation](r_REVOKE-usage-notes.md).

## Exemples
<a name="r_REVOKE-examples-link"></a>

Pour des exemples d’utilisation de REVOKE, consultez [Exemples](r_REVOKE-examples.md).

# Notes d’utilisation
<a name="r_REVOKE-usage-notes"></a>

Pour retirer les privilèges à un objet, vous devez répondre à l’un des critères suivants :
+ Être le propriétaire de l’objet.
+ Être un super-utilisateur.
+ Avoir un privilège accordé pour cet objet et ce privilège.

  Par exemple, la commande suivante autorise l’utilisateur HR à exécuter des commandes SELECT sur la table des employés et à accorder et révoquer le même privilège aux autres utilisateurs.

  ```
  grant select on table employees to HR with grant option;
  ```

  HR ne peut pas révoquer de privilèges pour une opération autre que SELECT, ou sur toute autre table que celle des employés. 

Les super-utilisateurs peuvent accéder à tous les objets, quelle que soit les commandes GRANT et REVOKE qui définissent les privilèges d’objet.

PUBLIC représente un groupe qui inclut toujours tous les utilisateurs. Par défaut, tous les membres de PUBLIC disposent des privilèges CREATE et USAGE sur le schéma PUBLIC. Pour limiter toutes les autorisations d’un utilisateur sur le schéma PUBLIC, vous devez d’abord révoquer toutes les autorisations de PUBLIC sur le schéma PUBLIC, puis accorder des privilèges à des utilisateurs ou des groupes spécifiques. L’exemple suivant contrôle les privilèges de création de table du schéma PUBLIC.

```
revoke create on schema public from public;
```

Pour supprimer des privilèges d’une table Lake Formation, le rôle IAM associé au schéma externe de la table doit avoir l’autorisation d’accorder des privilèges à la table externe. L’exemple suivant crée un schéma externe avec un rôle IAM `myGrantor` associé. Le rôle IAM `myGrantor` a l’autorisation de supprimer des autorisations. La commande REVOKE utilise l’autorisation du rôle IAM `myGrantor` associé au schéma externe pour supprimer des autorisations du rôle IAM `myGrantee`.

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
revoke select
on external table mySchema.mytable
from iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

**Note**  
Si le rôle IAM dispose également d'une `ALL` AWS Glue Data Catalog autorisation activée pour Lake Formation, l'`ALL`autorisation n'est pas révoquée. Seule l’autorisation `SELECT` est supprimée. Vous pouvez afficher les autorisations Lake Formation dans la console Lake Formation.

## Notes d’utilisation pour la révocation de l’autorisation ASSUMEROLE
<a name="r_REVOKE-usage-notes-assumerole"></a>

Les notes d’utilisation suivantes s’appliquent à la révocation du privilège ASSUMEROLE dans Amazon Redshift. 

Seul un super-utilisateur de base de données peut révoquer le privilège ASSUMEROLE pour les utilisateurs et les groupes. Un super-utilisateur conserve toujours le privilège ASSUMEROLE. 

Pour activer l’utilisation du privilège ASSUMEROLE pour les utilisateurs et les groupes, un super-utilisateur exécute l’instruction suivante une fois sur le cluster. Avant d’accorder le privilège ASSUMEROLE aux utilisateurs et aux groupes, un super-utilisateur doit exécuter l’instruction suivante une fois sur le cluster. 

```
revoke assumerole on all from public for all;
```

## Notes d’utilisation pour la révocation des autorisations de machine learning
<a name="r_REVOKE-usage-notes-create-model"></a>

Vous ne pouvez pas accorder ou révoquer directement les autorisations liées à une fonction ML. Une fonction ML appartient à un modèle ML et les autorisations sont contrôlées par le biais du modèle. En revanche, vous pouvez révoquer les autorisations liées au modèle ML. L’exemple suivant montre comment révoquer l’autorisation d’exécution de tous les utilisateurs associés au modèle `customer_churn`.

```
REVOKE EXECUTE ON MODEL customer_churn FROM PUBLIC;
```

Vous pouvez également révoquer toutes les autorisations d’un utilisateur pour le modèle ML `customer_churn`.

```
REVOKE ALL on MODEL customer_churn FROM ml_user;
```

L’octroi ou la révocation de l’autorisation `EXECUTE` liée à une fonction de ML échouera s’il existe une fonction de ML dans le schéma, même si cette fonction de ML dispose déjà de l’autorisation `EXECUTE` par le biais de `GRANT EXECUTE ON MODEL`. Nous vous recommandons d’utiliser un schéma distinct lorsque vous utilisez la commande `CREATE MODEL` afin de conserver les fonctions ML dans un schéma distinct. L’exemple suivant vous montre comment procéder.

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# Exemples
<a name="r_REVOKE-examples"></a>

L’exemple suivant retire les privilèges INSERT sur la table SALES au groupe d’utilisateurs GUESTS. Cette commande empêche les membres de GUESTS de pouvoir charger des données dans la table SALES à l’aide de la commande INSERT. 

```
revoke insert on table sales from group guests;
```

L’exemple suivant retire le privilège SELECT sur toutes les tables du schéma QA\$1TICKIT à l’utilisateur `fred`.

```
revoke select on all tables in schema qa_tickit from fred;
```

L’exemple ci-dessous retire le privilège de sélectionner à partir d’une vue de l’utilisateur `bobr`.

```
revoke select on table eventview from bobr;
```

L’exemple suivant retire le privilège de créer des tables temporaires dans la base de données TICKIT à tous les utilisateurs.

```
revoke temporary on database tickit from public;
```

L’exemple suivant retire à l’utilisateur `cust_name` le privilège SELECT sur les colonnes `cust_phone` et `cust_profile` de la table `user1`. 

```
revoke select(cust_name, cust_phone) on cust_profile from user1;
```

L’exemple suivant retire au groupe `sales_group` le privilège SELECT sur les colonnes `cust_name` et `cust_phone` et le privilège UPDATE sur la colonne `cust_contact_preference` de la table `cust_profile`. 

```
revoke select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile from group sales_group;
```

L’exemple suivant montre l’utilisation du mot-clé ALL pour retirer au groupe `sales_admin` les privilèges SELECT et UPDATE sur trois colonnes de la table `cust_profile`. 

```
revoke ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile from group sales_admin;
```

L’exemple suivant retire à l’utilisateur `cust_name` le privilège SELECT sur la colonne `cust_profile_vw` de la vue `user2`. 

```
revoke select(cust_name) on cust_profile_vw from user2;
```

## Exemples de révocation de l’autorisation USAGE des bases de données créées à partir d’unités de partage des données
<a name="r_REVOKE-examples-datashare"></a>

L’exemple suivant révoque l’accès à l’unité de partage des données `salesshare` depuis l’espace de noms `13b8833d-17c6-4f16-8fe4-1a018f5ed00d`.

```
REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

L’exemple suivant révoque l’autorisation USAGE de `Bob` sur `sales_db`.

```
REVOKE USAGE ON DATABASE sales_db FROM Bob;
```

L’exemple suivant révoque l’autorisation USAGE du rôle `Analyst_role` sur `sales_schema`.

```
REVOKE USAGE ON SCHEMA sales_schema FROM ROLE Analyst_role;
```

## Exemples de révocation d’autorisations étendues
<a name="r_REVOKE-examples-scoped"></a>

L’exemple suivant révoque l’utilisation pour tous les schémas actuels et futurs de la base de données `Sales_db` pour le rôle `Sales`.

```
REVOKE USAGE FOR SCHEMAS IN DATABASE Sales_db FROM ROLE Sales;
```

L’exemple suivant révoque la possibilité d’accorder à l’utilisateur `alice` l’autorisation SELECT pour toutes les tables actuelles et futures de la base de données `Sales_db`. `alice` conserve l’accès à toutes les tables de `Sales_db`.

```
REVOKE GRANT OPTION SELECT FOR TABLES IN DATABASE Sales_db FROM alice;
```

L’exemple suivant révoque l’autorisation EXECUTE accordée à l’utilisateur `bob` pour les fonctions du schéma `Sales_schema`.

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

L’exemple suivant révoque toutes les autorisations accordées au rôle `Sales` pour toutes les tables du schéma `ShareSchema` de la base de données `ShareDb`. Lorsque vous spécifiez le schéma, vous pouvez aussi spécifier la base de données du schéma en utilisant le format en deux parties `database.schema`.

```
REVOKE ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema FROM ROLE Sales;
```

L’exemple suivant est le même que le précédent. Vous pouvez spécifier la base de données du schéma à l’aide du mot-clé `DATABASE` au lieu d’utiliser un format en deux parties.

```
REVOKE ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb FROM ROLE Sales;
```

## Exemples de révocation du privilège ASSUMEROLE
<a name="r_REVOKE-examples-assumerole"></a>

Voici des exemples de révocation du privilège ASSUMEROLE. 

Un super-utilisateur doit activer l’utilisation du privilège ASSUMEROLE pour les utilisateurs et les groupes en exécutant l’instruction suivante une fois sur le cluster : 

```
revoke assumerole on all from public for all;
```

L’instruction suivante révoque le privilège ASSUMEROLE de l’utilisateur reg\$1user1 sur tous les rôles pour toutes les opérations. 

```
revoke assumerole on all from reg_user1 for all;
```

## Exemples de révocation du privilège ROLE
<a name="r_REVOKE-examples-role"></a>

L’exemple suivant révoque le rôle sample\$1role1 pour le rôle sample\$1role2.

```
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO ROLE sample_role2;
REVOKE ROLE sample_role1 FROM ROLE sample_role2;
```

L’exemple suivant révoque les privilèges système pour l’utilisateur user1.

```
GRANT ROLE sys:DBA TO user1;
REVOKE ROLE sys:DBA FROM user1;
```

L’exemple suivant révoque les rôles sample\$1role1 et sample\$1role2 pour l’utilisateur user1.

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1, ROLE sample_role2 TO user1;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM user1;
```

L’exemple suivant révoque le rôle sample\$1role2 avec la clause WITH ADMIN OPTION pour l’utilisateur user1.

```
GRANT ROLE sample_role2 TO user1 WITH ADMIN OPTION;
REVOKE ADMIN OPTION FOR ROLE sample_role2 FROM user1;
REVOKE ROLE sample_role2 FROM user1;
```

L’exemple suivant révoque les rôles sample\$1role1 et sample\$1role2 pour le rôle sample\$1role5.

```
CREATE ROLE sample_role5;
GRANT ROLE sample_role1, ROLE sample_role2 TO ROLE sample_role5;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM ROLE sample_role5;
```

L’exemple suivant révoque les privilèges système CREATE SCHEMA et DROP SCHEMA pour le rôle sample\$1role1.

```
GRANT CREATE SCHEMA, DROP SCHEMA TO ROLE sample_role1;
REVOKE CREATE SCHEMA, DROP SCHEMA FROM ROLE sample_role1;
```

# ROLLBACK
<a name="r_ROLLBACK"></a>

Arrête la transaction en cours et ignore toutes les mises à jour effectuées par cette transaction.

Cette commande effectue la même fonction que la commande [ABORT](r_ABORT.md).

## Syntaxe
<a name="r_ROLLBACK-synopsis"></a>

```
ROLLBACK [ WORK | TRANSACTION ]
```

## Parameters
<a name="r_ROLLBACK-parameters"></a>

WORK  
Mot-clé facultatif. Ce mot-clé n’est pas pris en charge dans une procédure stockée. 

TRANSACTION  
Mot-clé facultatif. WORK et TRANSACTION sont synonymes. Aucun des deux n’est pris en charge dans une procédure stockée. 

Pour obtenir des informations sur l’utilisation de ROLLBACK dans une procédure stockée, consultez [Gestion des transactions](stored-procedure-transaction-management.md). 

## Exemple
<a name="r_ROLLBACK-example"></a>

L’exemple suivant crée une table, puis démarre une transaction où les données sont insérées dans la table. La commande ROLLBACK annule ensuite l’insertion des données et laisse la table vide.

La commande suivante crée un exemple de table appelée MOVIE\$1GROSS :

```
create table movie_gross( name varchar(30), gross bigint );
```

La prochaine série de commandes démarre une transaction qui insère deux lignes de données dans la table :

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

Puis, la commande suivante sélectionne les données de la table pour montrer qu’elles ont été correctement insérées :

```
select * from movie_gross;
```

La sortie de la commande montre que les deux lignes ont été insérées avec succès :

```
name           |  gross
-------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

Cette commande restaure les modifications des données à l’emplacement où la transaction a commencé :

```
rollback;
```

La sélection de données de la table affiche maintenant une table vide :

```
select * from movie_gross;

name | gross
------+-------
(0 rows)
```

# SELECT
<a name="r_SELECT_synopsis"></a>

renvoie les lignes des tables, vues et fonctions définies par l’utilisateur. 

**Note**  
La taille maximale d’une instruction SQL est de 16 Mo.

## Syntaxe
<a name="r_SELECT_synopsis-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

**Topics**
+ [Syntaxe](#r_SELECT_synopsis-synopsis)
+ [Clause WITH](r_WITH_clause.md)
+ [Liste SELECT](r_SELECT_list.md)
+ [EXCLUDE column\$1list](r_EXCLUDE_list.md)
+ [Clause FROM](r_FROM_clause30.md)
+ [Clause WHERE](r_WHERE_clause.md)
+ [Clause GROUP BY](r_GROUP_BY_clause.md)
+ [Clause HAVING](r_HAVING_clause.md)
+ [Clause QUALIFY](r_QUALIFY_clause.md)
+ [UNION, INTERSECT et EXCEPT](r_UNION.md)
+ [Clause ORDER BY](r_ORDER_BY_clause.md)
+ [Clause CONNECT BY](r_CONNECT_BY_clause.md)
+ [Exemples de sous-requête](r_Subquery_examples.md)
+ [Sous-requêtes corrélées](r_correlated_subqueries.md)

# Clause WITH
<a name="r_WITH_clause"></a>

Une clause WITH est une clause facultative qui précède la liste SELECT d’une requête. La clause WITH définit une ou plusieurs expressions *common\$1table\$1expressions*. Chaque expression de table commune (CTE) définit une table temporaire, qui est similaire à la définition d’une vue. Vous pouvez référencer ces tables temporaires dans la clause FROM. Elles ne sont utilisées que pendant l’exécution de la requête à laquelle elles appartiennent. Chaque CTE de la clause WITH spécifie un nom de table, une liste facultative de noms de colonne et une expression de requête correspondant à une table (instruction SELECT). Lorsque vous référencez le nom de la table temporaire dans la clause FROM de la même expression de requête qui la définit, la CTE est récursive. 

Les sous-requêtes de clause WITH sont un moyen efficace de définir les tables qui peuvent être utilisées tout au long de l’exécution d’une même requête. Dans tous les cas, les mêmes résultats peuvent être obtenus à l’aide de sous-requêtes dans le corps principal de l’instruction SELECT, mais les sous-requêtes de clause WITH peuvent être plus simples à lire et à écrire. Chaque fois que possible, les sous-requêtes de clause WITH qui sont référencées plusieurs fois sont optimisées en tant que sous-expressions courantes ; autrement dit, il peut être possible d’évaluer une sous-requête WITH une fois et de réutiliser ses résultats. (Notez que les sous-expressions courantes ne sont pas limitées à celles définies dans la clause WITH).

## Syntaxe
<a name="r_WITH_clause-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
```

où *common\$1table\$1expression* peut être récursive ou non-récursive. Voici la forme non-récursive : 

```
CTE_table_name [ ( column_name [, ...] ) ] AS ( query )
```

Voici la forme récursive de *common\$1table\$1expression* :

```
CTE_table_name (column_name [, ...] ) AS ( recursive_query )
```

## Parameters
<a name="r_WITH_clause-parameters"></a>

 RECURSIVE   
Mot-clé qui identifie la requête comme étant une CTE récursive. Ce mot-clé est requis si l’expression *common\$1table\$1expression* définie dans la clause WITH est récursive. Vous ne pouvez spécifier le mot clé RECURSIVE qu'une seule fois, immédiatement après le mot clé WITH, même si la clause WITH contient plusieurs CTEs récursifs. En général, une CTE récursive est une sous-requête UNION ALL avec deux parties. 

 *common\$1table\$1expression*   
Définit une table temporaire que vous pouvez référencer dans [Clause FROM](r_FROM_clause30.md) et qui n’est utilisée que pendant l’exécution de la requête à laquelle elle appartient. 

 *CTE\$1table\$1name*   
Nom unique d’une table temporaire qui définit les résultats d’une sous-requête de clause WITH. Vous ne pouvez pas utiliser de noms en double au sein d’une clause WITH. Chaque sous-requête doit avoir un nom de table qui peut être référencé dans la [Clause FROM](r_FROM_clause30.md).

 *column\$1name*   
 Liste des noms de colonne de sortie pour la sous-requête de clause WITH, séparés par des virgules. Le nombre de noms de colonne spécifié doit être égal ou inférieur au nombre de colonnes défini par la sous-requête. Pour une CTE non récursive, *column\$1name* est facultatif. Pour une CTE récursive, *column\$1name* est obligatoire.

 *query*   
 Toute requête SELECT qu’Amazon Redshift prend en charge. Consultez [SELECT](r_SELECT_synopsis.md). 

 *recursive\$1query*   
Requête UNION ALL qui se compose de deux sous-requêtes SELECT :  
+ La première sous-requête SELECT n’a pas de référence récursive à la même table *CTE\$1table\$1name*. Elle renvoie un ensemble de résultats qui est la base initiale de la récursivité. Cette partie est appelée initial member ou seed member.
+ La deuxième sous-requête SELECT fait référence à la même table *CTE\$1table\$1name* dans sa clause FROM. C’est ce qu’on appelle le recursive member. *recursive\$1query* contient une condition WHERE pour mettre fin à la *recursive\$1query*. 

## Notes d’utilisation
<a name="r_WITH_clause-usage-notes"></a>

Vous pouvez utiliser une clause WITH dans les instructions SQL suivantes : 
+ SELECT 
+ SELECT INTO
+ CREATE TABLE AS
+ CREATE VIEW
+ DECLARE
+ EXPLAIN
+ INSERT INTO...SELECT 
+ PREPARE
+ UPDATE (dans une sous-requête de clause WHERE. Vous ne pouvez pas définir une CTE récursive dans la sous-requête. La CTE récursive doit précéder la clause UPDATE.)
+ DELETE

Si la clause FROM d’une requête qui contient une clause WITH ne fait pas référence à l’une des tables définies par la clause WITH, la clause WITH est ignorée et la requête s’exécute normalement.

Une table définie par une sous-requête de clause WITH peut être référencée uniquement dans la portée de la requête SELECT que commence la clause WITH. Par exemple, vous pouvez faire référence à une telle table dans la clause FROM d’une sous-requête de la liste SELECT, la clause WHERE ou la clause HAVING. Vous ne pouvez pas utiliser une clause WITH dans une sous-requête et faire référence à sa table dans la clause FROM de la requête principale ou d’une autre sous-requête. Ce modèle de requête entraîne un message d’erreur sous la forme `relation table_name doesn't exist` pour la table de la clause WITH.

Vous ne pouvez pas spécifier une autre clause WITH à l’intérieur d’une sous-requête de clause WITH.

Vous ne pouvez pas effectuer de références futures aux tables définies par des sous-requêtes de clause WITH. Par exemple, la requête suivante renvoie une erreur en raison de la référence future à la table W2 dans la définition de table W1 : 

```
with w1 as (select * from w2), w2 as (select * from w1)
select * from sales;
ERROR:  relation "w2" does not exist
```

Une sous-requête de clause WITH peut ne pas comporter d’instruction SELECT INTO ; cependant, vous pouvez utiliser une clause WITH dans une instruction SELECT INTO.

## Expressions récursives de table commune
<a name="r_WITH_clause-recursive-cte"></a>

Une *expression de table commune (CTE)* récursive est une CTE qui se réfère à elle-même. Une CTE récursive est utile pour interroger des données hiérarchiques, telles que des organigrammes qui montrent les rapports hiérarchiques entre les employés et les responsables. Consultez [Exemple : CTE récursive](#r_WITH_clause-recursive-cte-example).

Une autre utilisation courante est une nomenclature à plusieurs niveaux, lorsqu’un produit est constitué de nombreux composants et que chaque composant lui-même est également constitué d’autres composants ou sous-ensembles.

Veillez à limiter la profondeur de récursivité en incluant une clause WHERE dans la deuxième sous-requête SELECT de la requête récursive. Pour obtenir un exemple, consultez [Exemple : CTE récursive](#r_WITH_clause-recursive-cte-example). Sinon, une erreur similaire à ce qui suit peut se produire :
+ `Recursive CTE out of working buffers.`
+ `Exceeded recursive CTE max rows limit, please add correct CTE termination predicates or change the max_recursion_rows parameter.`

**Note**  
`max_recursion_rows` est un paramètre définissant le nombre maximal de lignes qu’une CTE récursive peut renvoyer afin d’éviter les boucles de récursion infinies. Nous vous recommandons de ne pas modifier cette valeur pour qu’elle soit supérieure à la valeur par défaut. Cela permet d’éviter que les problèmes de récursion infinie dans vos requêtes n’occupent trop d’espace dans votre cluster.

 Vous pouvez spécifier un ordre de tri et une limite sur le résultat de la CTE récursive. Vous pouvez inclure des options group by et distinct sur le résultat final de la CTE récursive.

Vous ne pouvez pas spécifier une autre clause WITH RECURSIVE dans une sous-requête. Le membre *recursive\$1query* ne peut pas inclure de clause order by ou limit. 

## Exemples
<a name="r_WITH_clause-examples"></a>

L’exemple suivant illustre le cas le plus simple possible d’une requête contenant une clause WITH. La requête WITH nommée VENUECOPY sélectionne toutes les lignes de la table VENUE. La requête principale, à son tour, sélectionne toutes les lignes de VENUECOPY. La table VENUECOPY existe uniquement pendant la durée de cette requête. 

```
with venuecopy as (select * from venue)
select * from venuecopy order by 1 limit 10;
```

```
 venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |          0
2 | Columbus Crew Stadium      | Columbus        | OH         |          0
3 | RFK Stadium                | Washington      | DC         |          0
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |          0
5 | Gillette Stadium           | Foxborough      | MA         |      68756
6 | New York Giants Stadium    | East Rutherford | NJ         |      80242
7 | BMO Field                  | Toronto         | ON         |          0
8 | The Home Depot Center      | Carson          | CA         |          0
9 | Dick's Sporting Goods Park | Commerce City   | CO         |          0
v     10 | Pizza Hut Park             | Frisco          | TX         |          0
(10 rows)
```

L’exemple suivant montre une clause WITH qui produit deux tables, nommées VENUE\$1SALES et TOP\$1VENUES. La deuxième table de requête WITH effectue la sélection à partir de la première. A son tour, la clause WHERE du bloc de requête principal contient une sous-requête qui restreint la table TOP\$1VENUES. 

```
with venue_sales as
(select venuename, venuecity, sum(pricepaid) as venuename_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
group by venuename, venuecity),

top_venues as
(select venuename
from venue_sales
where venuename_sales > 800000)

select venuename, venuecity, venuestate,
sum(qtysold) as venue_qty,
sum(pricepaid) as venue_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
and venuename in(select venuename from top_venues)
group by venuename, venuecity, venuestate
order by venuename;
```

```
        venuename       |   venuecity   | venuestate | venue_qty | venue_sales
------------------------+---------------+------------+-----------+-------------
August Wilson Theatre   | New York City | NY         |      3187 |  1032156.00
Biltmore Theatre        | New York City | NY         |      2629 |   828981.00
Charles Playhouse       | Boston        | MA         |      2502 |   857031.00
Ethel Barrymore Theatre | New York City | NY         |      2828 |   891172.00
Eugene O'Neill Theatre  | New York City | NY         |      2488 |   828950.00
Greek Theatre           | Los Angeles   | CA         |      2445 |   838918.00
Helen Hayes Theatre     | New York City | NY         |      2948 |   978765.00
Hilton Theatre          | New York City | NY         |      2999 |   885686.00
Imperial Theatre        | New York City | NY         |      2702 |   877993.00
Lunt-Fontanne Theatre   | New York City | NY         |      3326 |  1115182.00
Majestic Theatre        | New York City | NY         |      2549 |   894275.00
Nederlander Theatre     | New York City | NY         |      2934 |   936312.00
Pasadena Playhouse      | Pasadena      | CA         |      2739 |   820435.00
Winter Garden Theatre   | New York City | NY         |      2838 |   939257.00
(14 rows)
```

Les deux exemples suivants illustrent les règles sur la portée des références de table dans les sous-requêtes de clause WITH. La première requête s’exécute, mais la deuxième échoue avec une erreur prévue. La première requête a une sous-requête de clause WITH à l’intérieur de la liste SELECT de la requête principale. La table définie par la clause WITH (HOLIDAYS) est référencée dans la clause FROM de la sous-requête de la liste SELECT : 

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join date on sales.dateid=date.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

caldate   | daysales | dec25sales
-----------+----------+------------
2008-12-25 | 70402.00 |   70402.00
2008-12-31 | 12678.00 |   70402.00
(2 rows)
```

La deuxième requête échoue, car elle tente de faire référence à la table HOLIDAYS de la requête principale, ainsi que dans la sous-requête de liste SELECT. Les références de requête principale sont hors de portée. 

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join holidays on sales.dateid=holidays.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

ERROR:  relation "holidays" does not exist
```

## Exemple : CTE récursive
<a name="r_WITH_clause-recursive-cte-example"></a>

Voici un exemple de CTE récursive qui renvoie les employés qui relèvent directement ou indirectement de John. La requête récursive contient une clause WHERE pour limiter la profondeur de récursivité à moins de 4 niveaux.

```
--create and populate the sample table
  create table employee (
  id int,
  name varchar (20),
  manager_id int
  );
  
  insert into employee(id, name, manager_id)  values
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
  
--run the recursive query
  with recursive john_org(id, name, manager_id, level) as
( select id, name, manager_id, 1 as level
  from employee
  where name = 'John'
  union all
  select e.id, e.name, e.manager_id, level + 1 as next_level
  from employee e, john_org j
  where e.manager_id = j.id and level < 4
  )
 select distinct id, name, manager_id from john_org order by manager_id;
```

Voici le résultat de la requête.

```
    id        name      manager_id
  ------+-----------+--------------
   101    John           100
   102    Jorge          101
   103    Kwaku          101
   110    Liu            101
   201    Sofía          102
   106    Mateo          102
   110    Nikki          103
   104    Paulo          103
   105    Richard        103
   120    Saanvi         104
   200    Shirley        104
   205    Zhang          104
```

Voici un organigramme du service de John.

![\[Organigramme du service de John.\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/images/org-chart.png)


# Liste SELECT
<a name="r_SELECT_list"></a>

**Topics**
+ [Syntaxe](#r_SELECT_list-synopsis)
+ [Parameters](#r_SELECT_list-parameters)
+ [Notes d’utilisation](#r_SELECT_list_usage_notes)
+ [Exemples](#r_SELECT_list-examples)

La liste SELECT nomme les colonnes, fonctions et expressions que la requête doit renvoyer. La liste représente le résultat de la requête. 

Pour plus d’informations sur les fonctions SQL, consultez [Référence sur les fonctions SQL](c_SQL_functions.md). Pour plus d’informations sur les expressions, consultez [Expressions conditionnelles](c_conditional_expressions.md).

## Syntaxe
<a name="r_SELECT_list-synopsis"></a>

```
SELECT
[ TOP number ]
[ ALL | DISTINCT ] * | expression [ AS column_alias ] [, ...]
```

## Parameters
<a name="r_SELECT_list-parameters"></a>

TOP *nombre*   
TOP accepte un nombre entier positif comme argument, qui définit le nombre de lignes retournées au client. Le comportement avec la clause TOP est identique à celui avec la clause LIMIT. Le nombre de lignes qui est renvoyé est fixe, contrairement à l’ensemble de lignes. Pour renvoyer un ensemble de lignes constant, utilisez TOP ou LIMIT avec une clause ORDER BY. 

ALL   
Mot-clé redondant qui définit le comportement par défaut, si vous ne spécifiez pas DISTINCT. `SELECT ALL *` signifie la même chose que `SELECT *` (sélectionner toutes les lignes de toutes les colonnes et conserver les doublons). 

DISTINCT   
Option qui élimine les lignes en double du jeu de résultats, en fonction de la correspondance des valeurs dans une ou plusieurs colonnes.   
Si votre application autorise les clés étrangères ou primaires non valides, les requêtes peuvent renvoyer des résultats incorrects. Par exemple, une requête SELECT DISTINCT peut renvoyer des lignes dupliquées si la colonne de clé primaire ne contient pas que des valeurs uniques. Pour plus d'informations, consultez [Définition des contraintes de table](https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html).

\$1 (astérisque)   
renvoie tout le contenu de la table (toutes les colonnes et toutes les lignes). 

 *expression*   
Expression formée d’une ou de plusieurs colonnes qui existent dans les tables référencées par la requête. Une expression peut contenir des fonctions SQL. Par exemple :   

```
avg(datediff(day, listtime, saletime))
```

AS *alias\$1colonne*   
Nom temporaire de la colonne utilisé dans le jeu de résultats final. Le mot-clé AS est facultatif. Par exemple :   

```
avg(datediff(day, listtime, saletime)) as avgwait
```
Si vous ne spécifiez pas un alias pour une expression qui n’est pas un nom de colonne simple, le jeu de résultats applique un nom par défaut à cette colonne.   
L’alias est reconnu juste après sa définition dans la liste cible. Vous pouvez utiliser un alias dans d’autres expressions définies après lui dans la même liste cible. L’exemple suivant illustre ce scénario.   

```
select clicks / impressions as probability, round(100 * probability, 1) as percentage from raw_data;
```
La référence latérale à un alias vous évite de devoir répéter l’expression disposant d’un alias lors de la création d’expressions plus complexes dans la même liste cible. Lorsqu’Amazon Redshift analyse ce type de référence, il rajoute simplement dans la ligne les alias précédemment définis. S’il existe une colonne avec le même nom défini dans la clause `FROM` que dans l’expression disposant d’un alias précédente, la colonne dans la clause `FROM` a la priorité. Par exemple, dans la requête précédente, s’il existe une colonne nommée « probability » dans la table raw\$1data, le terme « probability » dans la seconde expression de la liste cible fait référence à cette colonne et non au nom d’alias « probability ». 

## Notes d’utilisation
<a name="r_SELECT_list_usage_notes"></a>

TOP est une extension SQL ; elle fournit une alternative au comportement LIMIT. Vous ne pouvez pas utiliser TOP et LIMIT dans la même requête.

## Exemples
<a name="r_SELECT_list-examples"></a>

L’exemple suivant renvoie 10 lignes de la table SALES. Bien que la requête utilise la clause TOP, elle renvoie toujours un ensemble imprévisible de lignes, car aucune clause ORDER BY n’est spécifiée.

```
select top 10 *
from sales;
```

La requête suivante est fonctionnellement équivalente, mais utilise une clause LIMIT au lieu d’une clause TOP :

```
select *
from sales
limit 10;
```

L’exemple suivant renvoie les 10 premières lignes de la table SALES en utilisant la clause TOP, classées dans la colonne QTYSOLD par ordre décroissant.

```
select top 10 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
8 |      574
8 |      718
8 |      868
8 |     2663
8 |     3396
8 |     3726
8 |     5250
8 |     6216
(10 rows)
```

L’exemple suivant renvoie les deux premières valeurs QTYSOLD et SELLERID de la table SALES, classées par la colonne QTYSOLD :

```
select top 2 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
(2 rows)
```

L’exemple suivant montre la liste des groupes de catégories distincts de la table CATEGORY :

```
select distinct catgroup from category
order by 1;

catgroup
----------
Concerts
Shows
Sports
(3 rows)

--the same query, run without distinct
select catgroup from category
order by 1;

catgroup
----------
Concerts
Concerts
Concerts
Shows
Shows
Shows
Sports
Sports
Sports
Sports
Sports
(11 rows)
```

L’exemple suivant renvoie l’ensemble distinct de numéros de semaine pour décembre 2008. Sans la clause DISTINCT, l’instruction renverrait 31 lignes, soit une pour chaque jour du mois.

```
select distinct week, month, year
from date
where month='DEC' and year=2008
order by 1, 2, 3;

week | month | year
-----+-------+------
49 | DEC   | 2008
50 | DEC   | 2008
51 | DEC   | 2008
52 | DEC   | 2008
53 | DEC   | 2008
(5 rows)
```



# EXCLUDE column\$1list
<a name="r_EXCLUDE_list"></a>

EXCLUDE column\$1list nomme les colonnes exclues des résultats de la requête. L’utilisation de l’option EXCLUDE est utile lorsque seul un sous-ensemble de colonnes doit être exclu d’une table *volumineuse*, c’est-à-dire une table contenant de nombreuses colonnes. 

**Topics**
+ [Syntaxe](#r_EXCLUDE_list-synopsis)
+ [Parameters](#r_EXCLUDE_list-parameters)
+ [Exemples](#r_EXCLUDE_list-examples)

## Syntaxe
<a name="r_EXCLUDE_list-synopsis"></a>

```
EXCLUDE column_list
```

## Parameters
<a name="r_EXCLUDE_list-parameters"></a>

 *column\$1list*   
Liste séparée par des virgules d’un ou de plusieurs noms de colonnes qui existent dans les tables référencées par la requête. *column\$1list* peut éventuellement être placé entre parenthèses. Seuls les noms de colonnes sont pris en charge dans la liste d’exclusion des noms de colonnes, et non les expressions (telles que `upper(col1)`) ou les astérisques (\$1).  

```
column-name, ... | ( column-name, ... )
```
Par exemple :   

```
SELECT * EXCLUDE col1, col2 FROM tablea;
```

```
SELECT * EXCLUDE (col1, col2) FROM tablea;
```

## Exemples
<a name="r_EXCLUDE_list-examples"></a>

Les exemples suivants utilisent la table SALES qui contient des colonnes : salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission et saletime. Pour plus d’informations sur la table SALES, consultez [Exemple de base de données](c_sampledb.md).

L’exemple suivant renvoie des lignes de la table SALES, mais exclut la colonne SALETIME.

```
SELECT * EXCLUDE saletime FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

L’exemple suivant renvoie des lignes de la table SALES, mais exclut les colonnes QTYSOLD et SALETIME.

```
SELECT * EXCLUDE (qtysold, saletime) FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 482        |  72.3	
...
```

L’exemple suivant crée une vue qui renvoie des lignes de la table SALES, mais exclut la colonne SALETIME.

```
CREATE VIEW sales_view AS SELECT * EXCLUDE saletime FROM sales;
SELECT * FROM sales_view;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

L’exemple suivant sélectionne uniquement les colonnes qui ne sont pas exclues d’une table temporaire.

```
SELECT * EXCLUDE saletime INTO TEMP temp_sales FROM sales;
SELECT * FROM temp_sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

# Clause FROM
<a name="r_FROM_clause30"></a>

La clause FROM d’une requête répertorie les références de table (tables, vues et sous-requêtes) à partir desquelles les données sont sélectionnées. Si plusieurs références de table sont répertoriées, les tables doivent être jointes, à l’aide de la syntaxe appropriée de la clause FROM ou de la clause WHERE. Si aucun critère de jointure n’est spécifié, le système traite la requête comme jointure croisée (produit cartésien). 

**Topics**
+ [Syntaxe](#r_FROM_clause30-synopsis)
+ [Parameters](#r_FROM_clause30-parameters)
+ [Notes d’utilisation](#r_FROM_clause_usage_notes)
+ [Exemples PIVOT et UNPIVOT](r_FROM_clause-pivot-unpivot-examples.md)
+ [Exemples de clause JOIN](r_Join_examples.md)
+ [Exemples de UNNEST](r_FROM_clause-unnest-examples.md)

## Syntaxe
<a name="r_FROM_clause30-synopsis"></a>

```
FROM table_reference [, ...]
```

où *table\$1reference* est l’une des références suivantes : 

```
with_subquery_table_name [ table_alias ]
table_name [ * ] [ table_alias ]
( subquery ) [ table_alias ]
table_reference [ NATURAL ] join_type table_reference
   [ ON join_condition | USING ( join_column [, ...] ) ]
table_reference  join_type super_expression 
   [ ON join_condition ]
table_reference PIVOT ( 
   aggregate(expr) [ [ AS ] aggregate_alias ]
   FOR column_name IN ( expression [ AS ] in_alias [, ...] )
) [ table_alias ]
table_reference UNPIVOT [ INCLUDE NULLS | EXCLUDE NULLS ] ( 
   value_column_name 
   FOR name_column_name IN ( column_reference [ [ AS ]
   in_alias ] [, ...] )
) [ table_alias ]
UNPIVOT expression AS value_alias [ AT attribute_alias ]
( super_expression.attribute_name ) AS value_alias [ AT index_alias ]
UNNEST ( column_reference )
  [AS] table_alias ( unnested_column_name )
UNNEST ( column_reference ) WITH OFFSET
  [AS] table_alias ( unnested_column_name, [offset_column_name] )
```

*table\$1alias* (facultatif) peut être utilisé pour donner des noms temporaires aux tables et aux références de tables complexes et, si vous le souhaitez, à leurs colonnes également, comme suit : 

```
[ AS ] alias [ ( column_alias [, ...] ) ]
```

## Parameters
<a name="r_FROM_clause30-parameters"></a>

 *with\$1subquery\$1table\$1name*   
Table définie par une sous-requête dans la [Clause WITH](r_WITH_clause.md). 

 *table\$1name*   
Nom d’une table ou d’une vue. 

 *alias*   
Nom alternatif temporaire d’une table ou d’une vue. Un alias doit être fourni pour une table dérivée d’une sous-requête. Dans les autres références de table, les alias sont facultatifs. Le mot-clé AS est toujours facultatif. Les alias de table offrent un raccourci pratique pour identifier les tables dans d’autres parties d’une requête, telles que la clause WHERE. Par exemple :   

```
select * from sales s, listing l
where s.listid=l.listid
```

 *alias\$1colonne*   
Nom alternatif temporaire pour une colonne dans une table ou une vue. 

 *sous-requête*   
Une expression de requête qui correspond à une table. La table existe uniquement pendant la durée de la requête et reçoit généralement un nom ou un *alias*. Toutefois, l’alias n’est pas obligatoire. Vous pouvez aussi définir des noms de colonnes pour les tables qui proviennent de sous-requêtes. Il est important de nommer les alias de colonne lorsque vous souhaitez joindre les résultats des sous-requêtes à d’autres tables et lorsque vous voulez sélectionner ou limiter les colonnes ailleurs dans la requête.   
Une sous-requête peut contenir une clause ORDER BY, mais cette clause peut n’avoir aucun effet si une clause LIMIT ou OFFSET n’est pas également spécifiée. 

NATURAL   
Définit une jointure qui utilise automatiquement toutes les paires de colonnes portant le même nom dans les deux tables comme colonnes de jointure. Aucune condition de jointure explicite n’est nécessaire. Par exemple, si les tables CATEGORY et EVENT ont toutes deux des colonnes nommées CATID, une jointure naturelle des tables est une jointure sur leurs colonnes CATID.   
Si une jointure NATURAL est spécifiée, mais qu’il n’y a aucune paire de colonnes portant le même nom dans les tables à joindre, la requête se résout par défaut en une jointure croisée. 

 *join\$1type*   
Spécifiez l’un des types de jointure suivants :   
+ [INNER] JOIN 
+ LEFT [OUTER] JOIN 
+ RIGHT [OUTER] JOIN 
+ FULL [OUTER] JOIN 
+ CROSS JOIN 
Les jointures croisées sont des jointures non qualifiées ; elles renvoient le produit cartésien des deux tables.   
Les jointures internes et externes sont des jointures qualifiées. Elles sont qualifiés implicitement (en jointures naturelles), avec la syntaxe ON ou USING de la clause FROM, ou avec une condition de clause WHERE.   
Une jointure interne renvoie les lignes correspondantes uniquement, en fonction de la condition de jointure ou d’une liste de colonnes de jointure. Une jointure externe renvoie toutes les lignes que la jointure interne équivalente renvoyerait, plus les lignes non correspondantes de la table de « gauche », de la table de « droite » ou des deux tables. La table de gauche est la première table de la liste et la table de droite la deuxième table. Les lignes non correspondantes contiennent des valeurs NULL pour combler les écarts dans les colonnes de sortie. 

ON *condition\$1jointure*   
Type de spécification de jointure où les colonnes de jointure sont définies comme condition qui suit le mot-clé ON. Par exemple :   

```
sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
```

USING ( *colonne\$1jointure* [, ...] )   
Type de spécification de jointure où les colonnes de jointure sont affichées entre parenthèses. Si plusieurs colonnes de jointure sont spécifiées, elles sont séparées par des virgules. Le mot-clé USING doit précéder la liste. Par exemple :   

```
sales join listing
using (listid,eventid)
```

PIVOT  
Fait pivoter la sortie des lignes vers les colonnes, dans le but de représenter les données tabulaires dans un format facile à lire. La sortie est représentée horizontalement sur plusieurs colonnes. PIVOT est similaire à une requête GROUP BY avec une agrégation, utilisant une expression agrégée pour spécifier un format de sortie. Toutefois, contrairement à GROUP BY, les résultats sont renvoyés sous forme de colonnes plutôt que de lignes.  
Pour bénéficier d’exemples montrant comment interroger avec PIVOT et UNPIVOT, consultez [Exemples PIVOT et UNPIVOT](r_FROM_clause-pivot-unpivot-examples.md).

UNPIVOT  
*Rotation de colonnes vers des lignes avec UNPIVOT* : l’opérateur UNPIVOT transforme les colonnes de résultats, d’une table d’entrée ou de résultats de requête, en lignes, pour faciliter la lecture de la sortie. UNPIVOT combine les données de ses colonnes d’entrée en deux colonnes de résultats : une colonne de noms et une colonne de valeurs. La colonne de noms contient les noms de colonnes provenant de l’entrée, sous forme d’entrées de ligne. La colonne de valeurs contient des valeurs provenant des colonnes d’entrée, telles que les résultats d’une agrégation. Par exemple, le nombre d’éléments dans différentes catégories.  
*Dépivotement de l’objet avec UNPIVOT (SUPER)* : vous pouvez effectuer le dépivotement d’un objet, où *expression* est une expression SUPER faisant référence à un autre élément de la clause FROM. Pour plus d’informations, consultez [Dépivotement d’objet](query-super.md#unpivoting). Il contient également des exemples montrant comment interroger des données semi-structurées telles que des données au format JSON.

*super\$1expression*  
Expression SUPER valide. Amazon Redshift renvoie une ligne pour chaque valeur de l’attribut spécifié. Pour plus d’informations sur le type de données SUPER, consultez [Type SUPER](r_SUPER_type.md). Pour plus d’informations sur les valeurs SUPER désimbriquées, consultez [Désimbriquer des requêtes](query-super.md#unnest).

*nom\$1attribut*  
Nom d’un attribut dans l’expression SUPER.

*index\$1alias*  
Alias pour l’index qui indique la position de la valeur dans l’expression SUPER.

UNNEST  
Étend une structure imbriquée, généralement un tableau SUPER, en colonnes contenant les éléments désimbriqués. Pour plus d’informations sur la désimbrication des données SUPER, consultez [Interrogation de données semi-structurées](query-super.md). Pour obtenir des exemples, consultez [Exemples de UNNEST](r_FROM_clause-unnest-examples.md). 

*unnested\$1column\$1name*  
Nom de la colonne qui contient les éléments désimbriqués. 

UNNEST ... WITH OFFSET  
Ajoute une colonne de décalage à la sortie désimbriquée, le décalage représentant l’indice de base zéro de chaque élément du tableau. Cette variante est utile lorsque vous souhaitez voir la position des éléments dans un tableau. Pour plus d’informations sur la désimbrication des données SUPER, consultez [Interrogation de données semi-structurées](query-super.md). Pour obtenir des exemples, consultez [Exemples de UNNEST](r_FROM_clause-unnest-examples.md). 

*offset\$1column\$1name*  
Nom personnalisé pour la colonne de décalage qui vous permet de définir explicitement la manière dont la colonne d’index apparaîtra dans la sortie. Ce paramètre est facultatif. Par défaut, le nom de la colonne de décalage est `offset_col`. 

## Notes d’utilisation
<a name="r_FROM_clause_usage_notes"></a>

Les colonnes de jointure doivent avoir des types de données comparables. 

Une jointure NATURAL ou USING conserve seulement l’une de chaque paire de colonnes de jointure dans le jeu de résultats intermédiaire. 

Une jointure avec la syntaxe ON conserve les deux colonnes de jointure dans son jeu de résultats intermédiaire. 

Consultez également [Clause WITH](r_WITH_clause.md). 

# Exemples PIVOT et UNPIVOT
<a name="r_FROM_clause-pivot-unpivot-examples"></a>

PIVOT et UNPIVOT sont des paramètres de la clause FROM qui font pivoter la sortie de la requête des lignes vers les colonnes et des colonnes vers les lignes, respectivement. Ils représentent des résultats de requêtes tabulaires dans un format facile à lire. Les exemples suivants utilisent des données et des requêtes de test pour montrer comment les utiliser.

Pour plus d’informations sur ces paramètres et d’autres, consultez [Clause FROM](https://docs.aws.amazon.com/redshift/latest/dg/r_FROM_clause30.html).

## Exemples PIVOT
<a name="r_FROM_clause-pivot-examples"></a>

Configurez l’exemple de table et de données, puis utilisez-les pour exécuter les requêtes d’exemple suivantes.

```
CREATE TABLE part (
    partname varchar,
    manufacturer varchar,
    quality int,
    price decimal(12, 2)
);

INSERT INTO part VALUES ('prop', 'local parts co', 2, 10.00);
INSERT INTO part VALUES ('prop', 'big parts co', NULL, 9.00);
INSERT INTO part VALUES ('prop', 'small parts co', 1, 12.00);

INSERT INTO part VALUES ('rudder', 'local parts co', 1, 2.50);
INSERT INTO part VALUES ('rudder', 'big parts co', 2, 3.75);
INSERT INTO part VALUES ('rudder', 'small parts co', NULL, 1.90);

INSERT INTO part VALUES ('wing', 'local parts co', NULL, 7.50);
INSERT INTO part VALUES ('wing', 'big parts co', 1, 15.20);
INSERT INTO part VALUES ('wing', 'small parts co', NULL, 11.80);
```

PIVOT sur `partname` avec une agrégation `AVG` sur `price`.

```
SELECT *
FROM (SELECT partname, price FROM part) PIVOT (
    AVG(price) FOR partname IN ('prop', 'rudder', 'wing')
);
```

La requête génèrera la sortie suivante.

```
  prop   |  rudder  |  wing
---------+----------+---------
 10.33   | 2.71     | 11.50
```

Dans l’exemple précédent, les résultats sont transformés en colonnes. L’exemple suivant montre une requête `GROUP BY` qui renvoie les prix moyens sous forme de lignes plutôt que de colonnes.

```
SELECT partname, avg(price)
FROM (SELECT partname, price FROM part)
WHERE partname IN ('prop', 'rudder', 'wing')
GROUP BY partname;
```

La requête génèrera la sortie suivante.

```
 partname |  avg
----------+-------
 prop     | 10.33
 rudder   |  2.71
 wing     | 11.50
```

Un exemple `PIVOT` avec `manufacturer` en tant que colonne implicite.

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) FOR quality IN (1, 2, NULL)
);
```

La requête génèrera la sortie suivante.

```
 manufacturer      | 1  | 2  | null
-------------------+----+----+------
 local parts co    | 1  | 1  |  1
 big parts co      | 1  | 1  |  1
 small parts co    | 1  | 0  |  2
```

 Les colonnes de table d’entrée qui ne sont pas référencées dans la définition de `PIVOT` sont ajoutées implicitement à la table de résultats. C’est le cas pour la colonne `manufacturer` de l’exemple précédent. L’exemple montre également que `NULL` est une valeur valide pour l’opérateur `IN`. 

`PIVOT` dans l’exemple ci-dessus renvoie des informations similaires à celles de la requête suivante, qui inclut `GROUP BY`. La différence est que `PIVOT` renvoie la valeur `0` pour la colonne `2` et le fabricant `small parts co`. La requête `GROUP BY` ne contient pas de ligne correspondante. Dans la plupart des cas, `PIVOT` insère `NULL` si une ligne ne contient pas de données d’entrée pour une colonne donnée. Toutefois, l’agrégat de nombre ne renvoie pas `NULL` et `0` est la valeur par défaut.

```
SELECT manufacturer, quality, count(*)
FROM (SELECT quality, manufacturer FROM part)
WHERE quality IN (1, 2) OR quality IS NULL
GROUP BY manufacturer, quality
ORDER BY manufacturer;
```

La requête génèrera la sortie suivante.

```
 manufacturer        | quality | count
---------------------+---------+-------
 big parts co        |         |     1
 big parts co        |       2 |     1
 big parts co        |       1 |     1
 local parts co      |       2 |     1
 local parts co      |       1 |     1
 local parts co      |         |     1
 small parts co      |       1 |     1
 small parts co      |         |     2
```

 L’opérateur PIVOT accepte les alias facultatifs sur l’expression agrégée et sur chaque valeur pour l’opérateur `IN`. Utilisez des alias pour personnaliser les noms des colonnes. S’il n’y a pas d’alias agrégé, seuls les alias de liste `IN` sont utilisés. Sinon, l’alias agrégé est ajouté au nom de la colonne avec un trait de soulignement pour séparer les noms. 

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) AS count FOR quality IN (1 AS high, 2 AS low, NULL AS na)
);
```

La requête génèrera la sortie suivante.

```
 manufacturer      | high_count  | low_count | na_count
-------------------+-------------+-----------+----------
 local parts co    |           1 |         1 |        1
 big parts co      |           1 |         1 |        1
 small parts co    |           1 |         0 |        2
```

Configurez les exemples de table et de données suivants, puis utilisez-les pour exécuter les requêtes d’exemple suivantes. Les données représentent les dates de réservation pour un ensemble d’hôtels.

```
CREATE TABLE bookings (
    booking_id int,
    hotel_code char(8),
    booking_date date,
    price decimal(12, 2)
);

INSERT INTO bookings VALUES (1, 'FOREST_L', '02/01/2023', 75.12);
INSERT INTO bookings VALUES (2, 'FOREST_L', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (3, 'FOREST_L', '02/04/2023', 85.54);

INSERT INTO bookings VALUES (4, 'FOREST_L', '02/08/2023', 75.00);
INSERT INTO bookings VALUES (5, 'FOREST_L', '02/11/2023', 75.00);
INSERT INTO bookings VALUES (6, 'FOREST_L', '02/14/2023', 90.00);

INSERT INTO bookings VALUES (7, 'FOREST_L', '02/21/2023', 60.00);
INSERT INTO bookings VALUES (8, 'FOREST_L', '02/22/2023', 85.00);
INSERT INTO bookings VALUES (9, 'FOREST_L', '02/27/2023', 90.00);

INSERT INTO bookings VALUES (10, 'DESERT_S', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (11, 'DESERT_S', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (12, 'DESERT_S', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (13, 'DESERT_S', '02/05/2023', 75.00);
INSERT INTO bookings VALUES (14, 'DESERT_S', '02/06/2023', 34.00);
INSERT INTO bookings VALUES (15, 'DESERT_S', '02/09/2023', 85.00);

INSERT INTO bookings VALUES (16, 'DESERT_S', '02/12/2023', 23.00);
INSERT INTO bookings VALUES (17, 'DESERT_S', '02/13/2023', 76.00);
INSERT INTO bookings VALUES (18, 'DESERT_S', '02/14/2023', 85.00);

INSERT INTO bookings VALUES (19, 'OCEAN_WV', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (20, 'OCEAN_WV', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (21, 'OCEAN_WV', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (22, 'OCEAN_WV', '02/06/2023', 75.00);
INSERT INTO bookings VALUES (23, 'OCEAN_WV', '02/09/2023', 34.00);
INSERT INTO bookings VALUES (24, 'OCEAN_WV', '02/12/2023', 85.00);

INSERT INTO bookings VALUES (25, 'OCEAN_WV', '02/13/2023', 23.00);
INSERT INTO bookings VALUES (26, 'OCEAN_WV', '02/14/2023', 76.00);
INSERT INTO bookings VALUES (27, 'OCEAN_WV', '02/16/2023', 85.00);

INSERT INTO bookings VALUES (28, 'CITY_BLD', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (29, 'CITY_BLD', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (30, 'CITY_BLD', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (31, 'CITY_BLD', '02/12/2023', 75.00);
INSERT INTO bookings VALUES (32, 'CITY_BLD', '02/13/2023', 34.00);
INSERT INTO bookings VALUES (33, 'CITY_BLD', '02/17/2023', 85.00);

INSERT INTO bookings VALUES (34, 'CITY_BLD', '02/22/2023', 23.00);
INSERT INTO bookings VALUES (35, 'CITY_BLD', '02/23/2023', 76.00);
INSERT INTO bookings VALUES (36, 'CITY_BLD', '02/24/2023', 85.00);
```

 Dans cet exemple de requête, les enregistrements de réservations sont comptabilisés pour donner un total pour chaque semaine. La date de fin de chaque semaine devient un nom de colonne.

```
SELECT * FROM
    (SELECT
       booking_id,
       (date_trunc('week', booking_date::date) + '5 days'::interval)::date as enddate,
       hotel_code AS "hotel code"
FROM bookings
) PIVOT (
    count(booking_id) FOR enddate IN ('2023-02-04','2023-02-11','2023-02-18') 
);
```

La requête génèrera la sortie suivante.

```
 hotel code | 2023-02-04  | 2023-02-11 | 2023-02-18
------------+-------------+------------+----------
 FOREST_L   |           3 |          2 |        1
 DESERT_S   |           4 |          3 |        2
 OCEAN_WV   |           3 |          3 |        3
 CITY_BLD   |           3 |          1 |        2
```

 Amazon Redshift ne prend pas en charge CROSSTAB pour pivoter sur plusieurs colonnes. Mais vous pouvez transformer les données de ligne en colonnes, comme pour un regroupement avec PIVOT, à l’aide d’une requête telle que la suivante. L’exemple précédent utilise les mêmes données de réservation que celles de l’exemple précédent.

```
SELECT 
  booking_date,
  MAX(CASE WHEN hotel_code = 'FOREST_L' THEN 'forest is booked' ELSE '' END) AS FOREST_L,
  MAX(CASE WHEN hotel_code = 'DESERT_S' THEN 'desert is booked' ELSE '' END) AS DESERT_S,
  MAX(CASE WHEN hotel_code = 'OCEAN_WV' THEN 'ocean is booked' ELSE '' END)  AS OCEAN_WV
FROM bookings
GROUP BY booking_date
ORDER BY booking_date asc;
```

L’exemple de requête donne lieu à des dates de réservation répertoriées à côté de phrases courtes qui indiquent quels hôtels sont réservés.

```
 booking_date  | forest_l         | desert_s         | ocean_wv
---------------+------------------+------------------+--------------------
 2023-02-01    | forest is booked | desert is booked |  ocean is booked
 2023-02-02    | forest is booked | desert is booked |  ocean is booked
 2023-02-04    | forest is booked | desert is booked |  ocean is booked
 2023-02-05    |                  | desert is booked |        
 2023-02-06    |                  | desert is booked |
```

Voici des notes d’utilisation pour `PIVOT` :
+ `PIVOT`peut être appliqué aux tables, aux sous-requêtes et aux expressions de table communes (CTEs). `PIVOT`ne peut être appliqué à aucune `JOIN` expression, récursive CTEs ou `UNPIVOT` expression. `PIVOT` De plus, les expressions non imbriquées `SUPER` et les tables imbriquées Redshift Spectrum ne sont pas prises en charge.
+  `PIVOT` prend en charge les fonctions agrégées `COUNT`, `SUM`, `MIN`, `MAX` et `AVG`. 
+ L’expression agrégée `PIVOT` doit être un appel d’une fonction agrégée prise en charge. Les expressions complexes en plus de l’agrégat ne sont pas prises en charge. Les arguments agrégés ne peuvent pas contenir de références à d’autres tables que la table d’entrée `PIVOT`. Les références corrélées à une requête parente ne sont pas prises en charge. L’argument agrégé peut contenir des sous-requêtes. Elles peuvent être corrélées en interne ou sur la table d’entrée `PIVOT`.
+  Les valeurs de liste `PIVOT IN` ne peuvent pas être des références de colonnes ou des sous-requêtes. Chaque valeur doit être de type compatible avec la référence de colonne `FOR`. 
+  Si les valeurs de liste `IN` n’ont pas d’alias, `PIVOT` génère des noms de colonnes par défaut. Pour des valeurs constantes `IN` telles que « abc » ou 5, le nom de colonne par défaut est la constante elle-même. Pour toute expression complexe, le nom de la colonne est un nom par défaut Amazon Redshift standard tel que `?column?`. 

## Exemples UNPIVOT
<a name="r_FROM_clause-unpivot-examples"></a>

Configurez les exemples de données et utilisez-les pour exécuter les exemples suivants.

```
CREATE TABLE count_by_color (quality varchar, red int, green int, blue int);

INSERT INTO count_by_color VALUES ('high', 15, 20, 7);
INSERT INTO count_by_color VALUES ('normal', 35, NULL, 40);
INSERT INTO count_by_color VALUES ('low', 10, 23, NULL);
```

`UNPIVOT` sur les colonnes d’entrée rouges, vertes et bleues.

```
SELECT *
FROM (SELECT red, green, blue FROM count_by_color) UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

La requête génèrera la sortie suivante.

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |  23
 blue  |   7
 blue  |  40
```

Par défaut, les valeurs `NULL` de la colonne d’entrée sont ignorées et ne produisent pas de ligne de résultats. 

L’exemple suivant montre `UNPIVOT` avec `INCLUDE NULLS`.

```
SELECT *
FROM (
    SELECT red, green, blue
    FROM count_by_color
) UNPIVOT INCLUDE NULLS (
    cnt FOR color IN (red, green, blue)
);
```

En voici le résultat obtenu.

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |
 green |  23
 blue  |   7
 blue  |  40
 blue  |
```

Si le paramètre `INCLUDING NULLS` est défini, les valeurs d’entrée `NULL` génèrent des lignes de résultats.

`The following query shows UNPIVOT` avec `quality` en tant que colonne implicite.

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

La requête génèrera la sortie suivante.

```
 quality | color | cnt
---------+-------+-----
 high    | red   |  15
 normal  | red   |  35
 low     | red   |  10
 high    | green |  20
 low     | green |  23
 high    | blue  |   7
 normal  | blue  |  40
```

Les colonnes de la table d’entrée qui ne sont pas référencées dans la définition de `UNPIVOT` sont ajoutées implicitement à la table de résultats. Dans cet exemple, c’est le cas pour la colonne `quality`.

L’exemple suivant en est une illustration de `UNPIVOT` avec des alias pour les valeurs dans la liste `IN`.

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
```

La requête précédente génère le résultat suivant.

```
 quality | color | cnt
---------+-------+-----
 high    | r     |  15
 normal  | r     |  35
 low     | r     |  10
 high    | g     |  20
 low     | g     |  23
 high    | b     |   7
 normal  | b     |  40
```

L’opérateur `UNPIVOT` accepte les alias facultatifs sur chaque valeur de liste `IN`. Chaque alias permet de personnaliser les données de chaque colonne `value`.

Voici des notes d’utilisation pour `UNPIVOT`.
+ `UNPIVOT`peut être appliqué aux tables, aux sous-requêtes et aux expressions de table communes (CTEs). `UNPIVOT`ne peut être appliqué à aucune `JOIN` expression, récursive CTEs ou `UNPIVOT` expression. `PIVOT` De plus, les expressions non imbriquées `SUPER` et les tables imbriquées Redshift Spectrum ne sont pas prises en charge.
+ La liste `UNPIVOT IN` doit contenir uniquement des références de colonnes de table d’entrée. Les colonnes de la liste `IN` doivent avoir un type commun avec lequel elles sont toutes compatibles. La colonne de valeurs `UNPIVOT` a ce type commun. La colonne de noms `UNPIVOT` est de type `VARCHAR`.
+ Si une valeur de liste `IN` ne possède pas d’alias, `UNPIVOT` utilise le nom de la colonne comme valeur par défaut.

# Exemples de clause JOIN
<a name="r_Join_examples"></a>

Une clause SQL JOIN permet de combiner les données de deux ou plusieurs tables sur la base de champs communs. Les résultats peuvent ou non changer en fonction de la méthode de jointure spécifiée. Pour obtenir plus d’informations sur la syntaxe d’une clause JOIN, consultez [Parameters](r_FROM_clause30.md#r_FROM_clause30-parameters). 

Les exemples suivants utilisent les exemples de données `TICKIT`. Pour obtenir plus d’informations sur le schéma de la base de données, consultez [Exemple de base de données](c_sampledb.md). Pour savoir comment charger des exemples de données, consultez [Chargement des données](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) dans le *Guide de démarrage d’Amazon Redshift*.

La requête suivante est une jointure interne (sans le mot-clé JOIN) entre la table LISTING et la table SALES, où la valeur LISTID de la table LISTING est comprise entre 1 et 5. Cette requête met en correspondance les valeurs de la colonne LISTID dans les tables LISTING (table de gauche) et SALES (table de droite). Les résultats montrent que les valeurs LISTID 1, 4 et 5 correspondent aux critères.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing, sales
where listing.listid = sales.listid
and listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

La requête suivante est une jointure externe gauche. Les jointures externes gauche et droite conservent les valeurs de l’une des tables jointes quand aucune correspondance n’est trouvée dans l’autre table. Les tables gauche et droite sont la première et la deuxième répertoriées dans la syntaxe. Les valeurs NULL sont utilisées pour combler les « écarts » du jeu de résultats. Cette requête fait correspondre les valeurs de la colonne LISTID dans la table LISTING (la table de gauche) et la table SALES (la table de droite). Les résultats montrent que LISTIDs 2 et 3 n'ont donné lieu à aucune vente.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing left outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

La requête suivante est une jointure externe droite. Cette requête fait correspondre les valeurs de la colonne LISTID dans la table LISTING (la table de gauche) et la table SALES (la table de droite). Les résultats montrent que LISTIDs 1, 4 et 5 correspondent aux critères.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing right outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

La requête suivante est une jointure complète. Les jointures complètes conservent les valeurs des tables jointes lorsqu’aucune correspondance n’est trouvée dans l’autre table. Les tables gauche et droite sont la première et la deuxième répertoriées dans la syntaxe. Les valeurs NULL sont utilisées pour combler les « écarts » du jeu de résultats. Cette requête fait correspondre les valeurs de la colonne LISTID dans la table LISTING (la table de gauche) et la table SALES (la table de droite). Les résultats montrent que LISTIDs 2 et 3 n'ont donné lieu à aucune vente.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

La requête suivante est une jointure complète. Cette requête fait correspondre les valeurs de la colonne LISTID dans la table LISTING (la table de gauche) et la table SALES (la table de droite). Seules les lignes qui ne génèrent aucune vente (LISTIDs 2 et 3) apparaissent dans les résultats.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
and (listing.listid IS NULL or sales.listid IS NULL)
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     2 | NULL   | NULL
     3 | NULL   | NULL
```

L’exemple suivant est une jointure interne avec la clause ON. Dans ce cas, les lignes NULL ne sont pas renvoyées.

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

La requête suivante est une jointure croisée ou cartésienne de la table LISTING et de la table SALES avec un prédicat pour limiter les résultats. Cette requête correspond aux valeurs des colonnes LISTID de la table SALES et de la table LISTING pour LISTIDs 1, 2, 3, 4 et 5 dans les deux tables. Les résultats montrent que 20 lignes correspondent aux critères.

```
select sales.listid as sales_listid, listing.listid as listing_listid
from sales cross join listing
where sales.listid between 1 and 5
and listing.listid between 1 and 5
order by 1,2;

sales_listid | listing_listid
-------------+---------------
1            | 1
1            | 2
1            | 3
1            | 4
1            | 5
4            | 1
4            | 2
4            | 3
4            | 4
4            | 5
5            | 1
5            | 1
5            | 2
5            | 2
5            | 3
5            | 3
5            | 4
5            | 4
5            | 5
5            | 5
```

L’exemple suivant est une jointure naturelle entre deux tables. Dans ce cas, les colonnes listid, sellerid, eventid et dateid présentent des noms et des types de données identiques dans les deux tables et sont donc utilisées comme colonnes de jointure. Les résultats sont limités à seulement cinq lignes.

```
select listid, sellerid, eventid, dateid, numtickets
from listing natural join sales
order by 1
limit 5;

listid | sellerid  | eventid | dateid | numtickets
-------+-----------+---------+--------+-----------
113    | 29704     | 4699    | 2075   | 22
115    | 39115     | 3513    | 2062   | 14
116    | 43314     | 8675    | 1910   | 28
118    | 6079      | 1611    | 1862   | 9
163    | 24880     | 8253    | 1888   | 14
```

L’exemple suivant est une jointure entre deux tables avec la clause USING. Dans ce cas, les colonnes listid et eventid sont utilisées comme colonnes de jointure. Les résultats sont limités à seulement cinq lignes.

```
select listid, listing.sellerid, eventid, listing.dateid, numtickets
from listing join sales
using (listid, eventid)
order by 1
limit 5;

listid | sellerid | eventid | dateid | numtickets
-------+----------+---------+--------+-----------
1      | 36861    | 7872    | 1850   | 10
4      | 8117     | 4337    | 1970   | 8
5      | 1616     | 8647    | 1963   | 4
5      | 1616     | 8647    | 1963   | 4
6      | 47402    | 8240    | 2053   | 18
```

La requête suivante est une jointure interne de deux sous-requêtes de la clause FROM. La requête recherche le nombre de billets vendus et invendus pour les différentes catégories d’événements (concerts et spectacles). Les sous-requêtes de la clause FROM sont des sous-requêtes de *table* ; elles peuvent renvoyer plusieurs lignes et colonnes.

```
select catgroup1, sold, unsold
from
(select catgroup, sum(qtysold) as sold
from category c, event e, sales s
where c.catid = e.catid and e.eventid = s.eventid
group by catgroup) as a(catgroup1, sold)
join
(select catgroup, sum(numtickets)-sum(qtysold) as unsold
from category c, event e, sales s, listing l
where c.catid = e.catid and e.eventid = s.eventid
and s.listid = l.listid
group by catgroup) as b(catgroup2, unsold)

on a.catgroup1 = b.catgroup2
order by 1;

catgroup1 |  sold  | unsold
----------+--------+--------
Concerts  | 195444 |1067199
Shows     | 149905 | 817736
```

# Exemples de UNNEST
<a name="r_FROM_clause-unnest-examples"></a>

UNNEST est un paramètre de la clause FROM qui étend les données imbriquées en colonnes contenant les éléments désimbriqués des données. Pour plus d’informations sur la désimbrication des données, consultez [Interrogation de données semi-structurées](query-super.md).

L'instruction suivante crée et remplit le `orders` tableau, qui contient une `products` colonne contenant des tableaux de produits. IDs Les exemples de cette section utilisent les exemples de données de cette table. 

```
CREATE TABLE orders (
    order_id INT,
    products SUPER
);

-- Populate table
INSERT INTO orders VALUES
(1001, JSON_PARSE('[
        {
            "product_id": "P456",
            "name": "Monitor",
            "price": 299.99,
            "quantity": 1,
            "specs": {
                "size": "27 inch",
                "resolution": "4K"
            }
        }
    ]
')),
(1002, JSON_PARSE('
    [
        {
            "product_id": "P567",
            "name": "USB Cable",
            "price": 9.99,
            "quantity": 3
        },
        {
            "product_id": "P678",
            "name": "Headphones",
            "price": 159.99,
            "quantity": 1,
            "specs": {
                "type": "Wireless",
                "battery_life": "20 hours"
            }
        }
    ]
'));
```

Voici quelques exemples de requêtes de désimbrication avec les exemples de données à l’aide de la syntaxe PartiQL.

## Désimbrication d’un tableau sans colonne OFFSET
<a name="r_FROM_clause-unnest-examples-no-offset"></a>

La requête suivante désintègre les tableaux SUPER dans la colonne des produits, chaque ligne représentant un article de la commande dans `order_id`.

```
SELECT o.order_id, unnested_products.product
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(3 rows)
```

La requête suivante recherche le produit le plus cher de chaque commande.

```
SELECT o.order_id, MAX(unnested_products.product)
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(2 rows)
```

## Désimbrication d’un tableau avec une colonne OFFSET implicite
<a name="r_FROM_clause-unnest-examples-implicit-offset"></a>

La requête suivante utilise le paramètre `UNNEST ... WITH OFFSET` pour afficher la position de base zéro de chaque produit dans son tableau de commandes.

```
SELECT o.order_id, up.product, up.offset_col
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product);

 order_id |                                                           product                                                           | offset_col 
----------+-----------------------------------------------------------------------------------------------------------------------------+------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |          0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |          0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |          1
(3 rows)
```

Étant donné que l’instruction ne spécifie pas d’alias pour la colonne offset, Amazon Redshift la nomme `offset_col` par défaut.

## Désimbrication d’un tableau avec une colonne OFFSET explicite
<a name="r_FROM_clause-unnest-examples-explicit-offset"></a>

La requête suivante utilise également le paramètre `UNNEST ... WITH OFFSET` pour afficher les produits dans leurs tableaux de commandes. La différence entre cette requête et celle de l’exemple précédent réside dans le fait qu’elle nomme explicitement la colonne de décalage avec l’alias `idx`.

```
SELECT o.order_id, up.product, up.idx
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product, idx);

 order_id |                                                           product                                                           | idx 
----------+-----------------------------------------------------------------------------------------------------------------------------+-----
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |   0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |   0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |   1
(3 rows)
```

# Clause WHERE
<a name="r_WHERE_clause"></a>

La clause WHERE contient les conditions qui joignent les tables ou appliquent les prédicats aux colonnes des tables. Les tables peuvent être à jointure interne en utilisant la syntaxe appropriée dans la clause WHERE ou FROM. Les critères de jointure externe doivent être spécifiés dans la clause FROM. 

## Syntaxe
<a name="r_WHERE_clause-synopsis"></a>

```
[ WHERE condition ]
```

## *condition*
<a name="r_WHERE_clause-synopsis-condition"></a>

Toute condition avec un résultat Boolean, comme une condition de jointure ou un prédicat sur une colonne de table. Les exemples suivants sont des conditions de jointure valides : 

```
sales.listid=listing.listid
sales.listid<>listing.listid
```

Les exemples suivants sont des conditions valides sur les colonnes des tables : 

```
catgroup like 'S%'
venueseats between 20000 and 50000
eventname in('Jersey Boys','Spamalot')
year=2008
length(catdesc)>25
date_part(month, caldate)=6
```

Les conditions peuvent être simples ou complexes ; pour les conditions complexes, vous pouvez utiliser des parenthèses afin d’isoler des unités logiques. Dans l’exemple suivant, la condition de jointure est placée entre parenthèses. 

```
where (category.catid=event.catid) and category.catid in(6,7,8)
```

## Notes d’utilisation
<a name="r_WHERE_clause_usage_notes"></a>

Vous pouvez utiliser des alias dans la clause WHERE pour référencer les expressions de liste de sélection. 

Vous ne pouvez pas limiter les résultats des fonctions d’agrégation dans la clause WHERE ; utilisez à cette fin la clause HAVING. 

Les colonnes qui sont limités dans la clause WHERE doivent provenir de références de table de la clause FROM. 

## Exemple
<a name="r_SELECT_synopsis-example"></a>

La requête suivante utilise une combinaison de différentes restrictions de clause WHERE, y compris une condition de jointure pour les tables SALES et EVENT, un prédicat sur la colonne EVENTNAME et deux prédicats sur la colonne STARTTIME. 

```
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Hannah Montana'
and date_part(quarter, starttime) in(1,2)
and date_part(year, starttime) = 2008
order by 3 desc, 4, 2, 1 limit 10;

eventname    |      starttime      |   costperticket   | qtysold
----------------+---------------------+-------------------+---------
Hannah Montana | 2008-06-07 14:00:00 |     1706.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |     1658.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       3
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       4
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       1
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       4
(10 rows)
```

# Jointures externes Oracle dans la clause WHERE
<a name="r_WHERE_oracle_outer"></a>

Pour des raisons de compatibilité Oracle, Amazon Redshift prend en charge l’opérateur de jointure externe Oracle (\$1) dans les conditions de clause WHERE. Cet opérateur doit être utilisé uniquement dans la définition de conditions de jointure externe ; n’essayez pas de l’utiliser dans d’autres contextes. Les autres utilisations de cet opérateur sont automatiquement ignorées dans la plupart des cas. 

Une jointure externe renvoie toutes les lignes que la jointure interne équivalente renvoie, plus les lignes non correspondantes d’une ou de deux tables. Dans la clause FROM, vous pouvez spécifier des jointures externes gauches, droites et complètes. Dans la clause WHERE, vous ne pouvez spécifier que des jointures externes gauches et droites. 

Pour les tables de jointure externes TABLE1 TABLE2 et pour renvoyer des lignes non correspondantes depuis TABLE1 (une jointure externe gauche), spécifiez-le `TABLE1 LEFT OUTER JOIN TABLE2` dans la clause FROM ou appliquez l'opérateur (\$1) à toutes les colonnes de jointure depuis TABLE2 la clause WHERE. Pour toutes les lignes TABLE1 qui ne contiennent aucune ligne correspondante TABLE2, le résultat de la requête contient des valeurs nulles pour toutes les expressions de liste de sélection contenant des colonnes provenant de TABLE2. 

Pour produire le même comportement pour toutes les lignes TABLE2 qui ne contiennent aucune ligne correspondante TABLE1, spécifiez-le `TABLE1 RIGHT OUTER JOIN TABLE2` dans la clause FROM ou appliquez l'opérateur (\$1) à toutes les colonnes jointes depuis TABLE1 la clause WHERE. 

## Syntaxe de base
<a name="r_WHERE_oracle_outer-basic-syntax"></a>

```
[ WHERE {
[ table1.column1 = table2.column1(+) ]
[ table1.column1(+) = table2.column1 ]
}
```

La première condition est équivalente à : 

```
from table1 left outer join table2
on table1.column1=table2.column1
```

La deuxième condition est équivalente à : 

```
from table1 right outer join table2
on table1.column1=table2.column1
```

**Note**  
La syntaxe présentée ici couvre le cas simple d’une équijointure sur une paire de colonnes de jointure. Cependant, d’autres types de conditions de comparaison et plusieurs paires de colonnes de jointure sont également valides. 

Par exemple, la clause WHERE suivante définit une jointure externe sur deux paires de colonnes. L’opérateur (\$1) doit être associé à la même table dans les deux conditions : 

```
where table1.col1 > table2.col1(+)
and table1.col2 = table2.col2(+)
```

## Notes d’utilisation
<a name="r_WHERE_oracle_outer_usage_notes"></a>

Si possible, utilisez la syntaxe OUTER JOIN de la clause standard FROM au lieu de l’opérateur (\$1) dans la clause WHERE. Les requêtes qui contiennent l’opérateur (\$1) sont soumises aux règles suivantes : 
+ Vous ne pouvez utiliser que l’opérateur (\$1) dans la clause WHERE, et uniquement en référence aux colonnes des tables ou des vues. 
+ Vous ne pouvez pas appliquer l’opérateur (\$1) aux expressions. Cependant, une expression peut contenir des colonnes qui utilisent l’opérateur (\$1). Par exemple, la condition de jointure suivante renvoie une erreur de syntaxe : 

  ```
  event.eventid*10(+)=category.catid
  ```

  Cependant, la condition de jointure suivante est valide : 

  ```
  event.eventid(+)*10=category.catid
  ```
+ Vous ne pouvez pas utiliser l’opérateur (\$1) dans un bloc de requête qui contient également la syntaxe de jointure de la clause FROM. 
+ Si deux tables sont jointes sur plusieurs conditions de jointure, vous devez utiliser l’opérateur (\$1) dans la totalité de ces conditions ou dans aucune d’entre elles. Une jointure avec des styles de syntaxe mixtes est exécutée comme jointure interne, sans avertissement. 
+ L’opérateur (\$1) ne génère pas une jointure externe si vous joignez une table de la requête externe à une table qui résulte d’une requête interne. 
+ Pour utiliser l’opérateur (\$1) et créer une jointure externe d’une table avec elle-même, vous devez définir les alias de table dans la clause FROM et les référencer dans la condition de jointure : 

  ```
  select count(*)
  from event a, event b
  where a.eventid(+)=b.catid;
  
  count
  -------
  8798
  (1 row)
  ```
+ Vous ne pouvez pas associer une condition de jointure contenant l’opérateur (\$1) avec une condition OR ou une condition IN. Par exemple : 

  ```
  select count(*) from sales, listing
  where sales.listid(+)=listing.listid or sales.salesid=0;
  ERROR:  Outer join operator (+) not allowed in operand of OR or IN.
  ```
+  Dans une clause WHERE qui crée une jointure externe avec plus de deux tables, l’opérateur (\$1) ne peut être appliqué qu’une seule fois à une table donnée. Dans l’exemple suivant, la table SALES ne peut pas être référencée par l’opérateur (\$1) dans deux jointures successives. 

  ```
  select count(*) from sales, listing, event
  where sales.listid(+)=listing.listid and sales.dateid(+)=date.dateid;
  ERROR:  A table may be outer joined to at most one other table.
  ```
+  Si la condition de jointure externe de la clause WHERE compare une colonne à TABLE2 une constante, appliquez l'opérateur (\$1) à la colonne. Si vous n'incluez pas l'opérateur, les lignes jointes à l'extérieur de TABLE1, qui contiennent des valeurs nulles pour la colonne restreinte, sont éliminées. Consultez la section Exemples ci-dessous. 

## Exemples
<a name="r_WHERE_oracle_outer-examples"></a>

La requête de jointure suivante spécifie une jointure externe gauche des tables SALES et LISTING, sur leurs colonnes LISTID : 

```
select count(*)
from sales, listing
where sales.listid = listing.listid(+);

count
--------
172456
(1 row)
```

La requête équivalente suivante produit le même résultat, mais utilise la syntaxe de jointure de la clause FROM : 

```
select count(*)
from sales left outer join listing on sales.listid = listing.listid;

count
--------
172456
(1 row)
```

La table SALES ne contient pas d’enregistrements pour toutes les listes de la table LISTING, car certaines listes ne se traduisent pas par des ventes. La requête suivante crée une jointure externe de SALES et de LISTING, et renvoie les lignes de LISTING même lorsque la table SALES ne rapporte aucune vente pour un ID de liste donné. Les colonnes PRICE et COMM, dérivées de la table SALES, contiennent des valeurs null dans le jeu de résultats pour ces lignes sans correspondance. 

```
select listing.listid, sum(pricepaid) as price,
sum(commission) as comm
from listing, sales
where sales.listid(+) = listing.listid and listing.listid between 1 and 5
group by 1 order by 1;

listid | price  |  comm
--------+--------+--------
1 | 728.00 | 109.20
2 |        |
3 |        |
4 |  76.00 |  11.40
5 | 525.00 |  78.75
(5 rows)
```

Notez que lorsque l’opérateur de jointure de la clause WHERE est utilisé, l’ordre des tables dans la clause FROM n’importe pas. 

L’exemple d’une condition de jointure externe plus complexe dans la clause WHERE est celui où la condition se compose d’une comparaison entre deux Colonnes de la table *et* d’une comparaison avec une constante : 

```
where category.catid=event.catid(+) and eventid(+)=796;
```

Notez que l’opérateur (\$1) est utilisé à deux emplacements : d’abord dans la comparaison d’égalité entre les tables et ensuite dans la condition de comparaison pour la colonne EVENTID. Le résultat de cette syntaxe est la conservation des lignes de jointure externe lors de l’évaluation de la restriction sur EVENTID. Si vous supprimez l’opérateur (\$1) de la restriction EVENTID, la requête traite cette restriction comme filtre, pas dans le cadre de la condition de jointure externe. A leur tour, les lignes de jointure externe qui contiennent des valeurs null pour EVENTID sont éliminées du jeu de résultats. 

Voici une requête complète qui illustre ce comportement : 

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid(+)=796;

catname | catgroup | eventid
-----------+----------+---------
Classical | Concerts |
Jazz | Concerts |
MLB | Sports   |
MLS | Sports   |
Musicals | Shows    | 796
NBA | Sports   |
NFL | Sports   |
NHL | Sports   |
Opera | Shows    |
Plays | Shows    |
Pop | Concerts |
(11 rows)
```

La requête équivalente à l’aide de la syntaxe de la clause FROM est la suivante : 

```
select catname, catgroup, eventid
from category left join event
on category.catid=event.catid and eventid=796;
```

Si vous supprimez le deuxième opérateur (\$1) de la version de la clause WHERE de cette requête, elle renvoie uniquement 1 ligne (celle où `eventid=796`). 

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid=796;

catname | catgroup | eventid
-----------+----------+---------
Musicals | Shows    | 796
(1 row)
```

# Clause GROUP BY
<a name="r_GROUP_BY_clause"></a>

La clause GROUP BY identifie les colonnes de regroupement de la requête. Elle est utilisée pour regrouper les lignes d’une table qui ont les mêmes valeurs dans toutes les colonnes répertoriées. L’ordre dans lequel les colonnes sont répertoriées n’a pas d’importance. Le résultat est de combiner chaque ensemble de lignes ayant des valeurs communes en une seule ligne de groupe qui représente toutes les lignes du groupe. Utilisez GROUP BY pour éliminer la redondance dans la sortie et pour calculer les agrégats qui s’appliquent aux groupes. Les colonnes de regroupement doivent être déclarées lorsque la requête calcule les regroupements avec des fonctions standard telles que SUM, AVG et COUNT. Pour plus d’informations, consultez [Fonctions d’agrégation](c_Aggregate_Functions.md).

## Syntaxe
<a name="r_GROUP_BY_clause-syntax"></a>

```
[ GROUP BY  expression [, ...] | ALL | aggregation_extension  ]
```

où *aggregation\$1extension* est l’une des valeurs suivantes :

```
GROUPING SETS ( () | aggregation_extension [, ...] ) |
ROLLUP ( expr [, ...] ) |
CUBE ( expr [, ...] )
```

## Parameters
<a name="r_GROUP_BY_clause-parameters"></a>

 *expression*  
La liste des colonnes ou des expressions doit correspondre à la liste des expressions non agrégées de la liste de sélection de la requête. Par exemple, imaginons la requête simple suivante.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by listid, eventid
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```
Dans cette requête, la liste de sélection se compose de deux expressions d’agrégation. La première utilise la fonction SUM et la seconde la fonction COUNT. Les deux autres colonnes, LISTID et EVENTID, doivent être déclarées en tant que colonnes de regroupement.  
Les expressions de la clause GROUP BY peuvent également faire référence à la liste de sélection en utilisant des nombres ordinaux. Par exemple, l’exemple précédent peut être abrégé comme suit.  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by 1,2
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```

ALL  
ALL indique de regrouper toutes les colonnes spécifiées dans la liste SELECT, à l’exception de celles qui sont agrégées. Par exemple, considérez la requête suivante qui regroupe `col1` et `col2` sans avoir à les spécifier individuellement dans la clause GROUP BY. La colonne `col3` est l’argument de la fonction `SUM` et n’est donc pas groupée.  

```
SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
```
Si vous EXCLUEZ une colonne de la liste SELECT, la clause GROUP BY ALL ne regroupe pas les résultats en fonction de cette colonne spécifique.  

```
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
```

 * *aggregation\$1extension* *   
Vous pouvez utiliser les extensions d’agrégation GROUPING SETS, ROLLUP et CUBE pour effectuer plusieurs opérations GROUP BY dans une seule instruction. Pour plus d’informations sur les extensions d’agrégation et les fonctions associées, consultez [Extensions de regroupement](r_GROUP_BY_aggregation-extensions.md). 

## Exemples
<a name="r_GROUP_BY_clause-examples"></a>

Les exemples suivants utilisent la table SALES qui contient des colonnes : salesid, listid, sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission et saletime. Pour plus d’informations sur la table SALES, consultez [Exemple de base de données](c_sampledb.md).

L’exemple suivant regroupe `salesid` et `listid` sans avoir à les spécifier individuellement dans la clause GROUP BY. La colonne `qtysold` est l’argument de la fonction `SUM` et n’est donc pas groupée.

```
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;

salesid | listid  | sum
--------+---------+------
33095   | 36572   | 2	
88268   | 100813  | 4	
110917  | 127048  | 1	
...
```

L’exemple de requête suivant exclut plusieurs colonnes de la liste SELECT. GROUP BY ALL ne regroupe donc que salesid et listid.

```
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime 
FROM sales GROUP BY ALL;

salesid | listid 
--------+---------
33095   | 36572   	
88268   | 100813 	
110917  | 127048 	
...
```

# Extensions de regroupement
<a name="r_GROUP_BY_aggregation-extensions"></a>

Amazon Redshift prend en charge les extensions d’agrégation permettant d’effectuer plusieurs opérations GROUP BY dans une seule instruction.

 Les exemples d’extensions d’agrégation utilisent la table `orders`, qui contient les données de vente d’une entreprise d’électronique. Pour créer des `orders`, procédez comme suit.

```
CREATE TABLE ORDERS (
    ID INT,
    PRODUCT CHAR(20),
    CATEGORY CHAR(20),
    PRE_OWNED CHAR(1),
    COST DECIMAL
);

INSERT INTO ORDERS VALUES
    (0, 'laptop',       'computers',    'T', 1000),
    (1, 'smartphone',   'cellphones',   'T', 800),
    (2, 'smartphone',   'cellphones',   'T', 810),
    (3, 'laptop',       'computers',    'F', 1050),
    (4, 'mouse',        'computers',    'F', 50);
```

## *GROUPING SETS*
<a name="r_GROUP_BY_aggregation-extensions-grouping-sets"></a>

 Calcule un ou plusieurs jeux de regroupement dans une seule instruction. Un jeu de regroupement est l’ensemble d’une clause GROUP BY unique, un jeu de 0 colonne ou plus avec lequel vous pouvez regrouper le jeu de résultats d’une requête. GROUP BY GROUPING SETS revient à exécuter une requête UNION ALL sur un jeu de résultats groupé par différentes colonnes. Par exemple, GROUP BY GROUPING SETS((a), (b)) est équivalent à GROUP BY a UNION ALL GROUP BY b. 

 L’exemple suivant renvoie le coût des produits de la table des commandes, regroupés par catégories de produits et type de produits vendus. 

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(category, product);

       category       |       product        | total
----------------------+----------------------+-------
 computers            |                      |  2100
 cellphones           |                      |  1610
                      | laptop               |  2050
                      | smartphone           |  1610
                      | mouse                |    50

(5 rows)
```

## *ROLLUP*
<a name="r_GROUP_BY_aggregation-extensions-rollup"></a>

 Suppose une hiérarchie dans laquelle les colonnes précédentes sont considérées comme les parents des colonnes suivantes. ROLLUP regroupe les données par colonnes fournies et renvoie des lignes de sous-totaux supplémentaires représentant les totaux à tous les niveaux de colonnes de regroupement, en plus des lignes groupées. Par exemple, vous pouvez utiliser GROUP BY ROLLUP((a), (b)) pour renvoyer un jeu de résultats regroupé d’abord par a, puis par b en supposant que b est une sous-section de a. ROLLUP renvoie également une ligne contenant le jeu des résultats sans regrouper les colonnes. 

GROUP BY ROLLUP((a), (b)) équivaut à GROUP BY GROUPING SETS((a,b), (a), ()). 

L’exemple suivant renvoie le coût des produits de la table des commandes, regroupés d’abord par catégorie, puis par produit, le produit étant une subdivision de la catégorie.

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY ROLLUP(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      |                      |  3710
(6 rows)
```

## *CUBE*
<a name="r_GROUP_BY_aggregation-extensions-cube"></a>

 Regroupe les données par colonnes fournies et renvoie des lignes de sous-totaux supplémentaires représentant les totaux à tous les niveaux de colonnes de regroupement, en plus des lignes groupées. CUBE renvoie les mêmes lignes que ROLLUP, mais ajoute des lignes de sous-total supplémentaires pour chaque combinaison de colonnes de regroupement non couverte par ROLLUP. Par exemple, vous pouvez utiliserGROUP BY CUBE ((a), (b)) pour renvoyer un jeu de résultats regroupé d’abord par a, puis par b en supposant que b est une sous-section de a, puis par b uniquement. CUBE renvoie également une ligne contenant le jeu des résultats sans regrouper les colonnes.

GROUP BY CUBE((a), (b)) équivaut à GROUP BY GROUPING SETS((a, b), (a), (b), ()). 

L’exemple suivant renvoie le coût des produits de la table des commandes, regroupés d’abord par catégorie, puis par produit, le produit étant une subdivision de la catégorie. Contrairement à l’exemple précédent pour ROLLUP, l’instruction renvoie des résultats pour chaque combinaison de colonnes de regroupement. 

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      | laptop               |  2050
                      | mouse                |    50
                      | smartphone           |  1610
                      |                      |  3710
(9 rows)
```

## *Fonctions GROUPING/GROUPING\$1ID*
<a name="r_GROUP_BY_aggregation-extentions-grouping"></a>

 ROLLUP et CUBE ajoutent des valeurs NULL au jeu de résultats pour indiquer le sous-total des lignes. Par exemple, GROUP BY ROLLUP((a), (b)) renvoie une ou plusieurs lignes dont la valeur est NULL dans la colonne de regroupement b pour indiquer qu’il s’agit de sous-totaux des champs de la colonne de regroupement a. Ces valeurs NULL ne servent qu’à satisfaire le format des tuples renvoyés.

 Lorsque vous exécutez des opérations GROUP BY avec ROLLUP et CUBE sur des relations qui stockent elles-mêmes des valeurs NULL, cela peut produire des jeux de résultats dont les lignes semblent avoir des colonnes de regroupement identiques. Pour revenir à l’exemple précédent, si la colonne de regroupement b contient une valeur NULL stockée, GROUP BY ROLLUP((a), (b)) renvoie une ligne avec une valeur NULL dans la colonne de regroupement b qui n’est pas un sous-total. 

 Pour faire la distinction entre les valeurs NULL créées par ROLLUP et CUBE et les valeurs NULL stockées dans les tables elles-mêmes, vous pouvez utiliser la fonction GROUPING ou son alias GROUPING\$1ID. GROUPING prend un seul jeu de regroupement comme argument et, pour chaque ligne du jeu de résultats, renvoie une valeur de 0 ou 1 bit correspondant à la colonne de regroupement dans cette position, puis convertit cette valeur en nombre entier. Si la valeur de cette position est une valeur NULL créée par une extension d’agrégation, GROUPING renvoie 1. Elle renvoie 0 pour toutes les autres valeurs, y compris les valeurs NULL stockées.

 Par exemple, GROUPING(category, product) peut renvoyer les valeurs suivantes pour une ligne donnée, en fonction des valeurs des colonnes de regroupement pour cette ligne. Pour les besoins de cet exemple, toutes les valeurs NULL de la table sont des valeurs NULL créées par une extension d’agrégation.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_GROUP_BY_aggregation-extensions.html)

Les fonctions GROUPING apparaissent dans la partie liste SELECT de la requête au format suivant.

```
SELECT ... [GROUPING( expr )...] ...
  GROUP BY ... {CUBE | ROLLUP| GROUPING SETS} ( expr ) ...
```

L’exemple suivant est identique à l’exemple précédent pour CUBE, mais avec l’ajout de fonctions GROUPING pour ses jeux de regroupement.

```
SELECT category, product,
       GROUPING(category) as grouping0,
       GROUPING(product) as grouping1,
       GROUPING(category, product) as grouping2,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 3,1,2;

       category       |       product        | grouping0 | grouping1 | grouping2 | total
----------------------+----------------------+-----------+-----------+-----------+-------
 cellphones           | smartphone           |         0 |         0 |         0 |  1610
 cellphones           |                      |         0 |         1 |         1 |  1610
 computers            | laptop               |         0 |         0 |         0 |  2050
 computers            | mouse                |         0 |         0 |         0 |    50
 computers            |                      |         0 |         1 |         1 |  2100
                      | laptop               |         1 |         0 |         2 |  2050
                      | mouse                |         1 |         0 |         2 |    50
                      | smartphone           |         1 |         0 |         2 |  1610
                      |                      |         1 |         1 |         3 |  3710
(9 rows)
```

## *ROLLUP et CUBE partiels*
<a name="r_GROUP_BY_aggregation-extentions-partial"></a>

 Vous pouvez exécuter les opérations ROLLUP et CUBE avec une partie seulement des sous-totaux. 

 La syntaxe des opérations ROLLUP et CUBE partielles est la suivante.

```
GROUP BY expr1, { ROLLUP | CUBE }(expr2, [, ...])
```

Ici, la clause GROUP BY crée uniquement des lignes de sous-total au niveau de *expr2* et au-delà.

Les exemples suivants illustrent des opérations ROLLUP et CUBE partielles sur la table des commandes, en les regroupant d’abord par produit d’occasion ou non, puis en exécutant ROLLUP et CUBE dans les colonnes de catégorie et de produit.

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, ROLLUP(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(9 rows)

SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, CUBE(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(13 rows)
```

Comme la colonne d’occasion n’est pas incluse dans les opérations ROLLUP et CUBE, aucune ligne du total général n’inclut toutes les autres lignes. 

## *Concatenated grouping*
<a name="r_GROUP_BY_aggregation-extentions-concat"></a>

 Vous pouvez concaténer plusieurs SETS/ROLLUP/CUBE clauses GROUPING pour calculer différents niveaux de sous-totaux. Les regroupements concaténés renvoient le produit cartésien des jeux de regroupement fournis. 

 La syntaxe pour concaténer les SETS/ROLLUP/CUBE clauses GROUPING est la suivante.

```
GROUP BY {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...]),
         {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...])[, ...]
```

Examinez l’exemple suivant pour voir comment un petit regroupement concaténé peut produire un jeu de résultats final volumineux.

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product), GROUPING SETS(pre_owned, ())
ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
           | cellphones           | smartphone           |        1 |  1610
           | computers            | laptop               |        1 |  2050
           | computers            | mouse                |        1 |    50
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
           | cellphones           |                      |        3 |  1610
           | computers            |                      |        3 |  2100
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
           |                      | laptop               |        5 |  2050
           |                      | mouse                |        5 |    50
           |                      | smartphone           |        5 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
           |                      |                      |        7 |  3710
(22 rows)
```

## *Nested grouping*
<a name="r_GROUP_BY_aggregation-extentions-nested"></a>

 Vous pouvez utiliser les SETS/ROLLUP/CUBE opérations de regroupement en tant qu'*expr* de vos ENSEMBLES DE GROUPEMENT pour former un regroupement imbriqué. Le sous-regroupement au sein des GROUPING SETS imbriqués est aplati. 

 La syntaxe pour les regroupements imbriqués est la suivante.

```
GROUP BY GROUPING SETS({ROLLUP|CUBE|GROUPING SETS}(expr[, ...])[, ...])
```

Prenez l’exemple de code suivant.

```
SELECT category, product, pre_owned,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(ROLLUP(category), CUBE(product, pre_owned))
ORDER BY 4,1,2,3;

       category       |       product        | pre_owned | group_id | total
----------------------+----------------------+-----------+----------+-------
 cellphones           |                      |           |        3 |  1610
 computers            |                      |           |        3 |  2100
                      | laptop               | F         |        4 |  1050
                      | laptop               | T         |        4 |  1000
                      | mouse                | F         |        4 |    50
                      | smartphone           | T         |        4 |  1610
                      | laptop               |           |        5 |  2050
                      | mouse                |           |        5 |    50
                      | smartphone           |           |        5 |  1610
                      |                      | F         |        6 |  1100
                      |                      | T         |        6 |  2610
                      |                      |           |        7 |  3710
                      |                      |           |        7 |  3710
(13 rows)
```

Notez que, comme ROLLUP(category) et CUBE(product, pre\$1owned) contiennent tous deux le jeu de regroupement (), la ligne représentant le total général est dupliquée.

## *Notes d’utilisation*
<a name="r_GROUP_BY_aggregation-extensions-usage-notes"></a>
+ La clause GROUP BY prend en charge jusqu’à 64 jeux de regroupement. Dans le cas de ROLLUP et CUBE, ou d’une combinaison de GROUPING SETS, ROLLUP et CUBE, cette limitation s’applique au nombre implicite de jeux de regroupement. Par exemple, GROUP BY CUBE((a), (b)) compte comme 4 jeux de regroupement, et non 2.
+ Vous ne pouvez pas utiliser de constantes pour regrouper des colonnes lorsque vous utilisez des extensions d’agrégation.
+ Vous ne pouvez pas créer un ensemble de regroupement qui contient des colonnes en double.

# Clause HAVING
<a name="r_HAVING_clause"></a>

La clause HAVING applique une condition à l’ensemble des résultats groupés intermédiaires que renvoie une requête.

## Syntaxe
<a name="r_HAVING_clause-synopsis"></a>

```
[ HAVING condition ]
```

Par exemple, vous pouvez limiter les résultats d’une fonction SUM :

```
having sum(pricepaid) >10000
```

La condition HAVING est appliquée après que toutes les conditions de la clause WHERE ont été appliquées et que les opérations GROUP BY sont terminées.

La condition elle-même prend la même forme que celle de toute condition de clause WHERE.

## Notes d’utilisation
<a name="r_HAVING_clause_usage_notes"></a>
+ Toutes les colonnes référencées dans une condition de clause HAVING doivent être une colonne de regroupement ou une colonne qui fait référence au résultat d’une fonction d’agrégation.
+ Dans une clause HAVING, vous ne pouvez pas spécifier :
  + Un nombre ordinal qui fait référence à un élément de la liste de sélection. Seules les clauses GROUP BY et ORDER BY acceptent des nombres ordinaux.

## Exemples
<a name="r_HAVING_clause-examples"></a>

La requête suivante calcule la vente totale de billets pour tous les événements selon leur nom, puis supprime les événements où le total des ventes est inférieur à 800 000 \$1 US. La condition HAVING est appliquée aux résultats de la fonction d’agrégation de la liste de sélection : `sum(pricepaid)`.

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(pricepaid) > 800000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

La requête suivante calcule un ensemble de résultats similaire. Dans ce cas, toutefois, la condition HAVING est appliquée à un regroupement qui n’est pas spécifié dans la liste de sélection : `sum(qtysold)`. Les événements qui n’ont pas vendu plus de 2 000 billets disparaissent du résultat final.

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(qtysold) >2000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
Chicago          |  790993.00
Spamalot         |  714307.00
```

La requête suivante calcule la vente totale de billets pour tous les événements selon leur nom, puis supprime les événements où le total des ventes est inférieur à 800 000 \$1 US. La condition HAVING est appliquée aux résultats de la fonction d’agrégation de la liste de sélection à l’aide de l’alias `pp` pour `sum(pricepaid)`.

```
select eventname, sum(pricepaid) as pp
from sales join event on sales.eventid = event.eventid
group by 1
having pp > 800000
order by 2 desc, 1;

eventname        |    pp
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

# Clause QUALIFY
<a name="r_QUALIFY_clause"></a>

La clause QUALIFY filtre les résultats d’une fonction de fenêtre précédemment calculée en fonction des conditions de recherche définies par l’utilisateur. Vous pouvez utiliser la clause pour appliquer des conditions de filtrage au résultat d’une fonction de fenêtre sans utiliser de sous-requête.

Elle est similaire à la [clause HAVING](https://docs.aws.amazon.com/redshift/latest/dg/r_HAVING_clause.html), qui applique une condition à d’autres lignes de filtre à partir d’une clause WHERE. La différence entre QUALIFY et HAVING réside dans le fait que les résultats filtrés de la clause QUALIFY peuvent être basés sur le résultat de l’exécution de fonctions de fenêtre sur les données. Vous pouvez utiliser à la fois les clauses QUALIFY et HAVING dans une même requête.

## Syntaxe
<a name="r_QUALIFY-synopsis"></a>

```
QUALIFY condition
```

**Note**  
Si vous utilisez la clause QUALIFY directement après la clause FROM, le nom de la relation FROM doit comporter un alias spécifié avant la clause QUALIFY.

## Exemples
<a name="r_QUALIFY-examples"></a>

Les exemples de cette section utilisent les exemples de données ci-dessous.

```
create table store_sales (ss_sold_date date, ss_sold_time time, 
               ss_item text, ss_sales_price float);
insert into store_sales values ('2022-01-01', '09:00:00', 'Product 1', 100.0),
                               ('2022-01-01', '11:00:00', 'Product 2', 500.0),
                               ('2022-01-01', '15:00:00', 'Product 3', 20.0),
                               ('2022-01-01', '17:00:00', 'Product 4', 1000.0),
                               ('2022-01-01', '18:00:00', 'Product 5', 30.0),
                               ('2022-01-02', '10:00:00', 'Product 6', 5000.0),
                               ('2022-01-02', '16:00:00', 'Product 7', 5.0);
```

L’exemple suivant montre comment trouver les deux articles les plus chers vendus après midi chaque jour.

```
SELECT *
FROM store_sales ss
WHERE ss_sold_time > time '12:00:00'
QUALIFY row_number()
OVER (PARTITION BY ss_sold_date ORDER BY ss_sales_price DESC) <= 2
               

 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 17:00:00     | Product 4 |           1000
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

Vous pouvez ensuite retrouver le dernier article vendu chaque jour.

```
SELECT *
FROM store_sales ss
QUALIFY last_value(ss_item)
OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
      ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) = ss_item;
               
ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

L’exemple suivant renvoie les mêmes enregistrements que pour la requête précédente, le dernier article vendu chaque jour, mais n’utilise pas la clause QUALIFY.

```
SELECT * FROM (
  SELECT *,
  last_value(ss_item)
  OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ss_last_item
  FROM store_sales ss
)
WHERE ss_last_item = ss_item;
               
 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price | ss_last_item 
--------------+--------------+-----------+----------------+--------------
 2022-01-02   | 16:00:00     | Product 7 |              5 | Product 7
 2022-01-01   | 18:00:00     | Product 5 |             30 | Product 5
```

# UNION, INTERSECT et EXCEPT
<a name="r_UNION"></a>

**Topics**
+ [Syntaxe](#r_UNION-synopsis)
+ [Parameters](#r_UNION-parameters)
+ [Ordre d’évaluation des opérateurs ensemblistes](#r_UNION-order-of-evaluation-for-set-operators)
+ [Notes d’utilisation](#r_UNION-usage-notes)
+ [Exemple de requêtes UNION](c_example_union_query.md)
+ [Exemple de requête UNION ALL](c_example_unionall_query.md)
+ [Exemple de requêtes INTERSECT](c_example_intersect_query.md)
+ [Exemple de requête EXCEPT](c_Example_MINUS_query.md)

Les *opérateurs ensemblistes* UNION, INTERSECT et EXCEPT sont utilisés pour comparer et fusionner les résultats de deux expressions de requête distinctes. Par exemple, si vous voulez savoir quels utilisateurs d’un site web sont à la fois acheteurs et vendeurs, mais que leurs noms d’utilisateur sont stockés dans des colonnes ou tables distinctes, vous pouvez trouver l’*intersection* de ces deux types d’utilisateurs. Si vous voulez savoir quels utilisateurs du site web sont acheteurs mais pas vendeurs, vous pouvez utiliser l’opérateur EXCEPT pour trouver la *différence* entre les deux listes d’utilisateurs. Si vous souhaitez créer une liste de tous les utilisateurs, quel que soit le rôle, vous pouvez utiliser l’opérateur UNION.

## Syntaxe
<a name="r_UNION-synopsis"></a>

```
query
{ UNION [ ALL ] | INTERSECT | EXCEPT | MINUS }
query
```

## Parameters
<a name="r_UNION-parameters"></a>

 *query*   
Expression de requête qui correspond, sous la forme de sa liste de sélection, à une deuxième expression de requête qui suit l’opérateur UNION, INTERSECT ou EXCEPT. Les deux expressions doivent comporter le même nombre de colonnes de sortie avec des types de données compatibles ; sinon, les deux jeux de résultats ne peuvent pas être comparés et fusionnés. Les opérations définies n’autorisent pas la conversion implicite entre différentes catégories de types de données ; pour plus d’informations, consultez [Compatibilité et conversion de types](c_Supported_data_types.md#r_Type_conversion).  
Vous pouvez créer des requêtes qui contiennent un nombre illimité d’expressions de requête et les lier avec les opérateurs UNION, INTERSECT et EXCEPT dans n’importe quelle combinaison. Par exemple, la structure de requête suivante est valide, en supposant que les tables T1, T2 et T3 contiennent des ensembles de colonnes compatibles :   

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

UNION   
Opération de définition qui renvoie les lignes de deux expressions de requête, indépendamment de savoir si les lignes proviennent de l’une ou des deux expressions.

INTERSECT   
Opération de définition qui renvoie les lignes provenant de deux expressions de requête. Les lignes qui ne sont pas retournées par les deux expressions sont ignorées.

EXCEPT \$1 MINUS   
Opération de définition qui renvoie les lignes qui dérivent de l’une de deux expressions de requête. Pour être éligible pour le résultat, lignes doivent exister dans la première table de résultats, pas dans la deuxième. MINUS et EXCEPT sont des synonymes exacts. 

ALL   
Le mot-clé ALL conserve toutes les lignes en double produites par UNION. Le comportement par défaut lorsque le mot-clé ALL n’est pas utilisé consiste à ignorer ces doublons. INTERSECT ALL, EXCEPT ALL et MINUS ALL ne sont pas pris en charge.

## Ordre d’évaluation des opérateurs ensemblistes
<a name="r_UNION-order-of-evaluation-for-set-operators"></a>

Les opérateurs ensemblistes UNION et EXCEPT sont associatifs à gauche. Si les parenthèses ne sont pas spécifiées pour influer sur l’ordre de priorité, une combinaison de ces opérateurs ensemblistes est évaluée de gauche à droite. Par exemple, dans la requête suivante, l’UNION de T1 et de T2 est évaluée en premier, puis l’opération EXCEPT est effectuée sur le résultat UNION : 

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

L’opérateur INTERSECT est prioritaire sur les opérateurs UNION et EXCEPT quand une combinaison d’opérateurs est utilisée dans la même requête. Par exemple, la requête suivante permet d’évaluer l’intersection de T2 et de T3, puis d’unir le résultat à T1 : 

```
select * from t1
union
select * from t2
intersect
select * from t3
order by c1;
```

Par l’ajout de parenthèses, vous pouvez appliquer un ordre d’évaluation différent. Dans le cas suivant, le résultat de l’union de T1 et de T2 est croisé avec T3, et la requête est susceptible de produire un résultat différent. 

```
(select * from t1
union
select * from t2)
intersect
(select * from t3)
order by c1;
```

## Notes d’utilisation
<a name="r_UNION-usage-notes"></a>
+ Les noms de colonne retournés dans le résultat d’une opération ensembliste sont les noms de colonne (ou alias) des tables de la première expression de requête. Comme ces noms de colonne sont potentiellement trompeurs, en ce sens que les valeurs de la colonne proviennent de tables de l’un ou de l’autre côté de l’opérateur ensembliste, il se peut que vous vouliez fournir des alias descriptifs pour le jeu de résultats.
+ Une expression de requête qui précède un opérateur ensembliste ne doit pas contenir une clause ORDER BY. Une clause ORDER BY ne produit des résultats triés significatifs que lorsqu’elle est utilisée à la fin d’une requête contenant des opérateurs ensemblistes. Dans ce cas, la clause ORDER BY s’applique aux résultats finaux de toutes les opérations ensemblistes. La requête la plus externe peut également contenir des clauses LIMIT et OFFSET standard. 
+ Lorsque les requêtes avec opérateurs ensemblistes renvoient des résultats décimaux, les colonnes de résultats correspondantes sont promues pour renvoyer les mêmes précision et échelle. Par exemple, dans la requête suivante, où T1.REVENUE est une colonne DECIMAL(10,2) et T2.REVENUE une colonne DECIMAL(8,4), le résultat décimal est promu en DECIMAL(12,4) : 

  ```
  select t1.revenue union select t2.revenue;
  ```

  L’échelle est `4`, parce que c’est l’échelle maximale des deux colonnes. La précision est `12` parce que T1.REVENUE nécessite 8 chiffres à gauche de la virgule (12-4 = 8). Cette promotion de type garantit que toutes les valeurs de chaque côté de l’UNION conviennent au résultat. Pour les valeurs 64 bits, la précision de résultat maximale est de 19 et l’échelle de résultat maximale de 18. Pour les valeurs 128 bits, la précision de résultat maximale est de 38 et l’échelle de résultat maximale de 37.

  Si le type de données qui en résulte dépasse les limites Amazon Redshift de précision et d’échelle, la requête renvoie une erreur.
+ Pour les opérations ensemblistes, deux lignes sont traitées comme identiques si, pour chaque paire correspondante de colonnes, les deux valeurs de données sont *égales* ou *toutes deux NULL*. Par exemple, si les tables T1 et T2 contiennent une colonne et une ligne, et que la ligne a la valeur NULL dans les deux tables, une opération INTERSECT sur ces tables renvoie cette ligne.

# Exemple de requêtes UNION
<a name="c_example_union_query"></a>

Dans la requête UNION suivante, les lignes de la table SALES sont fusionnées avec les lignes de la table LISTING. Trois colonnes compatibles sont sélectionnées à partir de chaque table ; dans ce cas, les colonnes correspondantes ont les mêmes noms et types de données. 

L’ensemble de résultats final est classé sur la première colonne de la table LISTING et limité aux 5 lignes avec la valeur LISTID la plus élevée. 

```
select listid, sellerid, eventid from listing
union select listid, sellerid, eventid from sales
order by listid, sellerid, eventid desc limit 5;

listid | sellerid | eventid
--------+----------+---------
1 |    36861 |    7872
2 |    16002 |    4806
3 |    21461 |    4256
4 |     8117 |    4337
5 |     1616 |    8647
(5 rows)
```

L’exemple suivant montre comment vous pouvez ajouter une valeur littérale à la sortie d’une requête UNION afin que vous puissiez voir quelle expression de requête a généré chaque ligne du jeu de résultats. La requête identifie les lignes de la première expression de requête comme « B » (pour « buyers ») et les lignes de la deuxième expression de requête comme « S » (pour « sellers »). 

La requête identifie les acheteurs et les vendeurs pour les transactions de billet égales ou supérieures à 10 000 \$1 US. La seule différence entre les deux expressions de requête de chaque côté de l’opérateur d’UNION est la colonne de jointure de la table SALES. 

```
select listid, lastname, firstname, username,
pricepaid as price, 'S' as buyorsell
from sales, users
where sales.sellerid=users.userid
and pricepaid >=10000
union
select listid, lastname, firstname, username, pricepaid,
'B' as buyorsell
from sales, users
where sales.buyerid=users.userid
and pricepaid >=10000
order by 1, 2, 3, 4, 5;

listid | lastname | firstname | username |   price   | buyorsell
--------+----------+-----------+----------+-----------+-----------
209658 | Lamb     | Colette   | VOR15LYI |  10000.00 | B
209658 | West     | Kato      | ELU81XAA |  10000.00 | S
212395 | Greer    | Harlan    | GXO71KOC |  12624.00 | S
212395 | Perry    | Cora      | YWR73YNZ |  12624.00 | B
215156 | Banks    | Patrick   | ZNQ69CLT |  10000.00 | S
215156 | Hayden   | Malachi   | BBG56AKU |  10000.00 | B
(6 rows)
```

L’exemple suivant utilise un opérateur UNION ALL, car les lignes dupliquées, s’il en existe, doivent être conservées dans le résultat. Pour une série d'événements spécifique IDs, la requête renvoie 0 ligne ou plus pour chaque vente associée à chaque événement, et 0 ou 1 ligne pour chaque annonce de cet événement. IDs Les événements sont propres à chaque ligne des tableaux LISTING et EVENT, mais il peut y avoir plusieurs ventes pour la même combinaison d'événement et d'annonce IDs dans le tableau SALES. 

La troisième colonne du jeu de résultats identifie la source de la ligne. Si la source est la table SALES, un « Yes » apparaît dans la colonne SALESROW. (SALESROW est un alias de SALES. LISTID.) Si la ligne vient de la table LISTING, un « No » apparaît dans la colonne SALESROW. 

Dans ce cas, le jeu de résultats se compose de trois lignes de vente pour affichage 500, événement 7787. En d’autres termes, trois transactions différentes ont eu lieu pour cette combinaison d’affichage et d’événement. Les deux autres listes, 501 et 502, n'ont généré aucune vente. La seule ligne produite par la requête pour ces listes IDs provient donc de la table LISTING (SALESROW = « Non »). 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

Si vous exécutez la même requête sans le mot-clé ALL, le résultat ne conserve qu’une seule des transactions de vente. 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# Exemple de requête UNION ALL
<a name="c_example_unionall_query"></a>

L’exemple suivant utilise un opérateur UNION ALL, car les lignes dupliquées, s’il en existe, doivent être conservées dans le résultat. Pour une série d'événements spécifique IDs, la requête renvoie 0 ligne ou plus pour chaque vente associée à chaque événement, et 0 ou 1 ligne pour chaque annonce de cet événement. IDs Les événements sont propres à chaque ligne des tableaux LISTING et EVENT, mais il peut y avoir plusieurs ventes pour la même combinaison d'événement et d'annonce IDs dans le tableau SALES.

La troisième colonne du jeu de résultats identifie la source de la ligne. Si la source est la table SALES, un « Yes » apparaît dans la colonne SALESROW. (SALESROW est un alias de SALES. LISTID.) Si la ligne vient de la table LISTING, un « No » apparaît dans la colonne SALESROW.

Dans ce cas, le jeu de résultats se compose de trois lignes de vente pour affichage 500, événement 7787. En d’autres termes, trois transactions différentes ont eu lieu pour cette combinaison d’affichage et d’événement. Les deux autres listes, 501 et 502, n'ont généré aucune vente. La seule ligne produite par la requête pour ces listes IDs provient donc de la table LISTING (SALESROW = « Non »).

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

Si vous exécutez la même requête sans le mot-clé ALL, le résultat ne conserve qu’une seule des transactions de vente. 

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# Exemple de requêtes INTERSECT
<a name="c_example_intersect_query"></a>

Comparez l’exemple suivant avec le premier exemple UNION. La seule différence entre les deux exemples est l’opérateur ensembliste qui est utilisé, mais les résultats sont très différents. Seule une des lignes est la même : 

```
235494 |    23875 |    8771
```

 Il s’agit de la seule ligne du résultat limité de 5 lignes qui a été trouvé dans les deux tables.

```
select listid, sellerid, eventid from listing
intersect
select listid, sellerid, eventid from sales
order by listid desc, sellerid, eventid
limit 5;

listid | sellerid | eventid
--------+----------+---------
235494 |    23875 |    8771
235482 |     1067 |    2667
235479 |     1589 |    7303
235476 |    15550 |     793
235475 |    22306 |    7848
(5 rows)
```

La requête suivante détecte les événements (pour lesquels des billets ont été vendus) qui se sont déroulées dans des lieux de New York et de Los Angeles en mars. La différence entre les deux expressions de requête est la contrainte sur la colonne VENUECITY.

```
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='Los Angeles'
intersect
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='New York City'
order by eventname asc;

eventname
----------------------------
A Streetcar Named Desire
Dirty Dancing
Electra
Running with Annalise
Hairspray
Mary Poppins
November
Oliver!
Return To Forever
Rhinoceros
South Pacific
The 39 Steps
The Bacchae
The Caucasian Chalk Circle
The Country Girl
Wicked
Woyzeck
(16 rows)
```

# Exemple de requête EXCEPT
<a name="c_Example_MINUS_query"></a>

La table CATEGORY de la base de données TICKIT contient les 11 lignes suivantes : 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
   1   | Sports   | MLB       | Major League Baseball
   2   | Sports   | NHL       | National Hockey League
   3   | Sports   | NFL       | National Football League
   4   | Sports   | NBA       | National Basketball Association
   5   | Sports   | MLS       | Major League Soccer
   6   | Shows    | Musicals  | Musical theatre
   7   | Shows    | Plays     | All non-musical theatre
   8   | Shows    | Opera     | All opera and light opera
   9   | Concerts | Pop       | All rock and pop music concerts
  10   | Concerts | Jazz      | All jazz singers and bands
  11   | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

Supposons qu’une table CATEGORY\$1STAGE (table intermédiaire) contienne une seule ligne supplémentaire : 

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
1 | Sports   | MLB       | Major League Baseball
2 | Sports   | NHL       | National Hockey League
3 | Sports   | NFL       | National Football League
4 | Sports   | NBA       | National Basketball Association
5 | Sports   | MLS       | Major League Soccer
6 | Shows    | Musicals  | Musical theatre
7 | Shows    | Plays     | All non-musical theatre
8 | Shows    | Opera     | All opera and light opera
9 | Concerts | Pop       | All rock and pop music concerts
10 | Concerts | Jazz      | All jazz singers and bands
11 | Concerts | Classical | All symphony, concerto, and choir concerts
12 | Concerts | Comedy    | All stand up comedy performances
(12 rows)
```

renvoiez la différence entre les deux tables. En d’autres termes, renvoiez les lignes qui sont dans la table CATEGORY\$1STAGE, mais pas dans la table CATEGORY : 

```
select * from category_stage
except
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

La requête équivalente suivante utilise le synonyme MINUS. 

```
select * from category_stage
minus
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

Si vous inversez l’ordre des expressions SELECT, la requête ne renvoie aucune ligne. 

# Clause ORDER BY
<a name="r_ORDER_BY_clause"></a>

**Topics**
+ [Syntaxe](#r_ORDER_BY_clause-synopsis)
+ [Parameters](#r_ORDER_BY_clause-parameters)
+ [Notes d’utilisation](#r_ORDER_BY_usage_notes)
+ [Exemples avec ORDER BY](r_Examples_with_ORDER_BY.md)

La clause ORDER BY trie le jeu de résultats d’une requête.

## Syntaxe
<a name="r_ORDER_BY_clause-synopsis"></a>

```
[ ORDER BY expression [ ASC | DESC ] ]
[ NULLS FIRST | NULLS LAST ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
```

## Parameters
<a name="r_ORDER_BY_clause-parameters"></a>

 *expression*   
Expression qui définit l’ordre de tri du jeu de résultats de la requête, généralement en spécifiant une ou plusieurs colonnes de la liste de sélection. Les résultats sont retournés en fonction du classement UTF-8 binaire. Vous pouvez aussi spécifier les éléments suivants :  
+ Colonnes qui ne sont pas dans la liste de sélection
+ Expressions formées d’une ou de plusieurs colonnes qui existent dans les tables référencées par la requête
+ Nombres ordinaux qui représentent la position des entrées de la liste de sélection (ou position des colonnes de la table s’il n’existe aucune liste de sélection)
+ Alias qui définissent les entrées de la liste de sélection
Lorsque la clause ORDER BY contient plusieurs expressions régulières, le jeu de résultats est trié selon la première expression, puis la deuxième expression est appliquée aux lignes de la première expression ayant des valeurs correspondantes, et ainsi de suite.

ASC \$1 DESC   
Option qui définit l’ordre de tri de l’expression, comme suit :   
+ ASC : croissant (par exemple, de faible à élevé pour les valeurs numériques et de « A » à « Z » pour les chaînes de caractères). Si aucune option n’est spécifiée, les données sont triées dans l’ordre croissant par défaut. 
+ DESC : descendantes (valeurs d’élevées à faibles pour les valeurs numériques ; de « Z » à « A » pour les chaînes). 

NULLS FIRST \$1 NULLS LAST  
Option qui spécifie si les valeurs NULL doivent être triées en premier, avant les valeurs non null, ou en dernier, après les valeurs non null. Par défaut, les valeurs NULL sont triées et classées en dernier par ordre croissant (ASC) et triées et classées en premier par ordre décroissant (DESC).

LIMIT *nombre* \$1 ALL   <a name="order-by-clause-limit"></a>
Option qui contrôle le nombre de lignes triées renvoyées par la requête. Le nombre LIMIT doit être un nombre entier positif ; la valeur maximale est `2147483647`.   
LIMIT 0 ne renvoie aucune ligne. Vous pouvez utiliser cette syntaxe à des fins de test, pour vérifier qu’une requête s’exécute (sans afficher aucune ligne) ou pour renvoyer une liste de colonnes d’une table. Une clause ORDER BY est redondante si vous utilisez LIMIT 0 pour renvoyer une liste de colonnes. La valeur par défaut est LIMIT ALL. 

OFFSET *début*   <a name="order-by-clause-offset"></a>
Option qui spécifie d’ignorer le nombre de lignes qui précèdent *début* avant de commencer à renvoyer les lignes. Le nombre OFFSET doit être un nombre entier positif ; la valeur maximale est `2147483647`. Lorsqu’elles sont utilisées avec l’option LIMIT, les lignes OFFSET sont ignorées avant de commencer à compter les lignes LIMIT qui sont retournées. Si l’option LIMIT n’est pas utilisée, le nombre de lignes du jeu de résultats est diminué du nombre de lignes qui sont ignorées. Comme les lignes ignorées par une clause OFFSET continuent de devoir être analysées, il peut être inefficace de choisir une valeur OFFSET élevée.

## Notes d’utilisation
<a name="r_ORDER_BY_usage_notes"></a>

 Notez le comportement attendu suivant avec les clauses ORDER BY : 
+ Les valeurs NULL sont considérées comme « plus élevés » que toutes les autres valeurs. Avec l’ordre de tri croissant par défaut, les valeurs NULL sont triées à la fin. Pour modifier ce comportement, utilisez l’option NULLS FIRST.
+ Lorsqu’une requête ne contient pas une clause ORDER BY, le système renvoie des jeux de résultats sans classement prévisible des lignes. La même requête exécutée deux fois peut renvoyer le même jeu de résultats dans un ordre différent. 
+ Les options LIMIT et OFFSET peuvent être utilisées sans clause ORDER BY ; cependant, pour renvoyer un ensemble cohérent de lignes, utilisez ces options conjointement à ORDER BY. 
+ Dans tout système parallèle comme Amazon Redshift, quand ORDER BY ne produit pas un classement unique, l’ordre des lignes est non déterministe. Autrement dit, si l’expression ORDER BY produit des valeurs en double, l’ordre de retour de ces lignes peut varier d’un système à un autre ou d’une exécution d’Amazon Redshift à une autre. 
+ Amazon Redshift ne prend pas en charge les littéraux de chaîne dans les clauses ORDER BY.

# Exemples avec ORDER BY
<a name="r_Examples_with_ORDER_BY"></a>

renvoiez les 11 lignes de la table CATEGORY, triées sur la deuxième colonne, CATGROUP. Pour les résultats qui ont la même valeur CATGROUP, classez les valeurs de colonne CATDESC en fonction de la longueur de la chaîne de caractères. Triez ensuite sur les colonnes CATID et CATNAME. 

```
select * from category order by 2, length(catdesc), 1, 3;

catid | catgroup |  catname  |                  catdesc
------+----------+-----------+----------------------------------------
10    | Concerts | Jazz      | All jazz singers and bands
9     | Concerts | Pop       | All rock and pop music concerts
11    | Concerts | Classical | All symphony, concerto, and choir conce
6     | Shows    | Musicals  | Musical theatre
7     | Shows    | Plays     | All non-musical theatre
8     | Shows    | Opera     | All opera and light opera
5     | Sports   | MLS       | Major League Soccer
1     | Sports   | MLB       | Major League Baseball
2     | Sports   | NHL       | National Hockey League
3     | Sports   | NFL       | National Football League
4     | Sports   | NBA       | National Basketball Association
(11 rows)
```

renvoiez les colonnes sélectionnées de la table SALES, triées selon les valeurs QTYSOLD les plus élevées. Limitez les résultats aux 10 lignes supérieures : 

```
select salesid, qtysold, pricepaid, commission, saletime from sales
order by qtysold, pricepaid, commission, salesid, saletime desc
limit 10;

salesid | qtysold | pricepaid | commission |      saletime
--------+---------+-----------+------------+---------------------
15401   |       8 |    272.00 |      40.80 | 2008-03-18 06:54:56
61683   |       8 |    296.00 |      44.40 | 2008-11-26 04:00:23
90528   |       8 |    328.00 |      49.20 | 2008-06-11 02:38:09
74549   |       8 |    336.00 |      50.40 | 2008-01-19 12:01:21
130232  |       8 |    352.00 |      52.80 | 2008-05-02 05:52:31
55243   |       8 |    384.00 |      57.60 | 2008-07-12 02:19:53
16004   |       8 |    440.00 |      66.00 | 2008-11-04 07:22:31
489     |       8 |    496.00 |      74.40 | 2008-08-03 05:48:55
4197    |       8 |    512.00 |      76.80 | 2008-03-23 11:35:33
16929   |       8 |    568.00 |      85.20 | 2008-12-19 02:59:33
(10 rows)
```

renvoiez une liste de colonnes et aucune ligne à l’aide de la syntaxe LIMIT 0 : 

```
select * from venue limit 0;
venueid | venuename | venuecity | venuestate | venueseats
---------+-----------+-----------+------------+------------
(0 rows)
```

# Clause CONNECT BY
<a name="r_CONNECT_BY_clause"></a>

La clause CONNECT BY spécifie la relation entre les lignes d’une hiérarchie. Vous pouvez utiliser CONNECT BY pour sélectionner des lignes dans un ordre hiérarchique en attachant la table à elle-même et en traitant les données hiérarchiques. Par exemple, vous pouvez l’utiliser pour parcourir de manière récursive un organigramme et répertorier des données.

Les requêtes hiérarchiques sont traitées dans l’ordre suivant :

1. Si la clause FROM comporte une jointure, elle est traitée en premier.

1. La clause CONNECT BY est évaluée.

1. La clause WHERE est évaluée.

## Syntaxe
<a name="r_CONNECT_BY_clause-synopsis"></a>

```
[START WITH start_with_conditions]
CONNECT BY connect_by_conditions
```

**Note**  
Bien que START et CONNECT ne soient pas des mots réservés, utilisez des identificateurs délimités (guillemets doubles) ou AS si vous utilisez START et CONNECT comme alias de table dans votre requête, afin d’éviter tout échec lors de l’exécution.

```
SELECT COUNT(*)
FROM Employee "start"
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

```
SELECT COUNT(*)
FROM Employee AS start
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

## Parameters
<a name="r_CONNECT_BY_parameters"></a>

 *start\$1with\$1conditions*   
Conditions qui spécifient la ou les lignes racines de la hiérarchie

 *connect\$1by\$1conditions*   
Conditions qui spécifient la relation entre les lignes parents et les lignes enfants de la hiérarchie. Au moins une condition doit être qualifiée à l’aide de l’opérateur unaire ` ` utilisé pour faire référence à la ligne parent.  

```
PRIOR column = expression
-- or
expression > PRIOR column
```

## Opérateurs
<a name="r_CONNECT_BY_operators"></a>

Vous pouvez utiliser les opérateurs suivants dans une requête CONNECT BY.

 *LEVEL*   
Pseudocolonne qui renvoie le niveau de ligne actuel dans la hiérarchie. Renvoie 1 pour la ligne racine, 2 pour l’enfant de la ligne racine, etc.

 *PRIOR*   
Opérateur unaire qui évalue l’expression pour la ligne parent de la ligne actuelle dans la hiérarchie.

## Exemples
<a name="r_CONNECT_BY_example"></a>

Voici un exemple de requête CONNECT BY qui renvoie le nombre d’employés qui relèvent directement ou indirectement de John, avec 4 niveaux maximum. 

```
SELECT id, name, manager_id
FROM employee
WHERE LEVEL < 4
START WITH name = 'John'
CONNECT BY PRIOR id = manager_id;
```

Voici le résultat de la requête.

```
id      name      manager_id
------+----------+--------------
  101     John        100
  102     Jorge       101
  103     Kwaku       101
  110     Liu         101
  201     Sofía       102
  106     Mateo       102
  110     Nikki       103
  104     Paulo       103
  105     Richard     103
  120     Saanvi      104
  200     Shirley     104
  205     Zhang       104
```

 Définition de table pour cet exemple : 

```
CREATE TABLE employee (
   id INT,
   name VARCHAR(20),
   manager_id INT
   );
```

 Voici les lignes insérées dans la table. 

```
INSERT INTO employee(id, name, manager_id)  VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
```

Voici un organigramme du service de John.

![\[Organigramme du service de John.\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/images/org-chart.png)


# Exemples de sous-requête
<a name="r_Subquery_examples"></a>

Les exemples suivants illustrent différentes façons par lesquelles les sous-requêtes conviennent aux requêtes SELECT. Pour obtenir un autre exemple de l’utilisation des sous-requêtes, consultez [Exemples de clause JOIN](r_Join_examples.md). 

## Sous-requête SELECT liste
<a name="r_Subquery_examples-select-list-subquery"></a>

L’exemple suivant contient une sous-requête dans la liste SELECT. Cette sous-requête est *scalaire* : elle renvoie une et une seule colonne et une seule valeur, ce qui est répété dans le résultat pour chaque ligne retournée à partir de la requête externe. La requête compare la valeur Q1SALES que la sous-requête calcule aux valeurs des ventes des deux autres trimestres (2 et 3) en 2008, comme défini par la requête externe. 

```
select qtr, sum(pricepaid) as qtrsales,
(select sum(pricepaid)
from sales join date on sales.dateid=date.dateid
where qtr='1' and year=2008) as q1sales
from sales join date on sales.dateid=date.dateid
where qtr in('2','3') and year=2008
group by qtr
order by qtr;

qtr  |  qtrsales   |   q1sales
-------+-------------+-------------
2     | 30560050.00 | 24742065.00
3     | 31170237.00 | 24742065.00
(2 rows)
```

## Sous-requête de clause WHERE
<a name="r_Subquery_examples-where-clause-subquery"></a>

L’exemple suivant contient une sous-requête de table dans la clause WHERE. Cette sous-requête produit plusieurs lignes. Dans ce cas, les lignes ne contiennent qu’une seule colonne, mais les sous-requêtes de table peuvent contenir plusieurs colonnes et lignes, tout comme n’importe quelle autre table. 

La requête recherche les 10 meilleurs vendeurs en termes de nombre maximal de billets vendus. La liste des 10 meilleurs est limitée par la sous-requête, qui supprime les utilisateurs qui résident dans les villes où il y a des lieux de vente. Cette requête peut être écrite de différentes façons ; par exemple, la sous-requête peut être réécrite comme jointure au sein de la requête principale. 

```
select firstname, lastname, city, max(qtysold) as maxsold
from users join sales on users.userid=sales.sellerid
where users.city not in(select venuecity from venue)
group by firstname, lastname, city
order by maxsold desc, city desc
limit 10;

firstname | lastname  |      city      | maxsold
-----------+-----------+----------------+---------
Noah       | Guerrero | Worcester      |       8
Isadora    | Moss     | Winooski       |       8
Kieran     | Harrison | Westminster    |       8
Heidi      | Davis    | Warwick        |       8
Sara       | Anthony  | Waco           |       8
Bree       | Buck     | Valdez         |       8
Evangeline | Sampson  | Trenton        |       8
Kendall    | Keith    | Stillwater     |       8
Bertha     | Bishop   | Stevens Point  |       8
Patricia   | Anderson | South Portland |       8
(10 rows)
```

## Sous-requêtes de clause WITH
<a name="r_Subquery_examples-with-clause-subqueries"></a>

Consultez [Clause WITH](r_WITH_clause.md). 

# Sous-requêtes corrélées
<a name="r_correlated_subqueries"></a>

L’exemple suivant contient une *sous-requête corrélée* dans la clause WHERE ; ce genre de sous-requête contient une ou plusieurs corrélations entre ses colonnes et les colonnes générés par la requête externe. Dans ce cas, la corrélation est `where s.listid=l.listid`. Pour chaque ligne que produit la requête externe, la sous-requête est exécutée pour qualifier ou disqualifier la ligne. 

```
select salesid, listid, sum(pricepaid) from sales s
where qtysold=
(select max(numtickets) from listing l
where s.listid=l.listid)
group by 1,2
order by 1,2
limit 5;

salesid | listid |   sum
--------+--------+----------
 27     |     28 | 111.00
 81     |    103 | 181.00
 142    |    149 | 240.00
 146    |    152 | 231.00
 194    |    210 | 144.00
(5 rows)
```

## Modèles de sous-requêtes corrélées non pris en charge
<a name="r_correlated_subqueries-correlated-subquery-patterns-that-are-not-supported"></a>

Le planificateur de requête utilise une méthode de réécriture de requête appelée décorrélation de sous-requête afin d’optimiser plusieurs modèles de sous-requêtes corrélées en vue de l’exécution dans un environnement MPP. Quelques types de sous-requêtes corrélées suivent des modèles qu’Amazon Redshift ne peut pas décorréler et ne prend pas en charge. Les requêtes qui contiennent les références de corrélation suivantes génèrent des erreurs : 
+  Les références de corrélation qui ignorent un bloc de requête, également appelées « références de corrélation de niveau non hiérarchique ». Par exemple, dans la requête suivante, le bloc contenant la référence de corrélation et le bloc ignoré sont connectés par un prédicat NOT EXISTS : 

  ```
  select event.eventname from event
  where not exists
  (select * from listing
  where not exists
  (select * from sales where event.eventid=sales.eventid));
  ```

  Le bloc ignoré dans ce cas est la sous-requête sur la table LISTING. La référence de corrélation correspond aux tables EVENT et SALES. 
+  Références de corrélation à partir d’une sous-requête qui fait partie d’une clause ON dans une requête externe : 

  ```
  select * from category
  left join event
  on category.catid=event.catid and eventid =
  (select max(eventid) from sales where sales.eventid=event.eventid);
  ```

  La clause ON contient une référence de corrélation depuis SALES dans la sous-requête jusqu’à EVENT dans la requête externe. 
+ Références de corrélation sensibles à null à une table système Amazon Redshift. Par exemple : 

  ```
  select attrelid
  from stv_locks sl, pg_attribute
  where sl.table_id=pg_attribute.attrelid and 1 not in
  (select 1 from pg_opclass where sl.lock_owner = opcowner);
  ```
+ Références de corrélation à partir d’une sous-requête contenant une fonction de fenêtrage. 

  ```
  select listid, qtysold
  from sales s
  where qtysold not in
  (select sum(numtickets) over() from listing l where s.listid=l.listid);
  ```
+ Références d’une colonne GROUP BY aux résultats d’une sous-requête corrélée. Par exemple : 

  ```
  select listing.listid,
  (select count (sales.listid) from sales where sales.listid=listing.listid) as list
  from listing
  group by list, listing.listid;
  ```
+ Références de corrélation à partir d’une sous-requête avec fonction d’agrégation et d’une clause GROUP BY, connectée à la requête externe par un prédicat IN. (Cette restriction ne s’applique pas aux fonctions d’agrégation MIN et MAX.) Par exemple : 

  ```
  select * from listing where listid in
  (select sum(qtysold)
  from sales
  where numtickets>4
  group by salesid);
  ```

# SELECT INTO
<a name="r_SELECT_INTO"></a>

Sélectionne les lignes définies par une requête et les insère dans une nouvelle table. Vous pouvez spécifier s’il faut créer une table temporaire ou permanente. 

## Syntaxe
<a name="r_SELECT_INTO-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

 Pour en savoir plus sur les paramètres de cette commande, consultez [SELECT](r_SELECT_synopsis.md). 

## Exemples
<a name="r_SELECT_INTO-examples"></a>

Sélectionnez toutes les lignes de la table EVENT et créez une table NEWEVENT : 

```
select * into newevent from event;
```

Sélectionnez le résultat d’une requête d’agrégation dans une table temporaire appelée PROFITS : 

```
select username, lastname, sum(pricepaid-commission) as profit
into temp table profits
from sales, users
where sales.sellerid=users.userid
group by 1, 2
order by 3 desc;
```

# SET
<a name="r_SET"></a>

Définit la valeur d’un paramètre de configuration du serveur. Utilisez la commande SET pour remplacer un paramètre pendant la durée de la séance ou de la transaction actuelle uniquement.

Utilisez la commande [RESET](r_RESET.md) pour rétablir un paramètre à sa valeur par défaut. 

Vous pouvez modifier les paramètres de configuration du serveur de plusieurs manières. Pour plus d'informations, consultez [Modification de la configuration du serveur](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings). 

## Syntaxe
<a name="r_SET-synopsis"></a>

```
SET { [ SESSION | LOCAL ]
{ SEED | parameter_name } { TO | = }
{ value | 'value' | DEFAULT } |
SEED TO value }
```

L’instruction suivante définit la valeur d’une variable de contexte de session.

```
SET { [ SESSION | LOCAL ]
variable_name { TO | = }
{ value | 'value'  }
```

## Parameters
<a name="r_SET-parameters"></a>

SESSION   
Spécifie que le paramètre est valide pour la séance en cours. Valeur par défaut.

*variable\$1name*   
Spécifie le nom de la variable contextuelle définie pour la session.  
La convention de nommage est un nom en deux parties séparées par un point, par exemple *identifier.identifier* (identifiant.identifiant). Un seul séparateur de points est autorisé. Utilisez un *identifiant* qui respecte les règles d’identification standard pour Amazon Redshift. Pour obtenir plus d’informations à ce sujet, consultez [Noms et identificateurs](r_names.md). Les identifiants délimités ne sont pas autorisés.

LOCAL   
Spécifie que le paramètre est valide pour la transaction en cours. 

SEED TO *valeur*   
Définit une valeur initiale interne à utiliser par la fonction RANDOM pour la génération de nombres aléatoires.  
SET SEED accepte une *valeur* numérique comprise entre 0 et 1, et la multiplie par (231-1) en vue de son utilisation avec la fonction [Fonction RANDOM](r_RANDOM.md). Si vous utilisez SET SEED avant d’effectuer plusieurs appels RANDOM, RANDOM génère les nombres selon une séquence prévisible.

 *nom\$1paramètre*   
Nom du paramètre à définir. Consultez [Modification de la configuration du serveur](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings) pour obtenir des informations sur les paramètres.

 *valeur*   
Nouvelle valeur de paramètre. Utilisez des guillemets simples pour définir la valeur d’une chaîne spécifique. Si vous utilisez SET SEED, ce paramètre contient la valeur SEED. 

DEFAULT   
Définit le paramètre à la valeur par défaut.

## Exemples
<a name="r_SET-examples"></a>

 **Modification d’un paramètre pour la séance en cours** 

L’exemple suivant définit datestyle :

```
set datestyle to 'SQL,DMY';
```

 **Définition d’un groupe de requêtes pour la gestion de la charge de travail** 

Si les groupes de requêtes sont répertoriés dans une définition de file d’attente dans le cadre de la configuration WLM du cluster, vous pouvez définir le paramètre QUERY\$1GROUP avec un nom de groupe de requêtes répertorié. Les requêtes suivantes sont affectées à la file d’attente des requêtes associée. Le paramètre QUERY\$1GROUP reste en vigueur pendant la durée de la séance ou jusqu’à ce qu’une commande RESET\$1QUERY\$1GROUP soit rencontrée.

Cet exemple exécute deux requêtes dans le cadre du groupe de requêtes ’priority’, puis réinitialise le groupe de requêtes. 

```
set query_group to 'priority';
select tbl, count(*)from stv_blocklist;
select query, elapsed, substring from svl_qlog order by query desc limit 5;
reset query_group;
```

Pour plus d’informations, consultez [Gestion de la charge de travail](cm-c-implementing-workload-management.md). 

 **Modifier l’espace de noms d’identité par défaut pour la session** 

Un utilisateur de base de données peut définir `default_identity_namespace`. Cet exemple montre comment utiliser `SET SESSION` pour remplacer le paramètre pour la durée de la session en cours, puis afficher la nouvelle valeur du fournisseur d’identité. C’est le plus souvent utilisé lorsque vous utilisez un fournisseur d’identité avec Redshift et IAM Identity Center. Pour plus d’informations sur l’utilisation d’un fournisseur d’identité avec Redshift, consultez [Connexion de Redshift à IAM Identity Center pour offrir aux utilisateurs une expérience d’authentification unique](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html).

```
SET SESSION default_identity_namespace = 'MYCO';
         
SHOW default_identity_namespace;
```

Après avoir exécuté la commande, vous pouvez exécuter une instruction GRANT ou une instruction CREATE comme suit :

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
         
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

Dans ce cas, la définition de l’espace de noms d’identité par défaut équivaut à préfixer chaque identité par l’espace de noms. Dans cet exemple, `alice` est remplacé par `MYCO:alice`. Pour plus d’informations sur les paramètres relatifs à la configuration Redshift avec IAM Identity Center, consultez [ALTER SYSTEM](r_ALTER_SYSTEM.md) et [ALTER IDENTITY PROVIDER](r_ALTER_IDENTITY_PROVIDER.md).

 **Définition d’une étiquette pour un groupe de requêtes** 

Le paramètre QUERY\$1GROUP définit une étiquette pour une ou plusieurs requêtes exécutées dans la même séance après une commande SET. À son tour, cette étiquette est enregistrée lorsque les requêtes sont exécutées et peuvent être utilisées pour limiter les résultats renvoyés par les tables système STL\$1QUERY et STV\$1INFLIGHT et la vue SVL\$1QLOG. 

```
show query_group;
query_group
-------------
unset
(1 row)

set query_group to '6 p.m.';


show query_group;
query_group
-------------
6 p.m.
(1 row)

select * from sales where salesid=500;
salesid | listid | sellerid | buyerid | eventid | dateid | ...
---------+--------+----------+---------+---------+--------+-----
500 |    504 |     3858 |    2123 |    5871 |   2052 | ...
(1 row)

reset query_group;

select query, trim(label) querygroup, pid, trim(querytxt) sql
from stl_query
where label ='6 p.m.';
query | querygroup |  pid  |                  sql
-------+------------+-------+----------------------------------------
57 | 6 p.m.     | 30711 | select * from sales where salesid=500;
(1 row)
```

Les étiquettes de groupe de requêtes sont un mécanisme utile pour isoler les requêtes ou groupes de requêtes exécutés dans le cadre de scripts. Vous n'avez pas besoin d'identifier et de suivre les requêtes en fonction de leurs étiquettes IDs ; vous pouvez les suivre en fonction de leurs étiquettes.

 **Définition d’une valeur de départ pour la génération de nombres aléatoires** 

L’exemple suivant utilise SET avec l’option SEED pour que la fonction RANDOM génère des nombres selon une séquence prévisible.

D’abord, renvoyez trois entiers RANDOM sans définir au préalable la valeur SEED : 

```
select cast (random() * 100 as int);
int4
------
6
(1 row)

select cast (random() * 100 as int);
int4
------
68
(1 row)

select cast (random() * 100 as int);
int4
------
56
(1 row)
```

A présent, définissez la valeur SEED sur `.25` et renvoyez trois nombres RANDOM supplémentaires : 

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

Enfin, réinitialisez la valeur SEED sur `.25` et vérifiez que RANDOM renvoie les mêmes résultats que les trois appels précédents : 

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

L’exemple suivant définit une variable contextuelle personnalisée. 

```
SET app_context.user_id TO 123;
SET app_context.user_id TO 'sample_variable_value';
```

# SET SESSION AUTHORIZATION
<a name="r_SET_SESSION_AUTHORIZATION"></a>

Définit le nom d’utilisateur de la séance en cours.

Vous pouvez utiliser la commande SET SESSION AUTHORIZATION pour tester l’accès à la base de données en exécutant temporairement une séance ou une transaction en tant qu’utilisateur non privilégié, par exemple. Vous devez être un super-utilisateur de la base de données pour exécuter cette commande.

## Syntaxe
<a name="r_SET_SESSION_AUTHORIZATION-synopsis"></a>

```
SET [ LOCAL ] SESSION AUTHORIZATION { user_name | DEFAULT }
```

## Parameters
<a name="r_SET_SESSION_AUTHORIZATION-parameters"></a>

LOCAL  
Spécifie que le paramètre est valide pour la transaction en cours. Spécifie que le paramètre est valide pour la séance en cours.

 *user\$1name*   
Nom de l’utilisateur à définir. Le nom d’utilisateur peut être écrit comme un identificateur ou une chaîne littérale.

DEFAULT  
Définit le nom d’utilisateur de la séance avec la valeur par défaut.

## Exemples
<a name="r_SET_SESSION_AUTHORIZATION-examples"></a>

L’exemple suivant définit le nom d’utilisateur de la séance en cours comme étant `dwuser` :

```
SET SESSION AUTHORIZATION 'dwuser';
```

L’exemple suivant définit le nom d’utilisateur de la transaction en cours avec la valeur `dwuser` :

```
SET LOCAL SESSION AUTHORIZATION 'dwuser';
```

Cet exemple définit le nom d’utilisateur de la séance en cours avec le nom d’utilisateur par défaut :

```
SET SESSION AUTHORIZATION DEFAULT;
```

# SET SESSION CHARACTERISTICS
<a name="r_SET_SESSION_CHARACTERISTICS"></a>

Cette commande est obsolète.

# MONTRER
<a name="r_SHOW"></a>

Affiche la valeur actuelle d’un paramètre de configuration de serveur. Cette valeur peut être spécifique à la séance en cours si une commande SET est activée. Pour obtenir la liste des paramètres de configuration, consultez [Référence de configuration](cm_chap_ConfigurationRef.md).

## Syntaxe
<a name="r_SHOW-synopsis"></a>

```
SHOW { parameter_name | ALL }
```

L’instruction suivante affiche la valeur actuelle d’une variable de contexte de session. Si la variable n’existe pas, Amazon Redshift renvoie une erreur.

```
SHOW variable_name
```

## Parameters
<a name="r_SHOW-parameters"></a>

 *nom\$1paramètre*   
Affiche la valeur actuelle du paramètre spécifié.

ALL   
Affiche les valeurs actuelles de tous les paramètres.

*variable\$1name*   
Affiche la valeur actuelle de la variable spécifiée.

## Exemples
<a name="r_SHOW-examples"></a>

L’exemple suivant affiche la valeur du paramètre query\$1group : 

```
show query_group;

query_group

unset
(1 row)
```

L’exemple suivant affiche une liste de tous les paramètres et de leurs valeurs : 

```
show all;
name        |   setting
--------------------+--------------
datestyle          | ISO, MDY
extra_float_digits | 0
query_group        | unset
search_path        | $user,public
statement_timeout  | 0
```

L’exemple suivant affiche la valeur actuelle de la variable spécifiée.

```
SHOW app_context.user_id;
```

# AFFICHER LES SUBVENTIONS DANS LA COLONNE
<a name="r_SHOW_COLUMN_GRANTS"></a>

Affiche les autorisations sur une colonne d'un tableau.

## Autorisations requises
<a name="r_SHOW_COLUMN_GRANTS-required-permissions"></a>

SHOW GRANTS pour un objet cible n'affichera que les autorisations visibles par l'utilisateur actuel. Une autorisation est visible pour l'utilisateur actuel s'il répond à l'un des critères suivants :
+ Devenez un superutilisateur
+ Être l'utilisateur autorisé
+ Obtenir le statut de propriétaire du rôle attribué
+ Obtenir le rôle visé par la subvention d'objet

## Syntaxe
<a name="r_SHOW_COLUMN_GRANTS-synopsis"></a>

```
SHOW COLUMN GRANTS ON TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_COLUMN_GRANTS-parameters"></a>

database\$1name  
Nom de la base de données contenant la table cible

nom\$1schéma  
Le nom du schéma contenant la table cible

table\$1name  
Le nom de la table cible

nom d’utilisateur  
Inclure uniquement les autorisations relatives au nom d'utilisateur dans la sortie

role\$1name  
Inclure uniquement les autorisations accordées à role\$1name dans la sortie

PUBLIC  
Inclure uniquement les subventions au PUBLIC dans le résultat

row\$1limit  
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000.

## Exemples
<a name="r_SHOW_COLUMN_GRANTS-examples"></a>

L'exemple suivant montre les autorisations de colonne sur la table demo\$1db.demo\$1schema.t100 :

```
SHOW COLUMN GRANTS ON TABLE demo_db.demo_schema.t100;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         134 | bob           | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | SELECT         |         130 | alice         | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | UPDATE         |         130 | alice         | user          | f            | COLUMN          | dbadmin
```

L'exemple suivant montre les autorisations de colonne sur la table demo\$1schema.t100 pour l'utilisateur bob :

```
SHOW COLUMN GRANTS ON TABLE demo_schema.t100 for bob;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         135 | bob           | user          | f            | COLUMN          | dbadmin
```

# SHOW COLUMNS
<a name="r_SHOW_COLUMNS"></a>

Affiche la liste de colonnes d’une table ainsi que certains attributs de colonne.

Chaque ligne de sortie se compose d'une liste séparée par des virgules indiquant le nom de la base de données, le nom du schéma, le nom de la table, le nom de colonne, la position ordinale, la valeur par défaut de la colonne, le type de données, la longueur maximale des caractères, la précision numérique, les remarques, le type de clé de tri, l'ordre des clés de distribution, le codage et le classement. Pour obtenir plus d’informations sur ces attributs, consultez [SVV\$1ALL\$1COLUMNS](r_SVV_ALL_COLUMNS.md).

Si le résultat de la commande SHOW COLUMNS compte plus de 10 000 colonnes, une erreur est renvoyée.

## Autorisations requises
<a name="r_SHOW_COLUMNS-privileges"></a>

Pour afficher une colonne dans une table Amazon Redshift, l’utilisateur actuel doit satisfaire à l’un des critères suivants :
+ Être un super-utilisateur.
+ Être le propriétaire de la table.
+ Avoir le privilège USAGE sur le schéma parent et le privilège SELECT sur la table ou le privilège SELECT sur la colonne.

## Syntaxe
<a name="r_SHOW_COLUMNS-synopsis"></a>

```
SHOW COLUMNS FROM TABLE database_name.schema_name.table_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_COLUMNS-parameters"></a>

 *database\$1name*   
Nom de la base de données qui contient les tables à répertorier.   
Pour afficher les tables dans un AWS Glue Data Catalog, spécifiez (`awsdatacatalog`) comme nom de base de données et assurez-vous que la configuration du système `data_catalog_auto_mount` est définie sur`true`. Pour de plus amples informations, veuillez consulter [ALTER SYSTEM](r_ALTER_SYSTEM.md).

 *nom\$1schéma*   
Nom du schéma qui contient les tables à répertorier.   
Pour afficher AWS Glue Data Catalog les tables, indiquez le nom AWS Glue de la base de données comme nom du schéma.

 *table\$1name*   
Nom de la table qui contient les colonnes à répertorier. 

 *filter\$1pattern*   
Expression de caractères UTF-8 valide constituée d’un modèle à mettre en correspondance avec les noms de tables. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_SHOW_COLUMNS.html)
Si *filter\$1pattern* ne contient pas de métacaractères, le modèle représente uniquement la chaîne elle-même ; dans ce cas, LIKE a la même fonction que l’opérateur d’égalité. 

 *row\$1limit*   
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000. 

## Exemples
<a name="r_SHOW_COLUMNS-examples"></a>

L’exemple suivant montre les colonnes de la base de données Amazon Redshift nommée `sample_data_dev` qui se trouvent dans le schéma `tickit` et la table `event`.

```
SHOW COLUMNS FROM TABLE demo_schema.compound_sort_table;

  database_name | schema_name |     table_name      | column_name | ordinal_position | column_default | is_nullable |     data_type     | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+---------------------+-------------+------------------+----------------+-------------+-------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 demo_db       | demo_schema | compound_sort_table | id          |                1 |                | YES         | integer           |                          |                32 |             0 |         | COMPOUND      |        1 |        1 | delta32k | 
 demo_db       | demo_schema | compound_sort_table | name        |                2 |                | YES         | character varying |                       50 |                   |               |         | COMPOUND      |        2 |          | lzo      | default
 demo_db       | demo_schema | compound_sort_table | date_col    |                3 |                | YES         | date              |                          |                   |               |         |               |        0 |          | delta    | 
 demo_db       | demo_schema | compound_sort_table | amount      |                4 |                | YES         | numeric           |                          |                10 |             2 |         |               |        0 |          | mostly16 |
```

L'exemple suivant montre les tables de la AWS Glue Data Catalog base de données nommée `awsdatacatalog` qui figurent dans le schéma `batman` et la table`nation`. La sortie est limitée à `2` lignes.

```
SHOW COLUMNS FROM TABLE second_db.public.t22;

 database_name | schema_name | table_name | column_name | ordinal_position | column_default | is_nullable |          data_type          | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+------------+-------------+------------------+----------------+-------------+-----------------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 second_db     | public      | t22        | col1        |                1 |                | YES         | integer                     |                          |                32 |             0 |         | INTERLEAVED   |       -1 |          | mostly8  | 
 second_db     | public      | t22        | col2        |                2 |                | YES         | character varying           |                      100 |                   |               |         | INTERLEAVED   |        2 |          | text255  | default
 second_db     | public      | t22        | col3        |                3 |                | YES         | timestamp without time zone |                          |                   |               |         |               |        0 |          | raw      | 
 second_db     | public      | t22        | col4        |                4 |                | YES         | numeric                     |                          |                10 |             2 |         |               |        0 |          | az64     |
```

# AFFICHER LES CONTRAINTES
<a name="r_SHOW_CONSTRAINTS"></a>

Affiche une liste des contraintes liées à la clé primaire et à la clé étrangère dans un tableau.

## Autorisations requises
<a name="r_SHOW_CONSTRAINTS-required-permissions"></a>

Pour exécuter SHOW CONSTRAINTS sur une table, l'utilisateur actuel doit satisfaire à l'un des critères suivants :
+ Devenez un superutilisateur
+ Soyez le propriétaire de la table
+ Obtenir le privilège USAGE sur le schéma parent et le privilège SELECT sur la table

## Syntaxe
<a name="r_SHOW_CONSTRAINTS-synopsis"></a>

```
SHOW CONSTRAINTS {PRIMARY KEYS | FOREIGN KEYS [EXPORTED]}
FROM TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_CONSTRAINTS-parameters"></a>

*database\$1name*  
Nom de la base de données contenant la table cible

*nom\$1schéma*  
Le nom du schéma contenant la table cible

*table\$1name*  
Le nom de la table cible

EXPORTÉ  
Lorsque EXPORTED est spécifié, listez toutes les clés étrangères des autres tables qui font référence à la table cible.

*row\$1limit*  
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000.

## Exemples
<a name="r_SHOW_CONSTRAINTS-examples"></a>

L'exemple suivant montre les contraintes de clé primaire issues de la table demo\$1db.demo\$1schema.pk1 :

```
SHOW CONSTRAINTS PRIMARY KEYS FROM TABLE demo_db.demo_schema.pk1;
 database_name | schema_name | table_name | pk_name  | column_name | key_seq 
---------------+-------------+------------+----------+-------------+---------
 demo_db       | demo_schema | pk1        | pk1_pkey | i           |       1
 demo_db       | demo_schema | pk1        | pk1_pkey | j           |       2
 demo_db       | demo_schema | pk1        | pk1_pkey | c           |       3
```

L'exemple suivant montre les contraintes liées aux clés étrangères issues de la table demo\$1schema.fk2 :

```
SHOW CONSTRAINTS FOREIGN KEYS FROM TABLE demo_schema.fk2;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |  fk_name   | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey | pk1_pkey |             |             |
```

L'exemple suivant montre les contraintes de clé étrangère exportées à partir de la table demo\$1schema.pk1 :

```
SHOW CONSTRAINTS FOREIGN KEYS EXPORTED FROM TABLE demo_schema.pk1;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |     fk_name     | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+-----------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | other_fk      | i              |       1 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | other_fk      | j              |       2 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | other_fk      | c              |       3 | other_fk_i_fkey | pk1_pkey |             |             |
```

# SHOW EXTERNAL TABLE
<a name="r_SHOW_EXTERNAL_TABLE"></a>

Affiche la définition d’une table externe, y compris les attributs de table et les attributs de colonne. Vous pouvez utiliser la sortie de l’instruction SHOW EXTERNAL TABLE pour recréer la table. 

Pour plus d’informations sur la création de tables externes, consultez [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md). 

## Syntaxe
<a name="r_SHOW_EXTERNAL_TABLE-synopsis"></a>

```
SHOW EXTERNAL TABLE [external_database].external_schema.table_name [ PARTITION ]
```

## Parameters
<a name="r_SHOW_EXTERNAL_TABLE-parameters"></a>

 *external\$1database*   
Nom de la base de données externe associée. Ce paramètre est facultatif.

 *external\$1schema*   
Nom du schéma externe associé. 

 *table\$1name*   
Nom de la table à afficher. 

PARTITION   
Affiche les instructions ALTER TABLE pour ajouter des partitions à la définition de table. 

## Exemples
<a name="r_SHOW_EXTERNAL_TABLE-examples"></a>

Les exemples suivants sont basés sur une table externe définie comme suit :

```
CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
     csmallint smallint,
     cint int,
     cbigint bigint,
     cfloat float4,
     cdouble float8,
     cchar char(10),
     cvarchar varchar(255),
     cdecimal_small decimal(18,9),
     cdecimal_big decimal(30,15),
     ctimestamp TIMESTAMP,
     cboolean boolean,
     cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime TIMESTAMP)
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
```

Voici un exemple de la commande SHOW EXTERNAL TABLE et de sortie pour la table `my_schema.alldatatypes_parquet_test_partitioned`.

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

Voici un exemple de la commande SHOW EXTERNAL TABLE et de sortie pour la même table, mais avec la base de données également spécifiée dans le paramètre.

```
SHOW EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

Voici un exemple de la commande SHOW EXTERNAL TABLE et de sortie lorsque le paramètre `PARTITION` est utilisé. La sortie contient des instructions ALTER TABLE permettant d’ajouter des partitions à la définition de table.

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned PARTITION;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-01') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-01';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-02') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-02';"
```

# SHOW DATABASES
<a name="r_SHOW_DATABASES"></a>

Affiche les bases de données d’un catalogue de données ou d’un entrepôt de données Amazon Redshift. SHOW DATABASES répertorie toutes les bases de données accessibles, telles que, dans l'entrepôt de données, les AWS Glue Data Catalog bases de données (awsdatacatalog), les bases de données de partage de données et les bases de données Lake Formation.

## Autorisations requises
<a name="r_SHOW_DATABASES-privileges"></a>

Toutes les bases de données sont visibles par les utilisateurs, sauf :
+ Pour les bases de données créées à partir d’une unité de partage des données avec des autorisations permettant d’être visibles, l’utilisateur actuel doit disposer de l’autorisation USAGE sur la base de données.

## Syntaxe
<a name="r_SHOW_DATABASES-syntax"></a>

Pour afficher les bases de données d’un entrepôt de données Amazon Redshift :

```
SHOW DATABASES 
[ LIKE '<expression>' ]
[ LIMIT row_limit ]
```

Pour afficher des bases de données d’un Catalogue de données :

```
SHOW DATABASES FROM DATA CATALOG 
[ ACCOUNT  '<id1>', '<id2>', ... ]
[ LIKE '<expression>' ]
[ IAM_ROLE default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ]
[ LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_DATABASES-parameters"></a>

ACCOUNT ’<id1>’, ’<id2>’, ...   
Les AWS Glue Data Catalog comptes à partir desquels répertorier les bases de données. L’omission de ce paramètre signifie qu’Amazon Redshift doit afficher les bases de données du compte qui possède le cluster.

LIKE ’<expression>’  
Filtre la liste des bases de données sur celles qui correspondent à l’expression que vous spécifiez. Ce paramètre prend en charge les modèles qui utilisent les caractères génériques % (pourcentage) et \$1 (trait de soulignement).

IAM\$1ROLE default \$1 ’SESSION’ \$1 ’arn:aws:iam::<account-id>:role/<role-name>’  
Si vous spécifiez un rôle IAM qui est associé au cluster pendant l’exécution de la commande SHOW DATABASES, Amazon Redshift utilise les informations d’identification du rôle lorsque vous exécutez des requêtes sur la base de données.  
Si le mot clé `default` est spécifié, le rôle IAM défini par défaut et qui est associé au cluster est alors utilisé.  
Utilisez `'SESSION'` si vous vous connectez à votre cluster Amazon Redshift à l’aide d’une identité fédérée et que vous accédez aux tables à partir de la base de données externe créée à l’aide de la commande [CREATE DATABASE](r_CREATE_DATABASE.md). Pour voir un exemple d’utilisation d’une identité fédéré, consultez [Utilisation d’une identité fédérée pour gérer l’accès d’Amazon Redshift aux ressources locales et aux tables externes Amazon Redshift Spectrum](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html), qui explique comment configurer l’identité fédérée.   
Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. Au minimum, le rôle IAM doit être autorisé à exécuter une opération LIST sur le compartiment Amazon S3 devant être accessible et une opération GET sur les objets Amazon S3 contenus dans le compartiment. Pour en savoir plus sur les bases de données créées à partir de AWS Glue Data Catalog for datashares et à l'aide de IAM\$1ROLE, consultez la section Utilisation de partages de données gérés [par Lake Formation](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html) en tant que consommateur.  
Le code suivant montre la syntaxe de la chaîne de paramètre IAM\$1ROLE pour un seul ARN.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
Vous pouvez créer des chaînes de rôles pour permettre à votre cluster d’endosser un autre rôle IAM, y compris un rôle appartenant à un autre compte. Les chaînes ainsi créées peuvent inclure jusqu’à 10 rôles. Pour plus d'informations, consultez [Créer des rôles IAM dans Amazon Redshift Spectrum](c-spectrum-iam-policies.md#c-spectrum-chaining-roles).   
 Attachez à ce rôle IAM une politique d’autorisations IAM similaire à la suivante.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
Pour connaître les étapes à suivre afin de créer un rôle IAM à utiliser avec une requête fédérée, consultez [Création d’un secret et d’un rôle IAM pour utiliser des requêtes fédérées](federated-create-secret-iam-role.md).   
N’incluez pas d’espaces dans la liste des rôles chaînés.
L’exemple suivant montre la syntaxe d’une chaîne de trois rôles.  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

LIMIT *row\$1limit*  
Clause pour effectuer LIMIT sur le nombre de lignes retournées. Où *row\$1limit* est le nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000.

## Exemples
<a name="r_SHOW_DATABASES-examples"></a>

L’exemple suivant affiche toutes les bases de données du catalogue de données à partir de l’ID de compte 123456789012.

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012'

  catalog_id  | database_name |                        database_arn                    |     type     |                                             target_database                                      | location | parameters
--------------+---------------+--------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------+----------+------------
 123456789012 |   database1   | arn:aws:glue:us-east-1:123456789012:database/database1 | Data Catalog |                                                                                                  |          |
 123456789012 |   database2   | arn:aws:glue:us-east-1:123456789012:database/database2 | Data Catalog | arn:aws:redshift:us-east-1:123456789012:datashare:035c45ea-61ce-86f0-8b75-19ac6102c3b7/database2 |          |
```

Les exemples suivants montrent comment afficher toutes les bases de données du catalogue de données à partir de l’ID de compte 123456789012 en utilisant les informations d’identification d’un rôle IAM.

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE default;
```

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE <iam-role-arn>;
```

L’exemple suivant affiche toutes les bases de données de l’entrepôt de données Amazon Redshift connecté.

```
SHOW DATABASES

database_name  | database_owner | database_type        | database_acl | parameters | database_isolation_level
---------------+----------------+----------------------+--------------+------------+--------------------
awsdatacatalog | 1              | auto mounted catalog | NULL         | UNKNOWN    | UNKNOWN
dev            | 1              | local                | NULL         | NULL       | Snapshot Isolation
```

# AFFICHER LES FONCTIONS
<a name="r_SHOW_FUNCTIONS"></a>

Affiche la liste des fonctions d'un schéma, ainsi que des informations sur les objets répertoriés.

Chaque ligne de sortie comporte les colonnes database\$1name, schema\$1name, function\$1name, number\$1of\$1arguments, argument\$1list, return\$1type, remarks.

Si SHOW FUNCTIONS génère plus de 10 000 lignes, la commande génère une erreur.

## Autorisations requises
<a name="r_SHOW_FUNCTIONS-required-permissions"></a>

Pour afficher une fonction dans un schéma Redshift, l'utilisateur actuel doit satisfaire à l'un des critères suivants :
+ Devenez un superutilisateur
+ Soyez le propriétaire de la fonction
+ Privilège USAGE accordé sur le schéma parent et EXECUTE accordé sur la fonction

## Syntaxe
<a name="r_SHOW_FUNCTIONS-synopsis"></a>

```
SHOW FUNCTIONS FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_FUNCTIONS-parameters"></a>

*database\$1name*  
Nom de la base de données contenant les fonctions à répertorier.

*nom\$1schéma*  
Nom du schéma qui contient les fonctions à répertorier.

*filter\$1pattern*  
Expression de caractères UTF-8 valide avec un modèle correspondant aux noms des fonctions. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_SHOW_FUNCTIONS.html)
Notez que le filter\$1pattern ne correspond qu'au nom de la fonction.

*row\$1limit*  
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000.

## Exemples
<a name="r_SHOW_FUNCTIONS-examples"></a>

L'exemple suivant montre les fonctions du schéma demo\$1db.demo\$1schema :

```
SHOW FUNCTIONS FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |    function_name     | number_of_arguments |                                  argument_list                                  |    return_type    | remarks 
---------------+-------------+----------------------+---------------------+---------------------------------------------------------------------------------+-------------------+---------
 demo_db       | demo_schema | f2                   |                   6 | integer, character varying, numeric, date, timestamp without time zone, boolean | character varying | 
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer                                                                | numeric           | 
 demo_db       | demo_schema | f_days_between       |                   2 | date, date                                                                      | integer           |
```

L'exemple suivant montre les fonctions du schéma demo\$1schema dont les noms se terminent par « discount » :

```
SHOW FUNCTIONS FROM SCHEMA demo_schema like '%discount';
 database_name | schema_name |    function_name     | number_of_arguments |  argument_list   | return_type | remarks 
---------------+-------------+----------------------+---------------------+------------------+-------------+---------
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer | numeric     |
```

# SHOW GRANTS
<a name="r_SHOW_GRANTS"></a>

Affiche les autorisations pour un utilisateur, un rôle ou un objet. L'objet peut être une base de données, un schéma, une table, une fonction ou un modèle. Lorsque vous spécifiez un objet, tel qu’une table ou une fonction, vous devez le qualifier à l’aide d’une notation en deux ou trois parties. Par exemple, `schema_name.table_name` ou `database_name.schema_name.table_name`.

Si SHOW GRANTS génère plus de 10 000 lignes, la commande génère une erreur.

## Autorisations requises
<a name="r_SHOW_GRANTS-permissions"></a>

Pour exécuter SHOW GRANTS pour un utilisateur ou un rôle cible, l'utilisateur actuel doit satisfaire à l'un des critères suivants :
+ Devenez un superutilisateur
+ Soyez l'utilisateur cible
+ Être le propriétaire du rôle cible
+ Se voir attribuer le rôle

SHOW GRANTS pour un objet cible n'affichera que les autorisations visibles par l'utilisateur actuel. Une autorisation est visible pour l'utilisateur actuel s'il répond à l'un des critères suivants :
+ Devenez un superutilisateur
+ Soyez l'utilisateur cible
+ Obtenir le statut de propriétaire du rôle attribué
+ Obtenir le rôle visé par la subvention d'objet

## Syntaxe
<a name="r_SHOW_GRANTS-syntax"></a>

La syntaxe suivante permet d’afficher les autorisations sur un objet. Notez que la deuxième méthode de spécification d’une fonction n’est valide que pour les schémas externes et les bases de données créés à partir d’un partage de données.

```
SHOW GRANTS ON
{
 DATABASE database_name |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } ( [ [ argname ] argtype [, ...] ] ) |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } |
 SCHEMA {database_name.schema_name | schema_name} | 
 { TABLE {database_name.schema_name.table_name | schema_name.table_name} | table_name }
 TEMPLATE {database_name.schema_name.template_name | template_name}
}
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

La syntaxe suivante permet d’afficher les autorisations accordées à un utilisateur ou à un rôle. 

```
SHOW GRANTS FOR
{username | ROLE role_name}
[FROM DATABASE database_name]
[LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_GRANTS-parameters"></a>

 *database\$1name*   
Nom de la base de données sur laquelle afficher les autorisations.

 *function\$1name*   
Nom de la fonction sur laquelle afficher les subventions.

nom\$1modèle  
Nom du modèle sur lequel les subventions doivent être affichées.

 *nom\$1schéma*   
Nom du schéma sur lequel afficher les subventions.

 *table\$1name*   
Nom de la table à afficher.

FOR *username*   
Indique l’affichage des autorisations accordées à un utilisateur.

FOR ROLE *role\$1name*   
Indique l’affichage des subventions pour un rôle.

FOR PUBLIC  
Indique l’affichage des subventions pour PUBLIC.

 *row\$1limit*   
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000. 

## Exemples
<a name="r_SHOW_GRANTS-examples"></a>

L’exemple suivant affiche toutes les autorisations sur une base de données nommée`dev`.

```
SHOW GRANTS on database demo_db;

  database_name | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | ALTER          |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TRUNCATE       |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DROP           |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | INSERT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TEMP           |           0 | public        | public        | f            | DATABASE        | dbadmin
 demo_db       | SELECT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | UPDATE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DELETE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | REFERENCES     |         112 | alice         | user          | f            | TABLES          | dbadmin
```

La commande suivante affiche toutes les autorisations sur un schéma nommé`demo`.

```
SHOW GRANTS ON SCHEMA demo_schema;

 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | demo_schema | SCHEMA      | ALTER          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | DROP           |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | USAGE          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | CREATE         |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
```

La commande suivante affiche toutes les autorisations accordées à un utilisateur nommé`alice`.

```
SHOW GRANTS FOR alice;

 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 demo_db       |             |             | DATABASE    | INSERT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | SELECT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | UPDATE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DELETE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | REFERENCES     |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DROP           |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | TRUNCATE       |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | ALTER          |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | USAGE          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | CREATE         |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | DROP           |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | ALTER          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | INSERT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | SELECT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | UPDATE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DELETE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | RULE           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | REFERENCES     |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRIGGER        |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DROP           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRUNCATE       |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | ALTER          |         124 | alice         | user          | TABLE           | dbadmin
```

```
SHOW GRANTS FOR alice FROM DATABASE second_db;
 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 second_db     | public      | t22         | TABLE       | SELECT         |         101 | alice         | user          | TABLE           | dbadmin
```

La commande suivante affiche toutes les autorisations sur une table nommée en l’honneur `t3` d’un utilisateur nommé`alice`. Notez que vous pouvez utiliser une notation en deux ou en trois parties pour spécifier le nom de la table.

```
SHOW GRANTS ON TABLE demo_db.demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin


SHOW GRANTS ON TABLE demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

L’exemple suivant montre toutes les autorisations dans une table nommée`t4`. Notez les différentes façon de spécifier le nom de table.

```
SHOW GRANTS ON t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 
SHOW GRANTS ON TABLE public.t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

# SHOW MODEL
<a name="r_SHOW_MODEL"></a>

Affiche des informations utiles sur un modèle de machine learning, y compris son état, les paramètres utilisés pour le créer et la fonction de prédiction avec ses types d’arguments d’entrée. Vous pouvez utiliser les informations issues de la commande SHOW MODEL pour recréer le modèle. Si les tables de base ont été modifiées, l’exécution de CREATE MODEL avec la même instruction SQL entraîne un modèle différent. Les informations renvoyées par la commande SHOW MODEL sont différentes pour le propriétaire du modèle et pour un utilisateur disposant du privilège EXECUTE. La commande SHOW MODEL affiche différentes sorties lorsqu’un modèle est entraîné à partir d’Amazon Redshift ou lorsqu’il s’agit d’un modèle BYOM.

## Syntaxe
<a name="r_SHOW_MODEL-synopsis"></a>

```
SHOW MODEL ( ALL | model_name )
```

## Parameters
<a name="r_SHOW_MODEL-parameters"></a>

ALL   
Renvoie tous les modèles que l’utilisateur peut utiliser et leurs schémas.

 *model\$1name*   
Nom du modèle. Le nom du modèle d’un schéma doit être unique.

## Notes d’utilisation
<a name="r_SHOW_MODEL_usage_notes"></a>

La commande SHOW MODEL renvoie le résultat suivant : 
+ Nom du modèle. 
+ Schéma dans lequel le modèle a été créé.
+ Propriétaire du modèle.
+ Heure de création du modèle.
+ Statut du modèle, tel que READY, TRAINING ou FAILED.
+ Message de motif d’un modèle ayant échoué.
+ Erreur de validation si le modèle a terminé l’entraînement.
+ Coût estimé pour dériver le modèle pour une approche autre que BYOM. Seul le propriétaire du modèle peut afficher ces informations.
+ Liste des paramètres spécifiés par l’utilisateur et de leurs valeurs, notamment :
  + La colonne TARGET spécifiée.
  + Le type de modèle, AUTO ou XGBoost.
  + Le type de problème, tel que REGRESSION, BINARY\$1CLASSIFICATION ou MULTICLASS\$1CLASSIFICATION Ce paramètre est spécifique à AUTO.
  + Nom de la tâche de formation Amazon SageMaker AI ou de la tâche Amazon SageMaker AI Autopilot qui a créé le modèle. Vous pouvez utiliser ce nom de poste pour obtenir plus d'informations sur le modèle sur Amazon SageMaker AI.
  + L’objectif, par exemple MSE, F1 ou Précision. Ce paramètre est spécifique à AUTO.
  + Nom de la fonction créée.
  + Le type d’inférence, locale ou distante.
  + Les arguments d’entrée de la fonction de prédiction.
  + Les types d’argument d’entrée de la fonction de prédiction pour les modèles autres que BYOM (Bring Your Own Model).
  + Le type de renvoi de la fonction de prédiction. Ce paramètre est spécifique au modèle BYOM.
  + Nom du point de terminaison Amazon SageMaker AI pour un modèle BYOM avec inférence à distance.
  + Rôle IAM. Seul le propriétaire du modèle peut afficher cette information.
  + Compartiment S3 utilisé. Seul le propriétaire du modèle peut afficher cette information.
  + La AWS KMS clé, si elle a été fournie. Seul le propriétaire du modèle peut afficher cette information.
  + La durée maximale d’exécution du modèle.
+ Si le type de modèle n’est pas AUTO, Amazon Redshift affiche également la liste des hyperparamètres fournis et leurs valeurs.

Vous pouvez également afficher certaines des informations fournies par SHOW MODEL dans d’autres tables catalogue, telles que pg\$1proc. Amazon Redshift renvoie des informations sur la fonction de prédiction enregistrée dans la table catalogue pg\$1proc. Ces informations incluent les noms des arguments d’entrée et leurs types pour la fonction de prédiction. Amazon Redshift renvoie les mêmes informations dans la commande SHOW MODEL.

```
SELECT * FROM pg_proc WHERE proname ILIKE '%<function_name>%';
```

## Exemples
<a name="r_SHOW_MODEL-examples"></a>

L’exemple suivant illustre la sortie de la commande SHOW MODEL.

```
SHOW MODEL ALL;

Schema Name |  Model Name
------------+---------------
 public     | customer_churn
```

Le propriétaire de customer\$1churn peut voir la sortie suivante. Un utilisateur disposant uniquement du privilège EXECUTE ne peut pas voir le rôle IAM, le compartiment Amazon S3 et le coût estimé du modèle.

```
SHOW MODEL customer_churn;

       Key                 |           Value
---------------------------+-----------------------------------
 Model Name                | customer_churn
 Schema Name               | public
 Owner                     | 'owner'
 Creation Time             | Sat, 15.01.2000 14:45:20
 Model State               | READY
 validation:F1             | 0.855
 Estimated Cost            | 5.7
                           |
 TRAINING DATA:            |
 Table                     | customer_data
 Target Column             | CHURN
                           |
 PARAMETERS:               |
 Model Type                | auto
 Problem Type              | binary_classification
 Objective                 | f1
 Function Name             | predict_churn
 Function Parameters       | age zip average_daily_spend average_daily_cases
 Function Parameter Types  | int int float float
 IAM Role                  | 'iam_role'
 KMS Key                   | 'kms_key'
 Max Runtime               | 36000
```

# SHOW DATASHARES
<a name="r_SHOW_DATASHARES"></a>

Affiche les partages entrants et sortants d’un cluster à partir du même compte ou entre comptes. Si vous ne spécifiez pas de nom d’unité de partage des données, Amazon Redshift affiche toutes les unités de partage des données dans toutes les bases de données du cluster. Les utilisateurs disposant des privilèges ALTER et SHARE peuvent voir les partages pour lesquels ils disposent de privilèges. 

## Syntaxe
<a name="r_SHOW_DATASHARES-synopsis"></a>

```
SHOW DATASHARES [ LIKE 'namepattern' ] 
```

## Parameters
<a name="r_SHOW_DATASHARES-parameters"></a>

LIKE  
Clause facultative qui compare le modèle de nom spécifié à la description de l’unité de partage des données. Lorsque cette clause est utilisée, Amazon Redshift affiche uniquement les unités de partage des données dont les noms correspondent au modèle de nom spécifié.

*namepattern*  
Nom de l’unité de partage des données interrogée ou une partie du nom à mettre en correspondance à l’aide de caractères génériques.

## Exemples
<a name="r_SHOW_DATASHARES-examples"></a>

L’exemple suivant montre comment afficher les partages entrants et sortants pour un cluster. 

```
SHOW DATASHARES;
SHOW DATASHARES LIKE 'sales%';

share_name   | share_owner | source_database | consumer_database | share_type | createdate          | is_publicaccessible | share_acl | producer_account |           producer_namespace
-------------+-------------+-----------------+-------------------+------------+---------------------+---------------------+-----------+------------------+---------------------------------------
'salesshare' | 100         | dev             |                   | outbound   | 2020-12-09 01:22:54.| False               |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
```

# AFFICHER LES PARAMÈTRES
<a name="r_SHOW_PARAMETERS"></a>

Affiche la liste des paramètres d'une fonction/procédure, ainsi que des informations sur les paramètres.

Chaque ligne de sortie comporte les colonnes database\$1name, schema\$1name, procedure\$1name ou function\$1name, parameter\$1name, ordinal\$1position, parameter\$1type (IN/OUT), data\$1type, character\$1maximum\$1length, numeric\$1precision, numeric\$1scale et remarques.

## Autorisations requises
<a name="r_SHOW_PARAMETERS-required-permissions"></a>

Pour afficher un function/procedure dans un schéma redshift, l'utilisateur actuel doit satisfaire à l'un des critères suivants :
+ Devenez un superutilisateur
+ Soyez le propriétaire de la fonction
+ Privilège USAGE accordé sur le schéma parent et EXECUTE accordé sur la fonction

## Syntaxe
<a name="r_SHOW_PARAMETERS-synopsis"></a>

```
SHOW PARAMETERS OF {FUNCTION| PROCEDURE}
[database_name.]schema_name.function_name(argtype [, ...] )
[LIKE 'filter_pattern'];
```

## Parameters
<a name="r_SHOW_PARAMETERS-parameters"></a>

*database\$1name*  
Nom de la base de données qui contient la fonction à répertorier.

*nom\$1schéma*  
Nom du schéma qui contient la fonction à répertorier.

*filter\$1pattern*  
Expression de caractères UTF-8 valide constituée d’un modèle à mettre en correspondance avec les noms de tables. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_SHOW_PARAMETERS.html)

## Exemples
<a name="r_SHOW_PARAMETERS-examples"></a>

L'exemple suivant montre les paramètres de la procédure demo\$1db.demo\$1schema.f1 :

```
SHOW PARAMETERS OF PROCEDURE demo_db.demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL);
 database_name | schema_name | procedure_name |  parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+------------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | operation        |                1 | IN             | character varying           |                       10 |                   |              
 demo_db       | demo_schema | f1             | value1           |                2 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2           |                3 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | result           |                4 | INOUT          | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | operation_status |                5 | OUT            | character varying           |                       50 |                   |              
 demo_db       | demo_schema | f1             | calculation_time |                6 | OUT            | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f1             | is_successful    |                7 | OUT            | boolean                     |                          |                   |
```

L'exemple suivant montre les paramètres de la procédure demo\$1schema.f1 dont le nom commence par « val » :

```
SHOW PARAMETERS OF PROCEDURE demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL) like 'val%';
 database_name | schema_name | procedure_name | parameter_name | ordinal_position | parameter_type | data_type | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+----------------+------------------+----------------+-----------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | value1         |                2 | IN             | numeric   |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2         |                3 | IN             | numeric   |                          |                18 |             0
```

L'exemple suivant montre les paramètres de la fonction demo\$1schema.f2 :

```
SHOW PARAMETERS OF FUNCTION demo_schema.f2(INT, VARCHAR, DECIMAL, DATE, TIMESTAMP, BOOLEAN);
 database_name | schema_name | function_name | parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+---------------+-----------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f2            |                 |                0 | RETURN         | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | int_param       |                1 | IN             | integer                     |                          |                32 |             0
 demo_db       | demo_schema | f2            | varchar_param   |                2 | IN             | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | decimal_param   |                3 | IN             | numeric                     |                          |                   |              
 demo_db       | demo_schema | f2            | date_param      |                4 | IN             | date                        |                          |                   |              
 demo_db       | demo_schema | f2            | timestamp_param |                5 | IN             | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f2            | boolean_param   |                6 | IN             | boolean                     |                          |                   |
```

# AFFICHER LES POLITIQUES
<a name="r_SHOW_POLICIES"></a>

Affiche les politiques de sécurité au niveau des lignes (RLS) et de masquage dynamique des données (DDM) définies dans une base de données, ainsi que les politiques RLS et DDM appliquées à des relations spécifiques. Seul un superutilisateur ou un utilisateur ayant le `sys:secadmin` rôle dans la base de données peut consulter les résultats de ces politiques.

## Syntaxe
<a name="r_SHOW_POLICIES-synopsis"></a>

```
SHOW { RLS | MASKING } POLICIES
[
    ON { database_name.schema_name.relation_name
       | schema_name.relation_name
       }
    [ FOR { user_name | ROLE role_name | PUBLIC } ]
  |
    FROM DATABASE database_name
]
[ LIMIT row_limit ];
```

## Parameters
<a name="r_SHOW_POLICIES-parameters"></a>

*database\$1name*  
Nom de la base de données à partir de laquelle afficher les politiques.

*nom\$1schéma*  
Nom du schéma de la relation sur laquelle afficher les politiques associées.

*relation\$1name*  
Nom de la relation sur laquelle afficher les politiques associées.

*user\$1name*  
Le nom de l'utilisateur pour lequel la politique est attachée à la relation.

*role\$1name*  
Nom du rôle pour lequel la politique est attachée à la relation.

*row\$1limit*  
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000.

**Note**  
L'affichage des politiques d'une base de données différente de celle de la base de données connectée est pris en charge dans le catalogue des autorisations fédérées Amazon Redshift. La commande SHOW POLICIES prend en charge les requêtes entre bases de données pour toutes les bases de données des entrepôts dotés d'autorisations fédérées Amazon Redshift

## Exemples
<a name="r_SHOW_POLICIES-examples"></a>

La commande suivante montre les politiques RLS de la base de données connectée.

```
SHOW RLS POLICIES;

  policy_name   | policy_alias |                           policy_atts                            |                                                                  policy_qual                                                                         | policy_enabled | policy_modified_by |    policy_modified_time    
----------------+--------------+------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+--------------------+----------------------------
 policy_america | rls_table    | [{"colname":"region","type":"character varying(10)"}]            | (("rls_table"."region" = CAST('USA' AS TEXT)) OR ("rls_table"."region" = CAST('CANADA' AS TEXT)) OR ("rls_table"."region" = CAST('Mexico' AS TEXT))) | t              | admin              | 2025-11-07 14:57:27
```

La commande suivante montre les politiques de masquage de la base de données « sales\$1db.finance-catalog » ;

```
SHOW MASKING POLICIES FROM DATABASE "sales_db@finance-catalog";

  policy_name  |                          input_columns                           |                                                  policy_expression                                                  | policy_modified_by |    policy_modified_time    
---------------+------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+--------------------+----------------------------
 hash_credit   | [{"colname":"credit_card","type":"character varying(256)"}]      | [{"expr":"SHA2((\"masked_table\".\"credit_card\" + CAST('testSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}]   | admin              | 2025-11-07 16:05:54
 hash_username | [{"colname":"username","type":"character varying(256)"}]         | [{"expr":"SHA2((\"masked_table\".\"username\" + CAST('otherTestSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}] | admin              | 2025-11-07 16:07:08
(2 rows)
```

La commande suivante montre les politiques RLS attachées à la relation sales\$1table ;

```
SHOW RLS POLICIES ON sales_schema.sales_table;

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |          grantee          | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+---------------------------+--------------+--------------+-----------+----------------------
 policy_global  | sales_schema | sales_table   | table         | admin    | sales_analyst_role_global | role         | t            | t         | and
 policy_america | sales_schema | sales_table   | table         | admin    | sales_analyst_usa         | user         | t            | t         | and
```

La commande suivante montre les politiques de masquage attachées à la relation transaction\$1table à partir de la base de données « sales\$1db.finance-catalog ».

```
SHOW MASKING POLICIES ON "sales_db@finance-catalog".sales_schema.transaction_table LIMIT 1;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority |   input_columns   |   output_columns   
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+-------------------+-------------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"]     | ["user_name"]
```

La commande suivante montre les politiques RLS attachées à la relation sales\$1table à partir de la base de données « sales\$1db.finance-catalog » pour l'utilisateur « IAMR:Sales\$1Analyst\$1USA ».

```
SHOW RLS POLICIES ON "sales_db@finance-catalog".sales_schema.sales_table FOR "IAMR:sales_analyst_usa";

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |      grantee           | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+------------------------+--------------+--------------+-----------+----------------------
 policy_america | sales_schema | sales_table   | table         | admin    | IAMR:sales_analyst_usa | user         | t            | t         | and
```

La commande suivante montre les politiques RLS attachées à la relation transaction\$1table à partir de la base de données « sales\$1db.finance-catalog » pour le rôle transaction\$1analyst\$1role.

```
SHOW MASKING POLICIES ON sales_schema.transaction_table FOR ROLE transaction_analyst_role;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority | input_columns | output_columns 
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+---------------+----------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"] | ["user_name"]
```

# SHOW PROCEDURE
<a name="r_SHOW_PROCEDURE"></a>

Affiche la définition d’une procédure stockée donnée, y compris sa signature. Vous pouvez utiliser la sortie d’une commande SHOW PROCEDURE pour recréer la procédure stockée. 

## Syntaxe
<a name="r_SHOW_PROCEDURE-synopsis"></a>

```
SHOW PROCEDURE sp_name [( [ [ argname ] [ argmode ] argtype [, ...] ] )]
```

## Parameters
<a name="r_SHOW_PROCEDURE-parameters"></a>

 *sp\$1name*   
Nom de la procédure à afficher. 

*[argname] [ argmode] argtype*   
Types d’arguments en entrée pour identifier la procédure stockée. Si vous le souhaitez, vous pouvez inclure l’ensemble des types de données d’argument, y compris les arguments OUT. Ce n’est pas obligatoire si le nom de la procédure stockée est unique (c’est-à-dire non surchargé).

## Exemples
<a name="r_SHOW_PROCEDURE-examples"></a>

L’exemple suivant illustre la définition de la procédure `test_spl2`.

```
show procedure test_sp2(int, varchar);
                                        Stored Procedure Definition
------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE public.test_sp2(f1 integer, INOUT f2 character varying, OUT character varying)
LANGUAGE plpgsql
AS $_$
DECLARE
out_var alias for $3;
loop_var int;
BEGIN
IF f1 is null OR f2 is null THEN
RAISE EXCEPTION 'input cannot be null';
END IF;
CREATE TEMP TABLE etl(a int, b varchar);
FOR loop_var IN 1..f1 LOOP
insert into etl values (loop_var, f2);
f2 := f2 || '+' || f2;
END LOOP;
SELECT INTO out_var count(*) from etl;
END;
$_$

(1 row)
```

# AFFICHER LES PROCÉDURES
<a name="r_SHOW_PROCEDURES"></a>

Affiche la liste des procédures d'un schéma, ainsi que des informations sur les objets répertoriés.

Chaque ligne de sortie comporte des colonnes `database_name``schema_name`,`procedure_name`,`number_of_arguments`,`argument_list`,,`return_type`, remarques.

Si plus de 10 000 lignes sont générées par SHOW PROCEDURES, la commande génère une erreur.

## Autorisations requises
<a name="r_SHOW_PROCEDURES-required-permissions"></a>

Pour afficher une procédure dans un schéma Redshift, l'utilisateur actuel doit satisfaire à l'un des critères suivants :
+ Devenez un superutilisateur
+ Soyez propriétaire de la procédure
+ Privilège USAGE accordé sur le schéma parent et EXECUTE accordé sur la procédure

## Syntaxe
<a name="r_SHOW_PROCEDURES-synopsis"></a>

```
SHOW PROCEDURES FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## Parameters
<a name="r_SHOW_PROCEDURES-parameters"></a>

database\$1name  
Nom de la base de données contenant les procédures à répertorier.

nom\$1schéma  
Nom du schéma qui contient les procédures à répertorier.

filter\$1pattern  
Expression de caractères UTF-8 valide avec un modèle correspondant aux noms de procédure. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_SHOW_PROCEDURES.html)
Notez que le filter\$1pattern correspond uniquement au nom de la procédure.

row\$1limit  
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000.

## Exemples
<a name="r_SHOW_PROCEDURES-examples"></a>

L'exemple suivant montre les procédures du schéma demo\$1db.demo\$1schema :

```
SHOW PROCEDURES FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |  procedure_name   | number_of_arguments |                argument_list                 |                           return_type                            | remarks 
---------------+-------------+-------------------+---------------------+----------------------------------------------+------------------------------------------------------------------+---------
 demo_db       | demo_schema | f1                |                   4 | character varying, numeric, numeric, numeric | numeric, character varying, timestamp without time zone, boolean | 
 demo_db       | demo_schema | sp_get_result_set |                   2 | integer, refcursor                           | refcursor                                                        | 
 demo_db       | demo_schema | sp_process_data   |                   2 | numeric, numeric                             | numeric, character varying                                       |
```

L'exemple suivant montre les procédures du schéma demo\$1schema dont les noms se terminent par « data » :

```
SHOW PROCEDURES FROM SCHEMA demo_schema like '%data';
 database_name | schema_name | procedure_name  | number_of_arguments |  argument_list   |        return_type         | remarks 
---------------+-------------+-----------------+---------------------+------------------+----------------------------+---------
 demo_db       | demo_schema | sp_process_data |                   2 | numeric, numeric | numeric, character varying |
```

# SHOW SCHEMAS
<a name="r_SHOW_SCHEMAS"></a>

Affiche la liste des schémas d’une base de données ainsi que certains attributs de schéma.

Chaque ligne de sortie comprend le nom de la base de données, le nom du schéma, le propriétaire du schéma, le type du schéma, l’ACL du schéma, la base de données source et l’option de schéma. Pour obtenir plus d’informations sur ces attributs, consultez [SVV\$1ALL\$1SCHEMAS](r_SVV_ALL_SCHEMAS.md).

Si le résultat de la commande SHOW SCHEMAS compte plus de 10 000 schémas, une erreur est renvoyée.

## Autorisations requises
<a name="r_SHOW_SCHEMAS-privileges"></a>

Pour afficher un schéma dans une table Amazon Redshift, l’utilisateur actuel doit satisfaire à l’un des critères suivants :
+ Être un super-utilisateur.
+ Nouveau propriétaire du schéma.
+ Privilège USAGE accordé sur le schéma.

## Syntaxe
<a name="r_SHOW_SCHEMAS-synopsis"></a>

```
SHOW SCHEMAS FROM DATABASE database_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_SCHEMAS-parameters"></a>

 *database\$1name*   
Nom de la base de données qui contient les tables à répertorier.   
Pour afficher les tables dans un AWS Glue Data Catalog, spécifiez (`awsdatacatalog`) comme nom de base de données et assurez-vous que la configuration du système `data_catalog_auto_mount` est définie sur`true`. Pour de plus amples informations, veuillez consulter [ALTER SYSTEM](r_ALTER_SYSTEM.md).

 *filter\$1pattern*   
Expression de caractères UTF-8 valide avec un modèle à mettre en correspondance avec des noms de schéma. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_SHOW_SCHEMAS.html)
Si *filter\$1pattern* ne contient pas de métacaractères, le modèle représente uniquement la chaîne elle-même ; dans ce cas, LIKE a la même fonction que l’opérateur d’égalité. 

 *row\$1limit*   
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000. 

## Exemples
<a name="r_SHOW_SCHEMAS-examples"></a>

L’exemple suivant montre les schémas de la base de données Amazon Redshift nommée `dev`.

```
SHOW SCHEMAS FROM DATABASE dev;

 database_name |     schema_name      | schema_owner | schema_type |         schema_acl          | source_database | schema_option 
---------------+----------------------+--------------+-------------+-----------------------------+-----------------+---------------
 dev           | pg_automv            |            1 | local       |                             |                 | 
 dev           | pg_catalog           |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | public               |            1 | local       | jpuser=UC/jpuser~=UC/jpuser |                 | 
 dev           | information_schema   |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | schemad79cd6d93bf043 |            1 | local       |                             |                 |
```

L'exemple suivant montre les schémas de la AWS Glue Data Catalog base de données nommée`awsdatacatalog`. Le nombre maximal de lignes de sortie est `5`.

```
SHOW SCHEMAS FROM DATABASE awsdatacatalog LIMIT 5;

 database_name  |     schema_name      | schema_owner | schema_type | schema_acl | source_database | schema_option 
----------------+----------------------+--------------+-------------+------------+-----------------+---------------
 awsdatacatalog | 000_too_many_glue_db |              | EXTERNAL    |            |                 | 
 awsdatacatalog | 123_default          |              | EXTERNAL    |            |                 | 
 awsdatacatalog | adhoc                |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_10mb      |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_1g        |              | EXTERNAL    |            |                 |
```

# SHOW TABLE
<a name="r_SHOW_TABLE"></a>

Affiche la définition d'une table, y compris les attributs de table, les contraintes de table, les attributs de colonne, le classement des colonnes et les contraintes de colonne. Vous pouvez utiliser la sortie de l’instruction SHOW TABLE pour recréer la table. 

Pour plus d’informations sur la création de tables, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md). 

## Syntaxe
<a name="r_SHOW_TABLE-synopsis"></a>

```
SHOW TABLE [schema_name.]table_name 
```

## Parameters
<a name="r_SHOW_TABLE-parameters"></a>

 *nom\$1schéma*   
(Facultatif) Nom du schéma associé. 

 *table\$1name*   
Nom de la table à afficher. 

## Exemples
<a name="r_SHOW_TABLE-examples"></a>

Voici un exemple de la sortie SHOW TABLE pour la table `sales`.

```
show table sales;
```

```
CREATE TABLE public.sales (
salesid integer NOT NULL ENCODE az64,
listid integer NOT NULL ENCODE az64 distkey,
sellerid integer NOT NULL ENCODE az64,
buyerid integer NOT NULL ENCODE az64,
eventid integer NOT NULL ENCODE az64,
dateid smallint NOT NULL,
qtysold smallint NOT NULL ENCODE az64,
pricepaid numeric(8,2) ENCODE az64,
commission numeric(8,2) ENCODE az64,
saletime timestamp without time zone ENCODE az64
)
DISTSTYLE KEY SORTKEY ( dateid );
```

Voici un exemple de la sortie SHOW TABLE pour la table `category` dans le schéma `public`. Le classement de la base de données est CASE\$1SENSITIVE.

```
show table public.category;
```

```
CREATE TABLE public.category (
catid smallint NOT NULL distkey,
catgroup character varying(10) ENCODE lzo COLLATE case_sensitive,
catname character varying(10) ENCODE lzo COLLATE case_sensitive,
catdesc character varying(50) ENCODE lzo COLLATE case_sensitive
) 
DISTSTYLE KEY SORTKEY ( catid );
```

L’exemple suivant crée une table `foo` avec une clé primaire.

```
create table foo(a int PRIMARY KEY, b int);
```

Les résultats SHOW TABLE affichent l’instruction create avec toutes les propriétés de la table `foo`.

```
show table foo;
```

```
CREATE TABLE public.foo ( 
a integer NOT NULL ENCODE az64, 
b integer ENCODE az64, PRIMARY KEY (a) 
) 
DISTSTYLE AUTO;
```

Dans cet exemple, nous créons une table dans laquelle les colonnes `a` héritent du classement CASE\$1SENSITIVE par défaut de la base de données, tandis que `b` le classement CASE\$1INSENSITIVE est explicitement défini sur CASE\$1INSENSITIVE. `c`

```
CREATE TABLE public.foo (
a CHAR, 
b VARCHAR(10) COLLATE CASE_INSENSITIVE, 
c SUPER COLLATE CASE_INSENSITIVE
);
```

Les résultats SHOW TABLE affichent l’instruction create avec toutes les propriétés de la table `foo`.

```
show table public.foo;
```

```
CREATE TABLE public.foo (
a character(1) ENCODE lzo COLLATE case_sensitive,
b character varying(10) ENCODE lzo COLLATE case_insensitive,
c super COLLATE case_insensitive
)
DISTSTYLE AUTO;
```

# SHOW TABLES
<a name="r_SHOW_TABLES"></a>

Affiche la liste des tables d’un schéma ainsi que certains attributs de table.

Chaque ligne de sortie comprend le nom de la base de données, le nom du schéma, le nom de la table, le type de table, l'ACL de la table, les remarques, le propriétaire de la table, l'heure de dernière modification, l'heure de dernière modification, dist\$1style et le sous-type de table. Pour obtenir plus d’informations sur ces attributs, consultez [SVV\$1ALL\$1TABLES](r_SVV_ALL_TABLES.md).

Les horodatages des modifications et des altérations peuvent être décalés d'environ 20 minutes par rapport aux mises à jour du tableau.

Si le résultat de la commande SHOW TABLES compte plus de 10 000 tables, une erreur est renvoyée.

## Autorisations requises
<a name="r_SHOW_TABLES-privileges"></a>

Pour afficher une table dans un schéma Amazon Redshift, l’utilisateur actuel doit satisfaire à l’un des critères suivants :
+ Être un super-utilisateur.
+ Être le propriétaire de la table.
+ Le privilège USAGE a été accordé sur le schéma parent et le privilège SELECT sur la table ou le privilège SELECT sur n’importe quelle colonne de la table.

## Syntaxe
<a name="r_SHOW_TABLES-synopsis"></a>

```
SHOW TABLES FROM SCHEMA database_name.schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## Parameters
<a name="r_SHOW_TABLES-parameters"></a>

 *database\$1name*   
Nom de la base de données qui contient les tables à répertorier.   
Pour afficher les tables dans un AWS Glue Data Catalog, spécifiez (`awsdatacatalog`) comme nom de base de données et assurez-vous que la configuration du système `data_catalog_auto_mount` est définie sur`true`. Pour de plus amples informations, veuillez consulter [ALTER SYSTEM](r_ALTER_SYSTEM.md).

 *nom\$1schéma*   
Nom du schéma qui contient les tables à répertorier.   
Pour afficher AWS Glue Data Catalog les tables, indiquez le nom AWS Glue de la base de données comme nom du schéma.

 *filter\$1pattern*   
Expression de caractères UTF-8 valide constituée d’un modèle à mettre en correspondance avec les noms de tables. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_SHOW_TABLES.html)
Si *filter\$1pattern* ne contient pas de métacaractères, le modèle représente uniquement la chaîne elle-même ; dans ce cas, LIKE a la même fonction que l’opérateur d’égalité. 

 *row\$1limit*   
Nombre maximal de lignes à renvoyer. La valeur de *row\$1limit* peut aller de 0 à 10 000. 

## Exemples
<a name="r_SHOW_TABLES-examples"></a>

```
SHOW TABLES FROM SCHEMA s1;

 database_name | schema_name |    table_name     | table_type |              table_acl              | remarks | owner |     last_altered_time      |     last_modified_time     | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+-------------------------------------+---------+-------+----------------------------+----------------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | alice=arwdRxtDPA/alice~bob=d/alice  |         | alice |                            |                            |            | LATE BINDING VIEW
 dev           | s1          | manual_mv         | VIEW       | alice=arwdRxtDPA/alice~bob=P/alice  |         | alice |                            |                            |            | MATERIALIZED VIEW
 dev           | s1          | regular_view      | VIEW       | alice=arwdRxtDPA/alice~bob=r/alice  |         | alice |                            |                            |            | REGULAR VIEW
 dev           | s1          | test_table        | TABLE      | alice=arwdRxtDPA/alice~bob=rw/alice |         | alice | 2025-11-18 15:52:00.010452 | 2025-11-18 15:44:34.856073 | AUTO (ALL) | REGULAR TABLE
```

```
SHOW TABLES FROM SCHEMA dev.s1 LIKE '%view' LIMIT 1;

 database_name | schema_name |    table_name     | table_type |              table_acl               | remarks | owner | last_altered_time | last_modified_time | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+--------------------------------------+---------+-------+-------------------+--------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | {alice=arwdRxtDPA/alice,bob=d/alice} |         | alice |                   |                    |            | LATE BINDING VIEW
```

# AFFICHER LE MODÈLE
<a name="r_SHOW_TEMPLATE"></a>

Affiche la définition complète d'un modèle, y compris le nom complet (base de données, schéma et nom du modèle) et tous les paramètres. Le résultat est une instruction CREATE TEMPLATE valide que vous pouvez utiliser pour recréer le modèle ou créer un modèle similaire avec des modifications. 

Pour plus d'informations sur la création de modèles, consultez[CRÉER UN MODÈLE](r_CREATE_TEMPLATE.md). 

## Autorisations requises
<a name="r_SHOW_TEMPLATE-privileges"></a>

Pour afficher la définition d'un modèle, vous devez disposer de l'un des éléments suivants :
+ Privilèges de superutilisateur
+ Privilège USAGE sur le modèle et privilège USAGE sur le schéma contenant le modèle

## Syntaxe
<a name="r_SHOW_TEMPLATE-synopsis"></a>

```
SHOW TEMPLATE [database_name.][schema_name.]template_name;
```

## Parameters
<a name="r_SHOW_TEMPLATE-parameters"></a>

 *database\$1name*   
(Facultatif) Nom de la base de données dans laquelle le modèle est créé. Si elle n'est pas spécifiée, la base de données actuelle est utilisée. 

 *nom\$1schéma*   
(Facultatif) Nom du schéma dans lequel le modèle est créé. S'il n'est pas spécifié, le modèle est recherché dans le chemin de recherche actuel. 

 *nom\$1modèle*   
Nom du modèle. 

## Exemples
<a name="r_SHOW_TEMPLATE-examples"></a>

Voici un exemple de sortie SHOW TEMPLATE pour le modèle `test_template` :

```
CREATE TEMPLATE test_template FOR COPY AS NOLOAD DELIMITER ',' ENCODING UTF16 ENCRYPTED;
```

```
SHOW TEMPLATE test_template;

CREATE OR REPLACE TEMPLATE dev.public.test_template FOR COPY AS ENCRYPTED NOLOAD ENCODING UTF16 DELIMITER ',';
```

L'exemple suivant crée un modèle `demo_template` dans le schéma`demo_schema`.

```
CREATE OR REPLACE TEMPLATE demo_schema.demo_template FOR COPY AS
ACCEPTANYDATE ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY' EXPLICIT_IDS ROUNDEC
TIMEFORMAT  AS 'DD.MM.YYYY HH:MI:SS' TRUNCATECOLUMNS NULL  AS 'null_string';
```

```
SHOW TEMPLATE demo_schema.demo_template;

CREATE OR REPLACE TEMPLATE dev.demo_schema.demo_template FOR COPY AS TRUNCATECOLUMNS NULL 'null_string' EXPLICIT_IDS TIMEFORMAT 'DD.MM.YYYY HH:MI:SS' ACCEPTANYDATE ROUNDEC ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY';
```

# AFFICHER LES MODÈLES
<a name="r_SHOW_TEMPLATES"></a>

Affiche la liste des modèles d'un schéma, ainsi que leurs attributs.

Chaque ligne de sortie comprend le nom du modèle, l'identifiant du modèle, le type de modèle, le propriétaire du modèle, le nom de la base de données, le nom du schéma, l'heure de création, l'heure de dernière modification et la dernière modification par. 

Pour obtenir des informations complètes sur le modèle, y compris les paramètres du modèle, voir[MODÈLE SYS\$1REDSHIFT\$1](SYS_REDSHIFT_TEMPLATE.md).

## Autorisations requises
<a name="r_SHOW_TEMPLATES-privileges"></a>

Pour afficher les modèles dans un schéma Amazon Redshift, vous devez disposer de l'un des éléments suivants :
+ Privilèges de superutilisateur
+ Privilège USAGE sur le schéma contenant les modèles

## Syntaxe
<a name="r_SHOW_TEMPLATES-synopsis"></a>

```
SHOW TEMPLATES FROM SCHEMA [database_name.]schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ];
```

## Parameters
<a name="r_SHOW_TEMPLATES-parameters"></a>

 *database\$1name*   
(Facultatif) Nom de la base de données contenant les modèles à répertorier. Si ce n'est pas le cas, utilise la base de données actuelle.

 *nom\$1schéma*   
Nom du schéma qui contient les modèles à répertorier. 

 *filter\$1pattern*   
(Facultatif) Expression de caractères UTF-8 valide avec un modèle correspondant aux noms des modèles. L’option LIKE effectue une mise en correspondance sensible à la casse qui prend en charge les métacaractères de mise en correspondance de modèle suivants :      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_SHOW_TEMPLATES.html)
Si *filter\$1pattern* ne contient pas de métacaractères, le modèle représente uniquement la chaîne elle-même ; dans ce cas, LIKE a la même fonction que l’opérateur d’égalité. 

 *row\$1limit*   
Nombre maximal de lignes à renvoyer. La plage valide est comprise entre 0 et la limite du modèle sur le cluster (la valeur par défaut est 1000).

## Exemples
<a name="r_SHOW_TEMPLATES-examples"></a>

```
SHOW TEMPLATES FROM SCHEMA s1;

 template_name          | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by
------------------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 template_maxerror      |      107685 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:10.514076 | 2025-12-16 19:31:10.514076 |              100
 json_template          |      107687 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:33.229566 | 2025-12-16 19:31:33.229567 |              100
 noload_template        |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
 csv_delimiter_template |      107688 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:42.354044 | 2025-12-16 19:31:42.354045 |              100
```

```
SHOW TEMPLATES FROM SCHEMA dev.s1 LIKE '%template' LIMIT 1;

 template_name  | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by 
-----------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 noload_template |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
```

# SHOW VIEW
<a name="r_SHOW_VIEW"></a>

Affiche la définition d’une vue, y compris pour les vues matérialisées et les vues à liaison tardive. Vous pouvez utiliser la sortie de l’instruction SHOW VIEW pour recréer la vue. 

## Syntaxe
<a name="r_SHOW_VIEW-synopsis"></a>

```
SHOW VIEW [schema_name.]view_name 
```

## Parameters
<a name="r_SHOW_VIEW-parameters"></a>

 *nom\$1schéma*   
(Facultatif) Nom du schéma associé. 

 *view\$1name*   
Nom de la vue à afficher. 

## Exemples
<a name="r_SHOW_VIEW-examples"></a>

 Voici la définition de vue pour la vue `LA_Venues_v`.

```
create view LA_Venues_v as select * from venue where venuecity='Los Angeles';
```

Voici un exemple de la commande SHOW VIEW et de sa sortie pour la vue définie ci-dessus.

```
show view LA_Venues_v;
```

```
SELECT venue.venueid,
venue.venuename,
venue.venuecity,
venue.venuestate,
venue.venueseats
FROM venue WHERE ((venue.venuecity)::text = 'Los Angeles'::text);
```

Voici la définition de vue pour la vue `public.Sports_v` dans le schéma `public`.

```
create view public.Sports_v as select * from category where catgroup='Sports';
```

Voici un exemple de la commande SHOW VIEW et de sa sortie pour la vue définie ci-dessus.

```
show view public.Sports_v;
```

```
SELECT category.catid,
category.catgroup,
category.catname,
category.catdesc
FROM category WHERE ((category.catgroup)::text = 'Sports'::text);
```

# START TRANSACTION
<a name="r_START_TRANSACTION"></a>

Synonyme de la fonction BEGIN. 

Consultez [BEGIN](r_BEGIN.md). 

# TRUNCATE
<a name="r_TRUNCATE"></a>

Supprime toutes les lignes d’une table sans faire une analyse de table : cette opération est une alternative plus rapide pour une opération DELETE non qualifiée. Pour exécuter une commande TRUNCATE, des autorisations TRUNCATE TABLE ont dû vous être accordées, vous devez être le propriétaire de la table ou être un super-utilisateur. Pour accorder les autorisations de tronquer une table, utilisez la commande [GRANT](r_GRANT.md).

TRUNCATE est beaucoup plus efficace que DELETE et ne requiert ni opération VACUUM ni opération ANALYZE. Cependant, sachez que TRUNCATE valide la transaction dans laquelle l’opération est exécutée.

## Syntaxe
<a name="r_TRUNCATE-synopsis"></a>

```
TRUNCATE [ TABLE ] table_name
```

La commande fonctionne également sur une vue matérialisée.

```
TRUNCATE materialized_view_name
```

## Parameters
<a name="r_TRUNCATE-parameters"></a>

TABLE   
Mot-clé facultatif. 

 *table\$1name*   
Table temporaire ou permanente. Seul le propriétaire de la table ou un super-utilisateur peut tronquer une table.   
Vous pouvez tronquer quelque table que ce soit, y compris les tables référencées dans des contraintes de clé étrangère.   
Vous n’avez pas besoin d’exécuter une opération VACUUM sur une table après l’avoir tronquée. 

 *materialized\$1view\$1name*   
Vue matérialisée.  
Vous pouvez tronquer une vue matérialisée utilisée pour [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md). 

## Notes d’utilisation
<a name="r_TRUNCATE_usage_notes"></a>
+  La commande TRUNCATE valide la transaction dans laquelle elle est exécutée ; par conséquent, vous ne pouvez pas annuler une opération TRUNCATE et une commande TRUNCATE peut valider les autres opérations quand elle se valide elle-même. 
+ Les opérations TRUNCATE sont verrouillées exclusivement lorsqu’elles sont exécutées sur Amazon Redshift, des vues matérialisées en streaming connectées à l’un des éléments suivants :
  +  Un flux de données Amazon Kinesis 
  +  Une rubrique Amazon Managed Streaming pour Apache Kafka 
  +  Un flux externe pris en charge, tel qu’une rubrique Confluent Cloud Kafka 

  Pour plus d’informations, consultez [Ingestion en streaming vers une vue matérialisée](materialized-view-streaming-ingestion.md).

## Exemples
<a name="r_TRUNCATE-examples"></a>

Utilisez la commande TRUNCATE pour supprimer toutes les lignes de la table CATEGORY : 

```
truncate category;
```

Essayez d’annuler une opération TRUNCATE : 

```
begin;

truncate date;

rollback;

select count(*) from date;
count
-------
0
(1 row)
```

La table DATE demeure vide après la commande ROLLBACK, car la commande TRUNCATE s’est validée automatiquement. 

L’exemple suivant utilise la commande TRUNCATE pour supprimer toutes les lignes d’une vue matérialisée. 

```
truncate my_materialized_view;
```

Elle supprime tous les enregistrements de la vue matérialisée et laisse la vue matérialisée et son schéma intacts. Dans la requête, le nom de la vue matérialisée est un exemple.

# UNLOAD
<a name="r_UNLOAD"></a>


|  | 
| --- |
| Le chiffrement côté client pour les commandes COPY et UNLOAD ne sera plus ouvert aux nouveaux clients à compter du 30 avril 2025. Si vous avez utilisé le chiffrement côté client avec les commandes COPY et UNLOAD au cours des 12 mois précédant le 30 avril 2025, vous pouvez continuer à utiliser le chiffrement côté client avec les commandes COPY ou UNLOAD jusqu’au 30 avril 2026. Après le 30 avril 2026, vous ne pourrez plus utiliser le chiffrement côté client pour COPY et UNLOAD. Nous vous recommandons de passer au chiffrement côté serveur pour COPY et UNLOAD dès que possible. Si vous utilisez déjà le chiffrement côté serveur pour COPY et UNLOAD, il n’y a aucun changement et vous pouvez continuer à l’utiliser sans modifier vos requêtes. Pour plus d’informations sur le chiffrement pour COPY et UNLOAD, consultez le paramètre ENCRYPTED ci-dessous.  | 

Décharge le résultat d’une requête dans un ou plusieurs fichiers texte, JSON ou Apache Parquet dans Amazon S3, à l’aide d’un chiffrement côté serveur Amazon S3 (SSE-S3). Vous pouvez également spécifier un chiffrement côté serveur avec une clé AWS Key Management Service (SSE-KMS).

Par défaut, le fichier déchargé est au format texte délimité par une barre verticale ( `|` ).

Vous pouvez gérer la taille des fichiers sur Amazon S3 et, par extension, le nombre de fichiers, en définissant le paramètre MAXFILESIZE. Assurez-vous que les plages d’adresses IP S3 sont ajoutées à votre liste des autorisations. Pour plus d’informations sur les plages d’adresses IP S3 requises, consultez [Isolement de réseau](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation).

Vous pouvez transférer les résultats d’une requête Amazon Redshift vers le lac de données Amazon S3 dans Apache Parquet, un format de stockage en colonnes ouvert et efficace dédié à l’analyse. Le format Parquet est jusqu’à deux fois plus rapide à décharger et consomme jusqu’à six fois mois de stockage dans Amazon S3, en comparaison avec les formats texte. Cela vous permet de sauvegarder la transformation et l’enrichissement des données que vous avez faits dans Amazon S3 dans votre lac de données Amazon S3 dans un format ouvert. Vous pouvez ensuite analyser vos données avec Redshift Spectrum et d'autres AWS services tels qu'Amazon Athena, Amazon EMR et Amazon AI. SageMaker 

Pour en savoir plus sur l’utilisation de la commande UNLOAD et pour voir des exemples de scénarios, consultez [Déchargement de données dans Amazon Redshift](c_unloading_data.md).

## Privilèges et autorisations nécessaires
<a name="r_UNLOAD-permissions"></a>

Pour que la commande UNLOAD aboutisse, il est nécessaire de disposer au moins du privilège SELECT sur les données de la base de données, ainsi que de l’autorisation d’écrire à l’emplacement Amazon S3. Pour plus d'informations sur les autorisations d'accès aux AWS ressources pour la commande UNLOAD, consultez[Autorisations d'accès à d'autres AWS ressources](copy-usage_notes-access-permissions.md).

Pour appliquer des autorisations de moindre privilège, suivez ces recommandations afin de n’accorder des autorisations, selon les besoins, qu’à l’utilisateur exécutant la commande.
+ L’utilisateur doit disposer du privilège SELECT sur les données. Pour plus d’informations sur la limitation des privilèges de base de données, consultez [GRANT](r_GRANT.md).
+ L’utilisateur doit disposer d’une autorisation pour assumer le rôle IAM afin d’écrire dans le compartiment Amazon S3 de votre Compte AWS. Pour restreindre l’accès à un utilisateur de base de données afin qu’il puisse assumer un rôle, consultez la section [Restreindre l’accès aux rôles IAM](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service-database-users.html) dans le *Guide de gestion Amazon Redshift*.
+ L’utilisateur a besoin d’un accès au compartiment Amazon S3. Pour restreindre les autorisations à l’aide d’une stratégie de compartiment Amazon S3, consultez [Stratégies de compartiment pour Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*.

## Syntaxe
<a name="r_UNLOAD-synopsis"></a>

```
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
authorization
[ option, ...] 

where authorization is
IAM_ROLE { default | 'arn:aws:iam::<Compte AWS-id-1>:role/<role-name>[,arn:aws:iam::<Compte AWS-id-2>:role/<role-name>][,...]' }
            
where option is
| [ FORMAT [ AS ] ] CSV | PARQUET | JSON
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| ROWGROUPSIZE [AS] size [ MB | GB ]
| REGION [AS] 'aws-region' }
| EXTENSION 'extension-name'
```

## Parameters
<a name="unload-parameters"></a>

(’*instruction\$1select*’)   
Requête SELECT. Les résultats de la requête sont déchargés. Dans la plupart des cas, il est utile de décharger les données dans un ordre trié en spécifiant une clause ORDER BY dans la requête. Cette approche économise le temps nécessaire au tri des données lors de leur rechargement.   
La requête doit être placée entre guillemets simples comme illustré ci-après :   

```
('select * from venue order by venueid')
```
Si votre requête contient des guillemets (par exemple pour insérer les valeurs littérales), placez le littéral entre deux ensembles de guillemets simples. Vous devez également joindre la requête entre guillemets simples :   

```
('select * from venue where venuestate=''NV''')
```

TO ’s3://*object-path/name-prefix*’   
Chemin complet, incluant le nom du compartiment, vers l’emplacement dans Amazon S3 où Amazon Redshift écrit les objets de fichier de sortie, y compris le fichier manifeste si MANIFEST est spécifié. Les noms d’objet sont préfixés par *name-prefix*. Si vous utilisez `PARTITION BY`, une barre oblique (/) est automatiquement ajoutée à la fin de la valeur *name-prefix* si nécessaire. Pour plus de sécurité, UNLOAD se connecte à Amazon S3 via une connexion HTTPS. Par défaut, UNLOAD écrit un ou plusieurs fichiers par tranche. UNLOAD ajoute un numéro de tranche et un numéro de partie au préfixe du nom spécifié comme suit :  
`<object-path>/<name-prefix><slice-number>_part_<part-number>`.   
Si MANIFEST est spécifié, le fichier manifeste est écrit comme suit :  
`<object_path>/<name_prefix>manifest`.   
Si PARALLEL est défini sur OFF, les fichiers de données sont écrits comme suit :  
`<object_path>/<name_prefix><part-number>`.   
UNLOAD crée automatiquement les fichiers chiffrés à l’aide du chiffrement côté serveur Amazon S3, dont le fichier manifeste si MANIFEST est utilisé. La commande COPY lit automatiquement les fichiers chiffrés côté serveur pendant l’opération de chargement. Vous pouvez télécharger en toute transparence les fichiers chiffrés côté serveur à partir de votre compartiment à l’aide de la console de gestion ou de l’API Amazon S3. Pour plus d’informations, consultez [Protection des données à l’aide du chiffrement côté serveur](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html).   
La commande REGION est obligatoire lorsque le compartiment Amazon S3 ne se trouve pas dans la même Région AWS que la base de données Amazon Redshift. 

*authorization*  
La commande UNLOAD a besoin de l’autorisation d’écrire des données dans Amazon S3. La commande UNLOAD utilise les mêmes paramètres que ceux utilisés par la commande COPY pour l’autorisation. Pour plus d’informations, consultez [Paramètres d’autorisation](copy-parameters-authorization.md) dans la référence de syntaxe de la commande COPY.

IAM\$1ROLE \$1par défaut \$1 'arn:aws:iam : :role/ '*<Compte AWS-id-1>**<role-name>*   <a name="unload-iam"></a>
Utilisez le mot clé par défaut pour qu’Amazon Redshift utilise le rôle IAM défini comme rôle par défaut et associé au cluster lorsque la commande UNLOAD est exécutée.  
Utilisez l’Amazon Resource Name (ARN) d’un rôle IAM que votre cluster utilise pour l’authentification et l’autorisation. Si vous spécifiez IAM\$1ROLE, vous ne pouvez pas utiliser ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY, SESSION\$1TOKEN ni CREDENTIALS. IAM\$1ROLE peut être chaîné. Pour en savoir plus, consultez [Chaînage des rôles IAM](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles) dans le *Guide de gestion Amazon Redshift*.

[ FORMAT [AS] ] CSV \$1 PARQUET \$1 JSON  <a name="unload-csv"></a>
Mots-clés pour spécifier le format de déchargement qui remplace le format par défaut.   
Lorsque CSV est utilisé, décharge vers un fichier texte au format CSV en utilisant une virgule (,) comme délimiteur par défaut. Si un champ contient des délimiteurs, des guillemets doubles, des sauts de ligne ou des retours chariot, le champ du fichier déchargé est placé entre des guillemets doubles. Un caractère de guillemets doubles dans un champ de données est échappé par un caractère de guillemets doubles supplémentaires. Quand aucune ligne n’est déchargée, Amazon Redshift peut écrire des objets Amazon S3 vides.  
Lorsque PARQUET est utilisé, décharge dans un fichier au format Apache Parquet version 1.0. Par défaut, chaque groupe de lignes est compressé à l’aide de la compression SNAPPY. Pour plus d’informations sur le format Apache Parquet, voir [Parquet](https://parquet.apache.org/).   
En cas d’utilisation de JSON, le fichier est déchargé dans un fichier JSON dont chaque ligne contient un objet JSON, représentant un enregistrement complet dans le résultat de la requête. Amazon Redshift prend en charge l’écriture de JSON imbriqué lorsque le résultat de la requête contient des colonnes SUPER. Pour créer un objet JSON valide, le nom de chaque colonne de la requête doit être unique. Dans le fichier JSON, les valeurs booléennes sont déchargées en tant que `t` ou `f`, et les valeurs NULL sont déchargées en tant que `null`. Quand aucune ligne n’est déchargée, Amazon Redshift n’écrit pas d’objets Amazon S3.  
Les mots-clés FORMAT et AS sont facultatifs. Vous ne pouvez pas utiliser le format CSV avec ESCAPE, FIXEDWIDTH ou ADDQUOTES. Vous ne pouvez pas utiliser PARQUET avec DELIMITER, FIXEDWIDTH, ADDQUOTES, ESCAPE, NULL AS, HEADER, GZIP ou ZSTD. BZIP2 PARQUET with ENCRYPTED n'est pris en charge qu'avec le chiffrement côté serveur à l'aide d'une AWS Key Management Service clé (SSE-KMS). Vous ne pouvez pas utiliser JSON avec DELIMITER, HEADER, FIXEDWIDTH, ADDQUOTES, ESCAPE ou NULL AS.

PARTITION BY (*nom\$1colonne* [, ... ]) [INCLUDE]  <a name="unload-partitionby"></a>
Spécifie les clés de partition pour l’opération de déchargement. UNLOAD partitionne automatiquement les fichiers de sortie dans des dossiers de partition en fonction des valeurs de clé de partition, conformément à la convention Apache Hive. Par exemple, un fichier Parquet pour l’année de partition 2019 et le mois de septembre a le préfixe suivant : `s3://amzn-s3-demo-bucket/my_prefix/year=2019/month=September/000.parquet`.   
La valeur de *nom\$1colonne* doit être une colonne dans les résultats de requête déchargés.   
Si vous spécifiez PARTITION BY avec l’option Inclure, les colonnes de partition ne sont pas supprimées des fichiers déchargés.   
Amazon Redshift ne prend pas en charge les littéraux de chaîne dans les clauses PARTITION BY.

MANIFEST [ VERBOSE ]  
Crée un fichier manifeste qui répertorie explicitement les détails des fichiers de données créés par le processus UNLOAD. Le manifeste est un fichier texte au format JSON qui répertorie l’URL de chaque fichier écrit sur Amazon S3.   
Si MANIFEST est spécifié avec l’option VERBOSE, le manifeste inclut les informations suivantes :   
+ Les noms des colonnes et les types de données, et pour les types de données CHAR, VARCHAR ou NUMERIC, les dimensions de chaque colonne. Pour les types de données CHAR et VARCHAR, la dimension est la longueur. Pour un type de données DECIMAL ou NUMERIC, les dimensions sont la précision et l’échelle. 
+ Le nombre de lignes déchargées dans chaque fichier. Si l’option HEADER est spécifiée, le nombre de lignes inclut la ligne d’en-tête. 
+ La taille de fichier totale de tous les fichiers déchargés et le nombre total de lignes déchargées dans tous les fichiers. Si l’option HEADER est spécifiée, le nombre de lignes inclut les lignes d’en-tête. 
+ L’auteur. L’auteur est toujours « Amazon Redshift ».
Vous pouvez spécifier VERBOSE uniquement après MANIFEST.   
Le fichier manifeste est écrit sur le même préfixe de chemin Amazon S3 que les fichiers de déchargement au format `<object_path_prefix>manifest`. Par exemple, si UNLOAD spécifie le préfixe de chemin Amazon S3 « `s3://amzn-s3-demo-bucket/venue_` », l’emplacement du fichier manifeste est « `s3://amzn-s3-demo-bucket/venue_manifest` ».

HEADER  
Ajoute une ligne d’en-tête contenant des noms de colonne au début de chaque fichier de sortie. Les options de transformation de texte, comme CSV, DELIMITER, ADDQUOTES et ESCAPE, s’appliquent également à la ligne d’en-tête. Vous ne pouvez pas utiliser HEADER avec FIXEDWIDTH.

DELIMITER AS ’*caractère\$1délimiteur*’   
Spécifie un caractère ASCII unique utilisé pour séparer les champs du fichier de sortie, tel qu’une barre verticale (\$1), une virgule (,) ou une tabulation (\$1t). Le délimiteur par défaut pour les fichiers texte est un caractère de barre verticale. Le délimiteur par défaut pour les fichiers CSV est un caractère de virgule. Le mot-clé AS est facultatif. Vous ne pouvez pas utiliser DELIMITER avec FIXEDWIDTH. Si les données contiennent le caractère délimiteur, vous devez spécifier l’option ESCAPE pour insérer une séquence d’échappement devant le délimiteur ou utiliser ADDQUOTES pour placer les données entre guillemets doubles. Vous pouvez également spécifier un délimiteur qui se ne trouve pas dans les données.

FIXEDWIDTH ’*fixedwidth\$1spec*’   
Décharge les données dans un fichier où la largeur de chaque colonne est une longueur fixe, plutôt que séparée par un délimiteur. *fixedwidth\$1spec* est une chaîne qui spécifie le nombre de colonnes et leur largeur. Le mot-clé AS est facultatif. Comme FIXEDWIDTH ne tronque pas les données, la spécification de chaque colonne dans l’instruction UNLOAD doit être au moins aussi longue que la longueur de l’entrée la plus longue de cette colonne. Le format de *fixedwidth\$1spec* est présenté ci-dessous :   

```
'colID1:colWidth1,colID2:colWidth2, ...'
```
Vous ne pouvez pas utiliser FIXEDWIDTH avec DELIMITER ou HEADER.

ENCRYPTED [AUTO]  <a name="unload-parameters-encrypted"></a>
Spécifie que les fichiers de sortie sur Amazon S3 sont chiffrés à l’aide d’un chiffrement côté serveur Amazon S3. Si MANIFEST est spécifié, le fichier manifeste est également chiffré. Pour de plus amples informations, veuillez consulter [Déchargement de fichiers de données chiffrés](t_unloading_encrypted_files.md). Si vous ne spécifiez pas le paramètre ENCRYPTED, UNLOAD crée automatiquement des fichiers chiffrés à l'aide du chiffrement côté serveur Amazon S3 avec des clés de chiffrement AWS gérées (SSE-S3).   
Pour ENCRYPTED, vous souhaiterez peut-être décharger sur Amazon S3 en utilisant le chiffrement côté serveur avec une AWS KMS clé (SSE-KMS). Le cas échéant, utilisez le paramètre [KMS_KEY_ID](#unload-parameters-kms-key-id) pour fournir l’ID de clé. Vous ne pouvez pas utiliser le paramètre [Utilisation du paramètre CREDENTIALS](copy-parameters-authorization.md#copy-credentials) avec le paramètre KMS\$1KEY\$1ID. Si vous exécutez une commande UNLOAD pour les données à l’aide de KMS\$1KEY\$1ID, vous pouvez effectuer une opération COPY pour les mêmes données sans spécifier de clé.   
Si ENCRYPTED AUTO est utilisée, la commande UNLOAD extrait la clé de AWS KMS chiffrement par défaut sur la propriété du compartiment Amazon S3 cible et chiffre les fichiers écrits sur Amazon S3 avec cette clé. AWS KMS Si le compartiment ne possède pas la clé de AWS KMS chiffrement par défaut, UNLOAD crée automatiquement des fichiers chiffrés à l'aide du chiffrement côté serveur Amazon Redshift AWS avec des clés de chiffrement gérées (SSE-S3). Vous ne pouvez pas utiliser cette option avec KMS\$1KEY\$1ID, MASTER\$1SYMMETRIC\$1KEY ou CREDENTIALS contenant master\$1symmetric\$1key. 

KMS\$1KEY\$1ID ’*id\$1clé*’  <a name="unload-parameters-kms-key-id"></a>
Spécifie l'ID de clé d'une clé AWS Key Management Service (AWS KMS) à utiliser pour chiffrer les fichiers de données sur Amazon S3. Pour plus d'informations, voir [Qu'est-ce que c'est AWS Key Management Service ?](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) Si vous spécifiez KMS\$1KEY\$1ID, vous devez également spécifier le paramètre [ENCRYPTED](#unload-parameters-encrypted). Si vous spécifiez KMS\$1KEY\$1ID, vous ne pouvez pas utiliser le paramètre CREDENTIALS. Utilisez [Utilisation du paramètre IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role) ou [Utilisation des paramètres ACCESS\$1KEY\$1ID et SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id) à la place. 

BZIP2   
Décharge les données sur un ou plusieurs fichiers compressé bzip2 par tranche. Chaque fichier résultant est ajouté avec une extension `.bz2`. 

GZIP   
Décharge les données sur un ou plusieurs fichiers compressé gzip par tranche. Chaque fichier résultant est ajouté avec une extension `.gz`. 

ZSTD   
Décharge les données sur un ou plusieurs fichiers compressé Zstandard par tranche. Chaque fichier résultant est ajouté avec une extension `.zst`. 

ADDQUOTES   
Place entre guillemets chaque champ de données déchargées, de telle sorte qu’Amazon Redshift puisse décharger les valeurs de données qui contiennent le délimiteur lui-même. Par exemple, si le délimiteur est une virgule, vous pouvez décharger et recharger les données suivantes avec succès :   

```
 "1","Hello, World" 
```
Sans les guillemets ajoutés, la chaîne `Hello, World` serait analysée comme deux champs distincts.  
Certains formats de sortie ne prennent pas en charge ADDQUOTES.  
Si vous utilisez ADDQUOTES, vous devez spécifier REMOVEQUOTES dans la commande COPY si vous rechargez les données.

NULL AS ’*chaîne\$1null*’   
Spécifie une chaîne qui représente une valeur null dans les fichiers de déchargement. Si cette option est utilisée, tous les fichiers de sortie contiennent la chaîne spécifiée à la place des valeurs null trouvées dans les données sélectionnées. Si cette option n’est pas spécifiée, les valeurs null sont déchargées en tant que :   
+ Chaînes de longueur nulle pour la sortie délimitée 
+ Chaînes d’espaces blancs pour la sortie de largeur fixe
Si une chaîne nulle a été spécifiée pour un déchargement de largeur fixe et que la largeur d’une colonne de sortie est inférieure à celle de la chaîne nulle, le comportement est le suivant :   
+ Un champ vide est généré pour les colonnes autres que les colonnes de caractères 
+ Une erreur est rapportée pour les colonnes de caractères 
Contrairement à d’autres types de données où une chaîne définie par l’utilisateur représente une valeur nulle, Amazon Redshift exporte les colonnes de données SUPER en utilisant le format JSON et la représente comme une valeur nulle, comme déterminé par le format JSON. Par conséquent, les colonnes de données SUPER ignorent l'option NULL [AS] utilisée dans les commandes UNLOAD.

ESCAPE   
Pour les colonnes CHAR et VARCHAR des fichiers de déchargement délimités, un caractère d’échappement (`\`) est placé devant toutes les occurrences des caractères suivants :  
+ Saut de ligne : `\n`
+ Retour chariot: `\r`
+ Délimiteur spécifié pour les données déchargées. 
+ Caractère d’échappement : `\`
+ Guillemet : `"` ou `'` (si ESCAPE et ADDQUOTES sont tous deux spécifiés dans la commande UNLOAD).
Si vous avez chargé vos données à l’aide d’une commande COPY et de l’option ESCAPE, vous devez également spécifier l’option ESCAPE avec votre commande UNLOAD pour générer le fichier de sortie réciproque. De même, si vous utilisez UNLOAD avec l’option ESCAPE, vous devez utiliser ESCAPE lorsque vous exécutez la commande COPY sur les mêmes données.

ALLOWOVERWRITE   <a name="allowoverwrite"></a>
Par défaut, UNLOAD échoue s’il trouve des fichiers qu’il pourrait remplacer. Si ALLOWOVERWRITE est spécifié, UNLOAD remplace les fichiers existants, y compris le fichier manifeste. 

CLEANPATH  <a name="cleanpath"></a>
L’option CLEANPATH supprime les fichiers existants situés dans le chemin d’accès Amazon S3 spécifié dans la clause TO avant de décharger les fichiers à l’emplacement spécifié.   
Si vous incluez la clause PARTITION BY, les fichiers existants sont supprimés uniquement des dossiers de partition pour recevoir les nouveaux fichiers générés par l’opération UNLOAD.  
Vous devez bénéficier d’une autorisation `s3:DeleteObject` sur le compartiment Amazon S3. Pour obtenir des informations, consultez [Politiques et autorisations dans Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html) dans le *Guide de l’utilisateur Amazon Simple Storage Service*. Les fichiers que vous supprimez à l’aide de l’option CLEANPATH sont définitivement supprimés et ne peuvent pas être récupérés. Si la gestion des versions est activée dans le compartiment Amazon S3 cible, UNLOAD avec l’option CLEANPATH ne supprime pas les versions précédentes des fichiers.  
Vous ne pouvez pas spécifier l’option CLEANPATH si vous spécifiez l’option ALLOWOVERWRITE.

PARALLEL   <a name="unload-parallel"></a>
Par défaut, UNLOAD écrit les données en parallèle dans plusieurs fichiers, selon le nombre de tranches du cluster. L’option par défaut est ON ou TRUE. Si PARALLEL a la valeur OFF ou FALSE, UNLOAD écrit en série dans un ou plusieurs fichiers de données, triés de manière absolue selon la clause ORDER BY, si elle est utilisée. La taille maximale d’un fichier de données est de 6,2 Go. Ainsi, par exemple, si vous déchargez 13,4 Go de données, UNLOAD crée les trois fichiers suivants.  

```
s3://amzn-s3-demo-bucket/key000    6.2 GB
s3://amzn-s3-demo-bucket/key001    6.2 GB
s3://amzn-s3-demo-bucket/key002    1.0 GB
```
La commande UNLOAD est conçue pour utiliser le traitement parallèle. Nous vous recommandons de laisser PARALLEL activé dans la plupart des cas, surtout si les fichiers sont utilisés pour charger les tables à l’aide d’une commande COPY.

MAXFILESIZE [AS] max-size [ Mo \$1 Go ]   <a name="unload-maxfilesize"></a>
Spécifie la taille maximale des fichiers créés par UNLOAD dans Amazon S3. Spécifiez une valeur décimale comprise entre 5 Mo et 6,2 Go. Le mot-clé AS est facultatif. L’unité par défaut est les Mo. Si MAXFILESIZE n’est pas spécifié, la taille maximale de fichier par défaut est de 6,2 Go. La taille du fichier manifeste, s’il est utilisé, n’est pas affectée par MAXFILESIZE.

ROWGROUPSIZE [AS] size [ MB \$1 GB ]   <a name="unload-rowgroupsize"></a>
Spécifie la taille des groupes de lignes. Le choix d’une taille supérieure peut réduire le nombre de groupes de lignes, réduisant ainsi la quantité de communication réseau. Spécifiez une valeur d’entier comprise entre 32 Mo et 128 Mo. Le mot-clé AS est facultatif. L’unité par défaut est les Mo.  
Si ROWGROUPSIZE n’est pas spécifié, la taille par défaut est de 32 Mo. Pour utiliser ce paramètre, le format de stockage doit être Parquet et le type de nœud doit être ra3.4xlarge, ra3.16xlarge, or dc2.8xlarge.

REGION [AS] ’*aws-region*’  <a name="unload-region"></a>
Spécifie l' Région AWS emplacement du compartiment Amazon S3 cible. REGION est requis pour effectuer le DÉCHARGEMENT dans un compartiment Amazon S3 qui ne se trouve pas dans la même Région AWS base de données Amazon Redshift.   
La valeur de *aws\$1region* doit correspondre à une AWS région répertoriée dans le tableau des [régions et points de terminaison Amazon Redshift](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region) du. *Références générales AWS*  
Par défaut, UNLOAD suppose que le compartiment Amazon S3 cible se trouve au même endroit Région AWS que la base de données Amazon Redshift.

EXTENSION ’*extension-name*’  <a name="unload-extension"></a>
Spécifie l’extension de fichier à ajouter aux noms des fichiers déchargés. Amazon Redshift n’effectuant aucune validation, vous devez vérifier que l’extension de fichier spécifiée est correcte. Si vous spécifiez une méthode de compression sans indiquer d’extension, Amazon Redshift ajoute uniquement l’extension de la méthode de compression au nom de fichier. Si vous n’indiquez pas d’extension et ne spécifiez pas de méthode de compression, Amazon Redshift n’ajoute rien au nom de fichier. 

## Notes d’utilisation
<a name="unload-usage-notes"></a>

### Utilisation d’ESCAPE pour toutes les opérations UNLOAD de texte délimité
<a name="unload-usage-escape"></a>

Lorsque vous exécutez UNLOAD à l’aide d’un délimiteur, vos données peuvent inclure ce délimiteur ou l’un des caractères répertoriés dans la description de l’option ESCAPE. Dans ce cas, vous devez utiliser l’option ESCAPE avec l’instruction UNLOAD. Si vous n’utilisez pas l’option ESCAPE avec UNLOAD, les opérations COPY suivantes qui utilisent les données déchargées peuvent échouer.

**Important**  
Nous vous recommandons vivement de toujours utiliser ESCAPE avec les deux instructions UNLOAD et COPY. Une exception s’applique si vous êtes certain que vos données ne contiennent pas de délimiteur ni d’autres caractères susceptibles d’avoir à faire l’objet d’un échappement. 

### Perte de précision pour la virgule flottante
<a name="unload-usage-floating-point-precision"></a>

Vous pouvez rencontrer une perte de précision pour les données en virgule flottante déchargées et rechargées avec succès. 

### Clause LIMIT
<a name="unload-usage-limit-clause"></a>

La requête SELECT ne peut pas utiliser une clause LIMIT dans l’instruction SELECT externe. Par exemple, l’instruction UNLOAD suivante échoue.

```
unload ('select * from venue limit 10')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

À la place, utilisez une clause LIMIT imbriquée, comme dans l’exemple suivant.

```
unload ('select * from venue where venueid in
(select venueid from venue order by venueid desc limit 10)')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Vous pouvez aussi remplir une table à l’aide de SELECT…INTO ou de CREATE TABLE AS avec une clause LIMIT, puis procéder au déchargement à partir de cette table.

### Déchargement d’une colonne avec le type de données GEOMETRY
<a name="unload-usage-geometry"></a>

Vous pouvez décharger les colonnes GEOMETRY au format texte ou CSV. Vous pouvez décharger les données GEOMETRY avec l’option `FIXEDWIDTH`. Les données sont déchargées au format hexadécimal du format EWKB. Si la taille des données EWKB est supérieure à 4 Mo, un avertissement est envoyé car les données ne pourront pas être chargées dans un table par la suite. 

### Déchargement du type de données HLLSKETCH
<a name="unload-usage-hll"></a>

Vous pouvez décharger les colonnes HLLSKETCH au format texte ou CSV. Vous pouvez décharger les données HLLSKETCH avec l’option `FIXEDWIDTH`. Les données sont déchargées au format Base64 pour les HyperLogLog esquisses denses ou au format JSON pour les esquisses HyperLogLog éparses. Pour de plus amples informations, veuillez consulter [HyperLogLog fonctions](hyperloglog-functions.md).

L’exemple suivant exporte une table contenant des colonnes HLLSKETCH dans un fichier.

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

UNLOAD ('select * from hll_table') TO 's3://amzn-s3-demo-bucket/unload/'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' ALLOWOVERWRITE CSV;
```

### Déchargement d’une colonne avec le type de données VARBYTE
<a name="unload-usage-varbyte"></a>

Vous pouvez décharger les colonnes VARBYTE au format texte ou CSV. Les données sont déchargées sous forme hexadécimale. Vous ne pouvez pas décharger les données VARBYTE avec l’option `FIXEDWIDTH`. L’option `ADDQUOTES` de UNLOAD au format CSV n’est pas prise en charge. Une colonne VARBYTE ne peut pas être une colonne PARTITIONED BY. 

### Clause FORMAT AS PARQUET
<a name="unload-parquet-usage"></a>

Tenez comptes des points suivants lorsque vous utilisez FORMAT AS PARQUET :
+ Une opération de déchargement vers Parquet n’utilise pas la compression au niveau du fichier. Chaque groupe de lignes est compressé avec SNAPPY.
+ Si MAXFILESIZE n’est pas spécifié, la taille maximale de fichier par défaut est de 6,2 Go. Vous pouvez utiliser MAXFILESIZE pour spécifier une taille de fichier de 5 Mo à 6,2 Go. La taille réelle du fichier est approximative lorsque le fichier est écrit. Elle peut donc ne pas être exactement égale au nombre que vous spécifiez.

  Pour optimiser les performances d’analyse, Amazon Redshift essaie de créer des fichiers Parquet contenant des groupes de lignes de 32 Mo de taille égale. La valeur MAXFILESIZE que vous spécifiez est automatiquement arrondie au multiple le plus proche de 32 Mo. Par exemple, si vous spécifiez MAXFILESIZE 200 MB, chaque fichier Parquet déchargé est d’environ 192 Mo (groupe de lignes de 32 Mo x 6 = 192 Mo).
+ Si une colonne utilise le format de données TIMESTAMPTZ, seules les valeurs d’horodatage sont déchargées. Les informations de fuseau horaire ne sont pas déchargées.
+ Ne spécifiez pas de préfixes de nom de fichier commençant par des caractères de soulignement (\$1) ou des points (.). Redshift Spectrum traite les fichiers qui commencent par ces caractères comme des fichiers cachés et les ignore.

### Clause PARTITION BY
<a name="unload-partitionby-usage"></a>

Tenez comptes des points suivants lorsque vous utilisez PARTITION BY :
+ Les colonnes de partition ne sont pas incluses dans le fichier de sortie.
+ Assurez-vous d’inclure des colonnes de partition dans la requête SELECT utilisée dans l’instruction UNLOAD. Vous pouvez spécifier n’importe quel nombre de colonnes de partition dans la commande UNLOAD. Cependant, une limitation exige qu’au moins une colonne autre qu’une colonne de partition fasse partie du fichier.
+ Si la valeur de clé de partition est null, Amazon Redshift décharge automatiquement ces données dans une partition par défaut appelée `partition_column=__HIVE_DEFAULT_PARTITION__`. 
+ La commande UNLOAD n’effectue pas d’appels vers un catalogue externe. Pour enregistrer vos nouvelles partitions dans le cadre de votre table externe existante, utilisez une commande distincte ALTER TABLE ... ADD PARTITION ... Vous pouvez également exécuter une commande CREATE EXTERNAL TABLE pour enregistrer les données déchargées en tant que nouvelle table externe. Vous pouvez également utiliser un AWS Glue robot pour remplir votre catalogue de données. Pour plus d’informations, consultez [Définition des analyseurs](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) dans le *Guide du développeur AWS Glue *. 
+ Si vous utilisez l’option MANIFEST, Amazon Redshift génère un seul fichier manifeste dans le dossier Amazon S3 racine.
+ Les types de données de colonne que vous pouvez utiliser comme clé de partition sont SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, BOOLEAN, CHAR, VARCHAR, DATE et TIMESTAMP. 

### Utilisation du privilège ASSUMEROLE pour accorder l’accès à un rôle IAM pour les opérations UNLOAD
<a name="unload-assumerole-privilege-usage"></a>

Pour permettre à des utilisateurs et groupes spécifiques d’accéder à un rôle IAM pour les opérations UNLOAD, un super-utilisateur peut accorder le privilège ASSUMEROLE sur un rôle IAM aux utilisateurs et aux groupes. Pour obtenir des informations, consultez [GRANT](r_GRANT.md). 

### UNLOAD ne prend pas en charge les alias de point d’accès Amazon S3
<a name="unload-usage-s3-access-point-alias"></a>

Vous ne pouvez pas utiliser d’alias de point d’accès Amazon S3 avec la commande UNLOAD. 

## Exemples
<a name="r_UNLOAD-examples"></a>

Pour voir des exemples d’utilisation de la commande UNLOAD. consultez [Exemples UNLOAD](r_UNLOAD_command_examples.md)

# Exemples UNLOAD
<a name="r_UNLOAD_command_examples"></a>

Ces exemples présentent différents paramètres de la commande UNLOAD. Les exemples de données TICKIT sont utilisés dans de nombreux exemples. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

**Note**  
Ces exemples contiennent des sauts de ligne pour faciliter la lecture. N’incluez pas de sauts de ligne, ni d’espaces dans votre chaîne *credentials-args*.

## Déchargement de VENUE sur un fichier délimité par une barre verticale (délimiteur par défaut)
<a name="unload-examples-venue"></a>

L’exemple suivant décharge la table VENUE et écrit les données sur `s3://amzn-s3-demo-bucket/unload/`: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Par défaut, UNLOAD écrit un ou plusieurs fichiers par tranche. En supposant que le cluster comporte deux nœuds avec deux tranches par nœud, l’exemple précédent crée les fichiers dans `amzn-s3-demo-bucket`:

```
unload/0000_part_00
unload/0001_part_00
unload/0002_part_00
unload/0003_part_00
```

Afin de mieux différencier les fichiers de sortie, vous pouvez inclure un préfixe dans l’emplacement. L’exemple suivant décharge la table VENUE et écrit les données sur `s3://amzn-s3-demo-bucket/unload/venue_pipe_`: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Le résultat est les quatre fichiers du dossier `unload`, en supposant encore une fois quatre tranches.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## Déchargement de la table LINEITEM dans des fichiers Parquet partitionnés
<a name="unload-examples-partitioned-parquet"></a>

L’exemple suivant décharge la table LINEITEM au format Parquet, partitionné par la colonne `l_shipdate`. 

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate);
```

En supposant que quatre tranches sont utilisées, les fichiers Parquet résultants sont partitionnés dynamiquement dans divers dossiers. 

```
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-02/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-03/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-04/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
...
```

**Note**  
Dans certains cas, la commande UNLOAD utilisait l’option INCLUDE comme indiqué dans l’instruction SQL suivante.   

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate) INCLUDE;
```
Dans ces cas, la colonne `l_shipdate` se trouve également dans les données des fichiers Parquet. Sinon, les données de colonne `l_shipdate` ne se trouvent pas dans les fichiers Parquet.

## Déchargez la table VENUE vers un fichier JSON
<a name="unload-examples-json"></a>

L’exemple suivant décharge la table VENUE et écrit les données en format JSON sur `s3://amzn-s3-demo-bucket/unload/`.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON;
```

Vous trouverez ci-dessous des exemples de lignes de la table VENUE.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

Après le déchargement au format JSON, le format du fichier est similaire au suivant.

```
{"venueid":1,"venuename":"Pinewood Racetrack","venuecity":"Akron","venuestate":"OH","venueseats":0}
{"venueid":2,"venuename":"Columbus \"Crew\" Stadium ","venuecity":"Columbus","venuestate":"OH","venueseats":0}
{"venueid":4,"venuename":"Community, Ballpark, Arena","venuecity":"Kansas City","venuestate":"KS","venueseats":0}
```

## Décharger VENUE vers un fichier CSV
<a name="unload-examples-csv"></a>

L’exemple suivant décharge la table VENUE et écrit les données en format CSV sur `s3://amzn-s3-demo-bucket/unload/`.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV;
```

Supposons que la table VENUE contienne les lignes suivantes.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

Le fichier de déchargement ressemble à ce qui suit.

```
1,Pinewood Racetrack,Akron,OH,0
2,"Columbus ""Crew"" Stadium",Columbus,OH,0
4,"Community, Ballpark, Arena",Kansas City,KS,0
```

## Décharger VENUE dans un fichier CSV à l’aide d’un délimiteur
<a name="unload-examples-csv-delimiter"></a>

L’exemple suivant décharge la table VENUE et écrit les données au format CSV en utilisant le caractère de barre verticale (\$1) comme délimiteur. Le fichier déchargé est écrit dans `s3://amzn-s3-demo-bucket/unload/`. La table VENUE de cet exemple contient le caractère de barre verticale dans la valeur de la première ligne (`Pinewood Race|track`). Il le fait pour montrer que la valeur dans le résultat est entourée de guillemets doubles. Un guillemet double est échappé par un guillemet double, et le champ entier est entouré de guillemets doubles. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV DELIMITER AS '|';
```

Supposons que la table VENUE contienne les lignes suivantes.

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-------------
      1 | Pinewood Race|track        | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

Le fichier de déchargement ressemble à ce qui suit.

```
1|"Pinewood Race|track"|Akron|OH|0
2|"Columbus ""Crew"" Stadium"|Columbus|OH|0
4|Community, Ballpark, Arena|Kansas City|KS|0
```

## Déchargement de VENUE avec un fichier manifeste
<a name="unload-examples-manifest"></a>

Pour créer un fichier manifeste, incluez l’option MANIFEST. L’exemple suivant décharger la table VENUE et écrit un fichier manifeste, ainsi que les fichiers de données, sur s3://amzn-s3-demo-bucket/venue\$1pipe\$1 : 

**Important**  
Si vous déchargez les fichiers avec l’option MANIFEST, vous devez utiliser l’option MANIFEST avec la commande COPY lorsque vous chargez les fichiers. Si vous utilisez le même préfixe pour charger les fichiers et que vous ne spécifiez pas l’option MANIFEST, la commande COPY échoue, car elle suppose que le fichier manifeste est un fichier de données.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

Le résultat est ces cinq fichiers :

```
s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00
s3://amzn-s3-demo-bucket/venue_pipe_manifest
```

Voici le contenu du fichier manifest. 

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0000_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0003_part_00"}
  ]
}
```

## Déchargement de VENUE avec MANIFEST VERBOSE
<a name="unload-examples-manifest-verbose"></a>

Lorsque vous spécifiez l’option MANIFEST VERBOSE, le fichier manifeste inclut les sections suivantes : 
+ La section `entries` répertorie le chemin Amazon S3, la taille de fichier et le nombre de lignes de chaque fichier. 
+ La section `schema` répertorie les noms de colonne, les types de données et la dimension de chaque colonne. 
+ La section `meta` montre la taille totale de fichier et le nombre total de lignes pour tous les fichiers. 

L’exemple suivant décharge la table VENUE à l’aide de l’option MANIFEST VERBOSE. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload_venue_folder/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest verbose;
```

Voici le contenu du fichier manifest.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00", "meta": { "content_length": 32295, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00", "meta": { "content_length": 32771, "record_count": 20 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00", "meta": { "content_length": 32302, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00", "meta": { "content_length": 31810, "record_count": 15 }}
  ],
  "schema": {
    "elements": [
      {"name": "venueid", "type": { "base": "integer" }},
      {"name": "venuename", "type": { "base": "character varying", 25 }},
      {"name": "venuecity", "type": { "base": "character varying", 25 }},
      {"name": "venuestate", "type": { "base": "character varying", 25 }},
      {"name": "venueseats", "type": { "base": "character varying", 25 }}
    ]
  },
  "meta": {
    "content_length": 129178,
    "record_count": 55
  },
  "author": {
    "name": "Amazon Redshift",
    "version": "1.0.0"
  }
}
```

## Déchargement de VENUE avec un en-tête
<a name="unload-examples-header"></a>

L’exemple suivant décharge VENUE avec une ligne d’en-tête.

```
unload ('select * from venue where venueseats > 75000')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
header
parallel off;
```

Voici le contenu du fichier de sortie avec une ligne d’en-tête.

```
venueid|venuename|venuecity|venuestate|venueseats
6|New York Giants Stadium|East Rutherford|NJ|80242
78|INVESCO Field|Denver|CO|76125
83|FedExField|Landover|MD|91704
79|Arrowhead Stadium|Kansas City|MO|79451
```

## Déchargement de VENUE sur des fichiers plus petits
<a name="unload-examples-maxfilesize"></a>

Par défaut, la taille maximale d’un fichier est de 6,2 Go. Si les données de déchargement sont supérieures à 6,2 Go, UNLOAD crée un nouveau fichier pour chaque segment de données de 6,2 Go. Pour créer des fichiers plus petits, incluez le paramètre MAXFILESIZE. En supposant que la taille des données de l’exemple précédent était de 20 Go, la commande UNLOAD suivante écrit 20 fichiers de 1 Go chacun.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
maxfilesize 1 gb;
```

## Déchargement de VENUE en série
<a name="unload-examples-serial"></a>

Pour décharger en série, spécifiez PARALLEL OFF. UNLOAD écrit ensuite un fichier à la fois, jusqu’à un maximum de 6,2 Go par fichier. 

L’exemple suivant décharge la table VENUE et écrit les données en série sur `s3://amzn-s3-demo-bucket/unload/`. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off;
```

Le résultat est un fichier nommé venue\$1serial\$1000. 

Si les données de déchargement sont supérieures à 6,2 Go, UNLOAD crée un nouveau fichier pour chaque segment de données de 6,2 Go. L’exemple suivant décharge la table LINEORDER et écrit les données en série sur `s3://amzn-s3-demo-bucket/unload/`. 

```
unload ('select * from lineorder')
to 's3://amzn-s3-demo-bucket/unload/lineorder_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off gzip;
```

Le résultat est la série de fichiers suivante.

```
lineorder_serial_0000.gz
lineorder_serial_0001.gz
lineorder_serial_0002.gz
lineorder_serial_0003.gz
```

Afin de mieux différencier les fichiers de sortie, vous pouvez inclure un préfixe dans l’emplacement. L’exemple suivant décharge la table VENUE et écrit les données sur `s3://amzn-s3-demo-bucket/venue_pipe_`: 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Le résultat est les quatre fichiers du dossier `unload`, en supposant encore une fois quatre tranches.

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## Chargement de VENUE à partir des fichiers de déchargement
<a name="unload-examples-load"></a>

Pour charger une table à partir d’un ensemble de fichiers de déchargement, il suffit d’inverser le processus à l’aide d’une commande COPY. L’exemple suivant crée une table, LOADVENUE, et charge la table dans les fichiers de données créés dans l’exemple précédent.

```
create table loadvenue (like venue);

copy loadvenue from 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Si vous avez utilisé l’option MANIFEST pour créer un fichier manifeste avec vos fichiers de déchargement, vous pouvez charger les données en utilisant le même fichier manifeste. Pour cela, vous utilisez une commande COPY avec l’option MANIFEST. L’exemple suivant charge les données à l’aide d’un fichier manifeste.

```
copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_pipe_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

## Déchargement de VENUE sur des fichiers chiffrés
<a name="unload-examples-unload-encrypted"></a>

L'exemple suivant décharge la table VENUE vers un ensemble de fichiers chiffrés à l'aide d'une AWS KMS clé. Si vous spécifiez un fichier manifeste avec l’option ENCRYPTED, le fichier manifeste est également chiffré. Pour plus d'informations, consultez [Déchargement de fichiers de données chiffrés](t_unloading_encrypted_files.md).

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_kms'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
kms_key_id '1234abcd-12ab-34cd-56ef-1234567890ab'
manifest
encrypted;
```

L’exemple suivant décharge la table VENUE sur un ensemble de fichiers chiffrés à l’aide d’une clé symétrique racine. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_cmk'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
encrypted;
```

## Chargement de VENUE à partir de fichiers chiffrés
<a name="unload-examples-load-encrypted"></a>

Pour charger les tables à partir d’un ensemble de fichiers qui ont été créés en utilisant UNLOAD avec l’option ENCRYPT, inversez le processus en utilisant une commande COPY. Avec cette commande, utilisez l’option ENCRYPTED et spécifiez la clé symétrique racine qui a été utilisée pour la commande UNLOAD. L’exemple suivant charge la tableau LOADVENUE à partir des fichiers de données chiffrés créés dans l’exemple précédent.

```
create table loadvenue (like venue);

copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_encrypt_manifest'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
manifest
encrypted;
```

## Déchargement des données de VENUE dans un fichier délimité par les tabulations
<a name="unload-examples-venue-tab"></a>

```
unload ('select venueid, venuename, venueseats from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t';
```

Les fichiers de données de sortie se présentent ainsi : 

```
1	Toyota Park	Bridgeview	IL	0
2	Columbus Crew Stadium	Columbus	OH	0
3	RFK Stadium	Washington	DC	0
4	CommunityAmerica Ballpark	Kansas City	KS	0
5	Gillette Stadium	Foxborough	MA	68756
...
```

## Déchargement de VENUE dans un fichier de données de largeur fixe
<a name="unload-venue-fixed-width"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_fw_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth as 'venueid:3,venuename:39,venuecity:16,venuestate:2,venueseats:6';
```

Les fichiers de données de sortie se présentent comme suit. 

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
...
```

## Déchargement de VENUE sur un ensemble de fichiers compressés GZIP délimités par une tabulation
<a name="unload-examples-venue-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t'
gzip;
```

## Déchargement de VENUE dans un fichier texte compressé par GZIP
<a name="unload-examples-venue-extension-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
extension 'txt.gz'
gzip;
```

## Déchargement des données qui contiennent un délimiteur
<a name="unload-examples-delimiter"></a>

Cet exemple utilise l’option ADDQUOTES pour décharger les données délimitées par une virgule, où certains champs de données contiennent une virgule.

D’abord, créez une table qui contient des guillemets.

```
create table location (id int, location char(64));

insert into location values (1,'Phoenix, AZ'),(2,'San Diego, CA'),(3,'Chicago, IL');
```

Puis, déchargez les données à l’aide de l’option ADDQUOTES.

```
unload ('select id, location from location')
to 's3://amzn-s3-demo-bucket/location_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter ',' addquotes;
```

Les fichiers de données déchargés se présentent ainsi : 

```
1,"Phoenix, AZ"
2,"San Diego, CA"
3,"Chicago, IL"
...
```

## Décharger les résultats d’une requête de jointure
<a name="unload-examples-join"></a>

L’exemple suivant décharge les résultats d’une requête de jointure contenant une fonction de fenêtrage. 

```
unload ('select venuecity, venuestate, caldate, pricepaid,
sum(pricepaid) over(partition by venuecity, venuestate
order by caldate rows between 3 preceding and 3 following) as winsum
from sales join date on sales.dateid=date.dateid
join event on event.eventid=sales.eventid
join venue on event.venueid=venue.venueid
order by 1,2')
to 's3://amzn-s3-demo-bucket/tickit/winsum'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Les fichiers de sortie se présentent ainsi : 

```
Atlanta|GA|2008-01-04|363.00|1362.00
Atlanta|GA|2008-01-05|233.00|2030.00
Atlanta|GA|2008-01-06|310.00|3135.00
Atlanta|GA|2008-01-08|166.00|8338.00
Atlanta|GA|2008-01-11|268.00|7630.00
...
```

## Décharger à l’aide de NULL AS
<a name="unload-examples-null-as"></a>

Par défaut, UNLOAD génère les valeurs null comme chaînes vides. Les exemples suivants montrent comment utiliser NULL AS pour remplacer les valeurs null par une chaîne de texte.

Pour ces exemples, nous ajoutons quelques valeurs null à la table VENUE.

```
update venue set venuestate = NULL
where venuecity = 'Cleveland';
```

Sélectionnez dans VENUE où VENUESTATE a la valeur null pour vérifier que les colonnes contiennent la valeur NULL.

```
select * from venue where venuestate is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
```

Maintenant, exécutez UNLOAD sur la table VENUE à l’aide de l’option NULL AS pour remplacer les valeurs null par la chaîne de caractères ’`fred`’. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

L’exemple suivant du fichier de déchargement montre que les valeurs null ont été remplacées par `fred`. Il s’avère que certaines valeurs de VENUESEATS étaient également null et qu’elles ont été remplacées par `fred`. Même si le type de données pour VENUESEATS est entier, UNLOAD convertit les valeurs en texte dans les fichiers de déchargement, puis la commande COPY les reconvertit en type entier. Si vous déchargez dans un fichier à largeur fixe, la chaîne NULL AS ne doit pas être plus grande que la largeur du champ.

```
248|Charles Playhouse|Boston|MA|0
251|Paris Hotel|Las Vegas|NV|fred
258|Tropicana Hotel|Las Vegas|NV|fred
300|Kennedy Center Opera House|Washington|DC|0
306|Lyric Opera House|Baltimore|MD|0
308|Metropolitan Opera|New York City|NY|0
  5|Gillette Stadium|Foxborough|MA|5
 22|Quicken Loans Arena|Cleveland|fred|0
101|Progressive Field|Cleveland|fred|43345
...
```

Pour charger une table à partir des fichiers de déchargement, utilisez une commande COPY avec la même option NULL AS. 

**Note**  
Si vous essayez de charger les valeurs null dans une colonne définie comme NOT NULL, la commande COPY échoue.

```
create table loadvenuenulls (like venue);

copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

Pour vérifier que les colonnes contiennent des chaînes null, et pas simplement des chaînes vides, sélectionnez LOADVENUENULLS et filtrez les valeurs null.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |

...
```

Vous pouvez exécuter une opération UNLOAD sur une table qui contient des valeurs null en utilisant le comportement par défaut NULL AS, puis copier à nouveau les données dans une table en utilisant le comportement NULL AS ; cependant, tous les champs non numériques de la table cible contiennent des chaînes vides, pas des valeurs null. Par défaut, UNLOAD convertit les chaînes null en chaînes vides (espace blanc ou longueur égale à zéro). COPY convertit les chaînes vides en NULL pour les colonnes numériques, mais insère des chaînes vides dans les colonnes non numériques. L’exemple suivant montre comment effectuer une opération UNLOAD suivi d’une opération COPY en utilisant le comportement par défaut NULL AS. 

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

Dans ce cas, lorsque vous filtrez les valeurs null, seules les lignes où VENUESEATS contenait des valeurs null. Là où VENUESTATE contenait des valeurs null dans la table (VENUE), VENUESTATE dans la table cible (LOADVENUENULLS) contient des chaînes vides.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
     251 | Paris Hotel              | Las Vegas | NV         |
...
```

Pour charger des chaînes vides dans des colonnes non numériques comme NULL, incluez les options EMPTYASNULL ou BLANKSASNULL. Les deux peuvent être utilisés.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' EMPTYASNULL;
```

Pour vérifier que les colonnes contiennent NULL, et pas seulement des espaces ou des chaînes vides, effectuez une sélection à partir de LOADVENUENULLS et filtrez les valeurs null.

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |
     ...
```

## Décharger à l’aide du paramètre ALLOWOVERWRITE
<a name="unload-examples-allowoverwrite"></a>

Par défaut, UNLOAD ne remplace pas les fichiers existants du compartiment de destination. Par exemple, si vous exécutez la même instruction UNLOAD deux fois sans modifier les fichiers du compartiment de destination, la deuxième opération UNLOAD échoue. Pour remplacer les fichiers existants, y compris le fichier manifeste, spécifiez l’option ALLOWOVERWRITE.

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest allowoverwrite;
```

## Décharger la table EVENT à l’aide des paramètres PARALLEL et MANIFEST
<a name="unload-examples-manifest-parallel"></a>

Vous pouvez décharger (UNLOAD) une table en parallèle et générer un fichier manifeste. Les fichiers de données Amazon S3 sont tous créés au même niveau et les noms présentent le modèle `0000_part_00` en suffixe. Le fichier manifeste se trouve au même niveau de dossier que les fichiers de données et présentent le texte `manifest` en suffixe. Le code SQL suivant décharge la table EVENT et crée des fichiers avec le nom de base `parallel`

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/parallel'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel on
manifest;
```

La liste de fichiers Amazon S3 se présente comme suit.

```
 Name                       Last modified                        Size                  
 parallel0000_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB  
 parallel0001_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0002_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB
 parallel0003_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 51.1 KB
 parallel0004_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.6 KB
 parallel0005_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0006_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.1 KB
 parallel0007_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 55.9 KB
 parallelmanifest       -   August 2, 2023, 14:54:39 (UTC-07:00) 886.0 B
```

Le contenu du fichier `parallelmanifest` se présente comme suit.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/parallel0000_part_00", "meta": { "content_length": 53316 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0001_part_00", "meta": { "content_length": 54704 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0002_part_00", "meta": { "content_length": 53326 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0003_part_00", "meta": { "content_length": 52356 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0004_part_00", "meta": { "content_length": 55933 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0005_part_00", "meta": { "content_length": 54648 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0006_part_00", "meta": { "content_length": 55436 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0007_part_00", "meta": { "content_length": 57272 }}
  ]
}
```

## Décharger la table EVENT à l’aide des PARALLEL OFFet MANIFEST
<a name="unload-examples-manifest-serial"></a>

Vous pouvez décharger (UNLOAD) une table en série (PARALLEL OFF) et générer un fichier manifeste. Les fichiers de données Amazon S3 sont tous créés au même niveau et les noms présentent le modèle `0000` en suffixe. Le fichier manifeste se trouve au même niveau de dossier que les fichiers de données et présentent le texte `manifest` en suffixe.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/serial'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel off
manifest;
```

La liste de fichiers Amazon S3 se présente comme suit.

```
 Name                       Last modified                        Size                  
 serial0000             -   August 2, 2023, 15:54:39 (UTC-07:00) 426.7 KB  
 serialmanifest         -   August 2, 2023, 15:54:39 (UTC-07:00) 120.0 B
```

Le contenu du fichier `serialmanifest` se présente comme suit.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/serial000", "meta": { "content_length": 436991 }}
  ]
}
```

## Décharger la table EVENT à l’aide des paramètres PARTITION BY et MANIFEST
<a name="unload-examples-manifest-partition"></a>

Vous pouvez décharger (UNLOAD) une table par partition et générer un fichier manifeste. Un dossier est créé dans Amazon S3 avec des dossiers de partition enfants, et les fichiers de données contenus dans les dossiers enfants ont un modèle de nom similaire à `0000_par_00`. Le fichier manifeste se trouve au même niveau de dossier que les dossiers enfants et se nomme `manifest`.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/partition'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
partition by (eventname)
manifest;
```

La liste de fichiers Amazon S3 se présente comme suit.

```
 Name                   Type     Last modified                        Size                  
 partition           	Folder
```

Dans le dossier `partition` se trouvent les dossiers enfants avec le nom de la partition et le fichier manifeste. Le bas de la liste des dossiers contenus dans le dossier `partition` se présente comme suit.

```
 Name                   Type      Last modified                        Size                  
 ...
 eventname=Zucchero/    Folder 
 eventname=Zumanity/    Folder 
 eventname=ZZ Top/      Folder  
 manifest          	    -	    August 2, 2023, 15:54:39 (UTC-07:00) 467.6 KB
```

Dans le dossier `eventname=Zucchero/` figurent les fichiers de données, comme ci-dessous.

```
 Name               Last modified                        Size                  
 0000_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 70.0 B
 0001_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 106.0 B
 0002_part_00	-   August 2, 2023, 15:59:15 (UTC-07:00) 70.0 B
 0004_part_00	-   August 2, 2023, 15:59:17 (UTC-07:00) 141.0 B
 0006_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 35.0 B
 0007_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 108.0 B
```

Le bas du contenu du fichier `manifest` se présente comme suit.

```
{
  "entries": [
    ...
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zucchero/007_part_00", "meta": { "content_length": 108 }},
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zumanity/007_part_00", "meta": { "content_length": 72 }}
  ]
}
```

## Décharger la table EVENT à l’aide des paramètres MAXFILESIZE, ROWGROUPSIZE et MANIFEST
<a name="unload-examples-manifest-maxsize"></a>

Vous pouvez décharger (UNLOAD) une table en parallèle et générer un fichier manifeste. Les fichiers de données Amazon S3 sont tous créés au même niveau et les noms présentent le modèle `0000_part_00` en suffixe. Les fichiers de données Parquet générés sont limités à 256 Mo et la taille des groupes de lignes est de 128 Mo. Le fichier manifeste se trouve au même niveau de dossier que les fichiers de données et présente le suffixe `manifest`.

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/eventsize'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
maxfilesize 256 MB
rowgroupsize 128 MB
parallel on
parquet
manifest;
```

La liste de fichiers Amazon S3 se présente comme suit.

```
 Name                            Type      Last modified                        Size 
 eventsize0000_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.5 KB
 eventsize0001_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0002_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.4 KB
 eventsize0003_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.0 KB
 eventsize0004_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.3 KB
 eventsize0005_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0006_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.0 KB
 eventsize0007_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.6 KB
 eventsizemanifest                 -       August 2, 2023, 17:35:21 (UTC-07:00) 958.0 B
```

Le contenu du fichier `eventsizemanifest` se présente comme suit.

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/eventsize0000_part_00.parquet", "meta": { "content_length": 25130 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0001_part_00.parquet", "meta": { "content_length": 25428 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0002_part_00.parquet", "meta": { "content_length": 25025 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0003_part_00.parquet", "meta": { "content_length": 24554 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0004_part_00.parquet", "meta": { "content_length": 25918 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0005_part_00.parquet", "meta": { "content_length": 25362 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0006_part_00.parquet", "meta": { "content_length": 25647 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0007_part_00.parquet", "meta": { "content_length": 26256 }}
  ]
}
```

# UPDATE
<a name="r_UPDATE"></a>

**Topics**
+ [Syntaxe](#r_UPDATE-synopsis)
+ [Parameters](#r_UPDATE-parameters)
+ [Notes d’utilisation](#r_UPDATE_usage_notes)
+ [Exemples d’instructions UPDATE](c_Examples_of_UPDATE_statements.md)

Met à jour les valeurs d’une ou de plusieurs Colonnes de la table lorsqu’une condition est satisfaite. 

**Note**  
La taille maximale d’une instruction SQL est de 16 Mo.

## Syntaxe
<a name="r_UPDATE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
            UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...]

[ FROM fromlist ]
[ WHERE condition ]
```

## Parameters
<a name="r_UPDATE-parameters"></a>

Clause WITH  
Clause facultative qui en spécifie une ou plusieurs *common-table-expressions*. Consultez [Clause WITH](r_WITH_clause.md). 

 *table\$1name*   
Table temporaire ou permanente. Seul le propriétaire de la table ou un utilisateur avec le privilège UPDATE sur la table peut-être mettre à jour les lignes. Si vous utilisez la clause FROM ou sélectionnez à partir de tables dans une expression ou une condition, vous devez avoir le privilège SELECT sur les tables. Vous ne pouvez pas ici donner un alias à la table ; cependant, vous pouvez spécifier un alias dans la clause FROM.   
Les tables externes d’Amazon Redshift Spectrum sont en lecture seule. Vous ne pouvez pas mettre à jour (UPDATE) une table externe.

alias  
Nom alternatif temporaire d’une table cible. Les alias sont facultatifs. Le mot-clé AS est toujours facultatif. 

SET *colonne* =   
Une ou plusieurs colonnes que vous voulez modifier. Les colonnes qui ne sont pas répertoriées conservent leurs valeurs actuelles. N’incluez pas le nom de la table dans la spécification d’une colonne cible. Par exemple, `UPDATE tab SET tab.col = 1` n’est pas valide.

 *expression*   
Expression qui définit la nouvelle valeur de la colonne spécifiée. 

DEFAULT   
Met à jour la colonne avec la valeur par défaut qui a été attribuée à la colonne dans l’instruction CREATE TABLE. 

FROM *liste\$1tables*   
Vous pouvez mettre à jour une table en faisant référence aux informations d’autres tables. Répertoriez ces autres tables dans la clause FROM ou utilisez une sous-requête dans le cadre de la condition WHERE. Les tables répertoriées dans la clause FROM peuvent avoir des alias. Si vous avez besoin d’inclure la table cible de l’instruction UPDATE dans la liste, utilisez un alias. 

WHERE *condition*   
Clause facultative qui limite les mises à jour aux lignes qui correspondent à une condition. Lorsque la condition renvoie `true`, les colonnes SET spécifiées sont mises à jour. La condition peut être un simple prédicat sur une colonne ou une condition en fonction du résultat d’une sous-requête.   
Vous pouvez nommer n’importe quelle table de la sous-requête, y compris la table cible de l’opération UPDATE. 

## Notes d’utilisation
<a name="r_UPDATE_usage_notes"></a>

Après la mise à jour d’un grand nombre de lignes dans une table : 
+ Exécuter une opération VACUUM sur la table pour récupérer de l’espace de stockage et retrier les lignes. 
+ Analysez la table pour mettre à jour les statistiques pour le planificateur de requête. 

Les jointures externes complètes, gauche et droite ne sont pas prises en charge dans la clause FROM d’une instruction UPDATE ; elles renvoient l’erreur suivante : 

```
ERROR: Target table must be part of an equijoin predicate
```

 Si vous avez besoin de spécifier une jointure externe, utilisez une sous-requête dans la clause WHERE de l’instruction UPDATE. 

Si votre instruction UPDATE nécessite une jointure réflexive avec la table cible, vous devez spécifier la condition de jointure, ainsi que les critères de la clause WHERE qui qualifient les lignes pour l’opération de mise à jour. En général, lorsque la table cible est associée à elle-même ou à une autre table, une bonne pratique consiste à utiliser une sous-requête qui sépare clairement les conditions de jointure des critères qui qualifient les lignes pour les mises à jour. 

Les requêtes UPDATE avec plusieurs correspondances par ligne renvoient une erreur lorsque le paramètre de configuration `error_on_nondeterministic_update` est défini sur *true*. Pour plus d'informations, consultez [error\$1on\$1nondeterministic\$1update](r_error_on_nondeterministic_update.md).

Vous pouvez mettre à jour une colonne GENERATED BY DEFAULT AS IDENTITY. Les colonnes définies comme GENERATED BY DEFAULT AS IDENTITY peuvent être mises à jour avec des valeurs que vous fournissez. Pour plus d'informations, consultez [GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause). 

# Exemples d’instructions UPDATE
<a name="c_Examples_of_UPDATE_statements"></a>

Pour plus d’informations sur les tables utilisées dans les exemples suivants, consultez [Exemple de base de données](c_sampledb.md).

La table CATEGORY de la base de données TICKIT contient les lignes suivantes : 

```
+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 5     | Sports   | MLS       | Major League Soccer                        |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 1     | Sports   | MLB       | Major League Baseball                      |
| 6     | Shows    | Musicals  | Musical theatre                            |
| 3     | Sports   | NFL       | National Football League                   |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 2     | Sports   | NHL       | National Hockey League                     |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 4     | Sports   | NBA       | National Basketball Association            |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
+-------+----------+-----------+--------------------------------------------+
```

 **Mise à jour d’une table en fonction d’une plage de valeurs** 

Mettez à jour la colonne CATGROUP en fonction d’une plage de valeurs de la colonne CATID. 

```
UPDATE category
SET catgroup='Theatre'
WHERE catid BETWEEN 6 AND 8;

SELECT * FROM category
WHERE catid BETWEEN 6 AND 8;

+-------+----------+----------+---------------------------+
| catid | catgroup | catname  |          catdesc          |
+-------+----------+----------+---------------------------+
| 6     | Theatre  | Musicals | Musical theatre           |
| 7     | Theatre  | Plays    | All non-musical theatre   |
| 8     | Theatre  | Opera    | All opera and light opera |
+-------+----------+----------+---------------------------+
```

 **Mise à jour d’une table en fonction d’une valeur actuelle** 

Mettez à jour les colonnes CATNAME et CATDESC en fonction de leur valeur CATGROUP actuelle : 

```
UPDATE category
SET catdesc=default, catname='Shows'
WHERE catgroup='Theatre';

SELECT * FROM category
WHERE catname='Shows';

+-------+----------+---------+---------+
| catid | catgroup | catname | catdesc |
+-------+----------+---------+---------+
| 6     | Theatre  | Shows   | NULL    |
| 7     | Theatre  | Shows   | NULL    |
| 8     | Theatre  | Shows   | NULL    |
+-------+----------+---------+---------+)
```

Dans ce cas, la colonne CATDESC a été définie sur null, car aucune valeur par défaut n’a été définie lors de la création de la table.

Exécutez les commandes suivantes pour redéfinir les données de la table CATEGORY à leurs valeurs d’origine :

```
TRUNCATE category;

COPY category
FROM 's3://redshift-downloads/tickit/category_pipe.txt' 
DELIMITER '|' 
IGNOREHEADER 1 
REGION 'us-east-1'
IAM_ROLE default;
```

 **Mise à jour d’une table en fonction du résultat d’une sous-requête de clause WHERE** 

Mettez à jour la table CATEGORY en fonction du résultat d’une sous-requête de la clause WHERE : 

```
UPDATE category
SET catdesc='Broadway Musical'
WHERE category.catid IN
(SELECT category.catid FROM category
JOIN event ON category.catid = event.catid
JOIN venue ON venue.venueid = event.venueid
JOIN sales ON sales.eventid = event.eventid
WHERE venuecity='New York City' AND catname='Musicals');
```

Affichez la table de mise à jour : 

```
SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 6     | Shows    | Musicals  | Broadway Musical                           |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
+-------+----------+-----------+--------------------------------------------+
```

 **Mise à jour d’une table en fonction du résultat d’une sous-requête de clause WITH** 

Pour mettre à jour la table CATEGORY en fonction du résultat d’une sous-requête à l’aide de la clause WITH, utilisez l’exemple suivant.

```
WITH u1 as (SELECT catid FROM event ORDER BY catid DESC LIMIT 1) 
UPDATE category SET catid='200' FROM u1 WHERE u1.catid=category.catid;

SELECT * FROM category ORDER BY catid DESC LIMIT 1;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 200   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

## Mise à jour d’une table en fonction du résultat d’une condition de jointure
<a name="c_Examples_of_UPDATE_statements-updating-a-table-based-on-the-result-of-a-join-condition"></a>

Mettez à jour les 11 lignes originales de la table CATEGORY en fonction des lignes CATID correspondantes de la table EVENT : 

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid;

SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 100   | Concerts | Pop       | All rock and pop music concerts            |
| 100   | Shows    | Plays     | All non-musical theatre                    |
| 100   | Shows    | Opera     | All opera and light opera                  |
| 100   | Shows    | Musicals  | Broadway Musical                           |
+-------+----------+-----------+--------------------------------------------+
```

 Notez que la table EVENT apparaît dans la clause FROM et que la condition de jointure avec la table cible est définie dans la clause WHERE. Seules quatre lignes sont éligibles pour la mise à jour. Ces quatre lignes sont les lignes dont les valeurs CATID étaient à l’origine 6, 7, 8 et 9 ; seules ces quatre catégories sont représentées dans la table EVENT : 

```
SELECT DISTINCT catid FROM event;

+-------+
| catid |
+-------+
| 6     |
| 7     |
| 8     |
| 9     |
+-------+
```

Mettez à jour les 11 lignes originales de la table CATEGORY en étendant l’exemple précédent et en ajoutant une autre condition à la clause WHERE. En raison de la restriction sur la colonne CATGROUP, une seule ligne est éligible à la mise à jour (même si quatre lignes sont qualifiées pour la jointure). 

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid
AND catgroup='Concerts';

SELECT * FROM category WHERE catid=100;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 100   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

Un autre moyen d’écrire cet exemple est le suivant : 

```
UPDATE category SET catid=100
FROM event JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
```

L’avantage de cette approche est que les critères de jointure sont clairement séparés des autres critères qui qualifient les lignes pour la mise à jour. Notez l’utilisation de l’alias CAT pour la table CATEGORY dans la clause FROM.

## Mises à jour avec jointures externes dans la clause FROM
<a name="c_Examples_of_UPDATE_statements-updates-with-outer-joins-in-the-from-clause"></a>

L’exemple précédent a montré une jointure interne spécifiée dans la clause FROM d’une instruction UPDATE. L’exemple suivant renvoie une erreur, car la clause FROM ne prend pas en charge les jointures externes avec la table cible : 

```
UPDATE category SET catid=100
FROM event LEFT JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
ERROR:  Target table must be part of an equijoin predicate
```

Si la jointure externe est nécessaire pour l’instruction UPDATE, vous pouvez déplacer la syntaxe de la jointure externe dans une sous-requête : 

```
UPDATE category SET catid=100
FROM
(SELECT event.catid FROM event LEFT JOIN category cat ON event.catid=cat.catid) eventcat
WHERE category.catid=eventcat.catid
AND catgroup='Concerts';
```

## Mises à jour avec les colonnes d’une autre table dans la clause SET
<a name="c_Examples_of_UPDATE_statements-set-with-column-from-another-table"></a>

Pour mettre à jour la table listing de l’échantillon de base de données TICKIT avec les valeurs de la table sales, utilisez l’exemple suivant.

```
SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 4          |
| 108334 | 24         |
| 117150 | 4          |
| 135915 | 20         |
| 205927 | 6          |
+--------+------------+

UPDATE listing
SET numtickets = sales.sellerid
FROM sales
WHERE sales.sellerid = 1 AND listing.sellerid = sales.sellerid;

SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 1          |
| 108334 | 1          |
| 117150 | 1          |
| 135915 | 1          |
| 205927 | 1          |
+--------+------------+
```

# USE
<a name="r_USE_command"></a>

Modifie la base de données sur laquelle les requêtes sont exécutées. SHOW USE pointe vers la base de données la plus récemment utilisée avec la commande USE. RESET USE réinitialise la base de données utilisée. Cela signifie que si la base de données n’est pas spécifiée dans le SQL, les objets sont recherchés dans la base de données active.

## Syntaxe
<a name="r_USE-synopsis"></a>

```
USE database
```

## Exemples
<a name="r_USE_command-examples"></a>

Supposons qu’il existe trois bases de données : `dev`, `pdb` et `pdb2`. Supposons qu’il y ait deux tables `t` dans les schémas publics de chacune des bases de données. Tout d’abord, insérez les données dans les tables des différentes bases de données :

```
dev=# insert into dev.public.t values (1);
INSERT 0 1
dev=# insert into pdb.public.t values (2);
INSERT 0 1
```

Sans définir explicitement de base de données, le système utilise votre base de données connectée. Vérifiez le contexte actuel de votre base de données :

```
dev=# show use;
Use Database

(1 row)
dev=> show search_path;
search_path
$user, public
(1 row)
```

Lorsque vous interrogez la table `t` sans spécifier de base de données, le système utilise la table de votre base de données active :

```
dev=# select * from t;
c
----
1
(1 row)
```

Utilisez la commande `use` pour changer de base de données sans modifier votre connexion :

```
dev=# use pdb;
USE
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# select * from t;
id
----
2
(1 row)
```

Vous pouvez également spécifier de façon explicite le schéma :

```
dev=# select * from public.t;
id
----
2
(1 row)
```

Vous pouvez désormais créer des tables dans différents schémas au sein de votre base de données active :

```
dev=# create table s1.t(id int);
CREATE TABLE
dev=# insert into pdb.s1.t values (3);
INSERT 0 1
```

Le chemin de recherche détermine les objets du schéma auxquels vous accédez lorsque vous ne spécifiez aucun schéma :

```
dev=# set search_path to public, s1;
SET
dev=# select * from t;
 id
----
  2
(1 row)
```

Modifiez l’ordre des schémas pour accéder aux différentes tables :

```
dev=# set search_path to s1, public;
SET
dev=# show search_path;
 search_path
-------------
 s1, public
(1 row)
dev=# select * from t;
 id
----
  3
(1 row)
```

Basculez vers une autre base de données tout en conservant votre connexion d’origine :

```
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# use pdb2;
USE
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)
```

Lorsque vous changez de base de données, le chemin de recherche est réinitialisé par défaut :

```
dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

Créez une table et insérez les données dans votre base de données actuelle :

```
dev=# create table pdb2.public.t(id int);
CREATE TABLE
dev=# insert into pdb2.public.t values (4);
INSERT 0 1
dev=# select * from t;
 id
----
  4
(1 row)
```

Dans les transactions, vous pouvez écrire dans la base de données actuelle et lire depuis n’importe quelle base de données à l’aide d’une notation en trois parties. Cela inclut également la base de données connectée :

```
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)

dev=# BEGIN;
BEGIN
dev=# select * from t;
 id
----
  4
(1 row)

dev=# insert into t values (5);
INSERT 0 1
dev=# select * from t;
 id
----
  4
  5
(2 rows)

dev=# select * from pdb.public.t;
 id
----
  2
(1 row)

dev=# select * from dev.public.t;
 id
----
  1
(1 row)
```

Réinitialisez votre base de données connectée. Notez que cela revient non seulement à la base de données `pdb` utilisée précédemment, mais également à la base de données connectée. Le chemin de recherche est également remplacé par celui par défaut : 

```
dev=# RESET USE;
RESET
dev=# select * from t;
c
----
1
(1 row)
dev=# show use;
 Use Database
--------------

(1 row)

dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

Vous pouvez modifier les bases de données au début d’une transaction, mais pas après avoir exécuté des requêtes :

```
dev=# BEGIN;
BEGIN
dev=# use pdb;
USE
dev=# use pdb2;
USE
dev=# use pdb;
USE
dev=# select * from t;
 id
----
  2
(1 row)
dev=# use pdb2;
ERROR:  USEd Database cannot be set or reset inside a transaction after another command.
dev=# rollback;
ROLLBACK
(1 row)
```

### Exemple de Catalogue de données
<a name="use-redlake-example"></a>

Créez d’abord des tables dans différents schémas et catalogues pour illustrer les requêtes inter-catalogues. Commencez par créer des tables dans la base de données connectée.

```
dev=# CREATE TABLE dev.public.t (col INT);
dev=# INSERT INTO dev.public.t VALUES (1);
dev=# CREATE SCHEMA write_schema;
dev=# CREATE TABLE dev.write_schema.t (state char (2));
dev=# INSERT INTO dev.write_schema.t VALUES ('WA');
```

Créez maintenant des tables similaires dans un autre catalogue. Cela montre comment utiliser des bases de données inter-catalogues.

```
dev=# CREATE TABLE my_db@my_catalog.public.t (col INT);
dev=# INSERT INTO my_db@my_catalog.public.t VALUES (100);
dev=# CREATE SCHEMA my_db@my_catalog.write_schema;
dev=# CREATE TABLE my_db@my_catalog.write_schema.t (state char (2));
dev=# INSERT INTO my_db@my_catalog.write_schema.t VALUES ('CA');
```

Vérifiez le contexte de base de données active. Sans définir explicitement de base de données, le système utilise la base de données connectée.

```
dev=# SHOW USE;
 Use Database
--------------

(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)

dev=# SELECT * FROM t;
 col
-----
   1
(1 row)
```

Configurez la USEd base de données pour qu'elle interroge les tables d'un autre catalogue.

```
dev=# USE my_db@my_catalog;

dev=# SHOW USE;
            Use Database
-------------------------------------
 my_db@my_catalog
(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

Lorsque vous interrogez la table t, les résultats proviennent de la base de données inter-catalogues.

```
dev=# SELECT * FROM t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM my_db@my_catalog.public.t;
 col
-----
 100
(1 row)
```

Modifiez le chemin de recherche pour accéder aux tables des différents schémas de la base de USEd données.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM my_db@my_catalog.write_schema.t;
 state
-------
 CA
(1 row)
```

Même si USE est défini sur une base de données inter-catalogues, il est toujours possible d’interroger explicitement la base de données d’origine.

```
dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

Réinitialisez la USEd base de données pour qu'elle fasse à nouveau référence aux objets de la base de données connectée.

```
dev=# RESET USE;

dev=# SHOW USE;
 Use Database
--------------

(1 row)
```

Notez que search\$1path est réinitialisé lorsque USE est réinitialisé.

```
dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

Après la réinitialisation, les requêtes font désormais référence à la base de données connectée d’origine.

```
dev=# SELECT * FROM t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM dev.public.t;
 col
-----
   1
(1 row)
```

Vous pouvez modifier le chemin de recherche dans la base de données d’origine pour accéder à différents schémas.

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

# VACUUM
<a name="r_VACUUM_command"></a>

Retrie les lignes et récupère l’espace dans une table spécifiée ou dans toutes les tables de la base de données actuelle.

**Note**  
Seuls les utilisateurs disposant des autorisations nécessaires peuvent efficacement vider une table. Si VACUUM est exécutée sans les autorisations de table nécessaires, l’opération se termine correctement, mais n’a aucun effet. Pour obtenir la liste des autorisations de table valides permettant d’exécuter VACUUM efficacement, consultez Privilèges requis ci-après.

Amazon Redshift trie automatiquement les données et exécute l’opération VACUUM DELETE en arrière-plan. Cela réduit la nécessité d’exécuter la commande VACUUM. Pour plus d'informations, consultez [Exécution de l’opération VACUUM sur les tables](t_Reclaiming_storage_space202.md). 

Par défaut, la commande VACUUM ignore la phase de tri pour toute table dans laquelle plus de 95 % des lignes sont déjà triées. L’omission de la phase de tri peut améliorer considérablement les performances de l’opération VACUUM. Pour modifier le seuil de suppression ou de tri par défaut d’une seule table, incluez le nom de la table et le paramètre TO *seuil* PERCENT lorsque vous exécutez la commande VACUUM. 

Les utilisateurs peuvent accéder aux tables pendant qu’elles sont aspirées. Vous pouvez exécuter des requêtes et des opérations d’écriture pendant qu’une table est l’objet de la commande VACUUM, mais lorsque des commandes de langage de manipulation de données (DML) et une commande VACUUM s’exécutent en même temps, les deux peuvent prendre plus de temps. Si vous exécutez les instructions UPDATE et DELETE pendant une opération VACUUM, les performances du système peuvent être réduites. L’opération VACUUM DELETE bloque temporairement les opérations de mise à jour et de suppression. 

Amazon Redshift exécute automatiquement une opération VACUUM DELETE ONLY en arrière-plan. L’opération automatique VACUUM s’interrompt lorsque les utilisateurs exécutent des opérations de langage de définition de données (DLL) telles que l’opération ALTER TABLE.

**Note**  
La syntaxe et le comportement de la commande Amazon Redshift VACUUM sont sensiblement différentes de l’opération PostgreSQL VACUUM. Par exemple, l’opération VACUUM par défaut dans Amazon Redshift est VACUUM FULL, qui récupère de l’espace disque et retrie toutes les lignes. En revanche, l’opération VACUUM par défaut dans PostgreSQL récupère simplement l’espace et le rend disponible pour sa réutilisation.

Pour plus d’informations, consultez [Exécution de l’opération VACUUM sur les tables](t_Reclaiming_storage_space202.md).

## Privilèges requis
<a name="r_VACUUM_command-privileges"></a>

Les privilèges suivants sont requis pour VACUUM :
+ Superuser
+ Utilisateurs disposant du privilège VACUUM
+ Propriétaire de la table
+ Propriétaire de la base de données avec qui la table est partagée

## Syntaxe
<a name="r_VACUUM_command-synopsis"></a>

```
VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER ]
[ [ table_name ] [ TO threshold PERCENT ] [ BOOST ] ]
```

## Parameters
<a name="r_VACUUM_command-parameters"></a>

FULL   <a name="vacuum-full"></a>
Trie la table spécifiée (ou toutes les tables de la base de données actuelle) et récupère l’espace disque occupé par les lignes qui ont été marquées en vue de leur suppression par les opérations UPDATE et DELETE précédentes. VACUUM FULL est la valeur par défaut.  
Une opération complète n’effectue pas une réindexation des tables entrelacées. Pour réindexer les tables entrelacées et exécuter une opération VACUUM FULL, utilisez l’option [VACUUM REINDEX](#vacuum-reindex).   
Par défaut, VACUUM FULL ignore la phase de tri d’une table déjà triée à au moins 95 %. Si l’opération VACUUM peut ignorer la phase de tri, elle effectue DELETE ONLY et récupère l’espace de la phase de suppression de telle sorte qu’au moins 95 % des lignes restantes ne sont pas marquées en vue de leur suppression.    
Si le seuil de tri n’est pas atteint (par exemple, si 90 % des lignes sont triées) et que VACUUM effectue un tri complet, il effectue également une opération de suppression complète, récupérant l’espace de 100 % des lignes supprimées.   
Vous ne pouvez modifier le seuil par défaut de VACUUM que pour une seule table. Pour modifier le seuil par défaut de VACUUM pour une seule table, incluez le nom de la table et le paramètre TO *seuil* PERCENT. 

SORT ONLY   <a name="vacuum-sort-only"></a>
Trie la table spécifiée (ou toutes les tables de la base de données actuelle) sans récupération de l’espace libéré par les lignes supprimées. Cette option est utile lorsque la récupération de l’espace disque n’est pas importante, mais qu’un nouveau tri l’est. Une opération SORT ONLY réduit le temps passé pour les opérations VACUUM lorsque la région non triée ne contient pas un grand nombre de lignes supprimées et ne couvre pas l’ensemble de la région triée. Les applications qui n’ont pas de contraintes d’espace disque, mais dépendent de l’optimisation des requêtes et de la conservation des lignes de table triées peuvent bénéficier de ce type d’opération.  
Par défaut, VACUUM SORT ONLY ignore toute table déjà triée à au moins 95 %. Pour modifier le seuil de tri par défaut d’une seule table, incluez le nom de la table et le paramètre TO *seuil* PERCENT lorsque vous exécutez la commande VACUUM. 

DELETE ONLY   <a name="vacuum-delete-only"></a>
Amazon Redshift exécute automatiquement une opération VACUUM DELETE ONLY en arrière-plan. Par conséquent, vous n’aurez que rarement, voire jamais, besoin d’exécuter une opération VACUUM DELETE ONLY.  
L’opération VACUUM DELETE récupère l’espace disque occupé par les lignes marquées en vue de leur suppression par des opérations UPDATE et DELETE précédentes, et compacte la table pour libérer l’espace consommé. Une opération DELETE ONLY ne trie pas les données de la table.   
Cette option réduit le temps passé pour les opérations VACUUM lorsque la récupération de l’espace disque est importante, mais qu’un nouveau tri des lignes ne l’est pas. Cette option peut également être utile lorsque vos performances de requête sont déjà optimales et qu’un nouveau tri des lignes pour optimiser ces performances n’est pas une condition requise.  
Par défaut, VACUUM DELETE ONLY récupère de l’espace de telle sorte qu’au moins 95 % des lignes restantes ne sont pas marquées en vue de leur suppression. Pour modifier le seuil de suppression par défaut d’une seule table, incluez le nom de la table et le paramètre TO *seuil* PERCENT lorsque vous exécutez la commande VACUUM.    
Certaines opérations, par exemple `ALTER TABLE APPEND`, peuvent provoquer la fragmentation des tables. Lorsque vous utilisez la clause `DELETE ONLY`, l’opération VACUUM récupère l’espace des tables fragmentées. La même valeur de seuil de 95% s’applique à l’opération de défragmentation. 

REINDEX  <a name="vacuum-reindex"></a>
Analyse la distribution des valeurs des colonnes de clé de tri entrelacé, puis effectue une opération VACUUM complète. Si REINDEX est utilisé, le nom d’une table est requis.  
VACUUM REINDEX prend nettement plus de temps que VACUUM FULL, car l’opération effectue un passage supplémentaire pour analyser les clés de tri entrelacé. L’opération de tri et de fusion peut prendre plus de temps pour les tables entrelacées, car le tri entrelacé peut nécessiter la réorganisation de plus de lignes qu’un tri composé.  
Si une opération VACUUM REINDEX se termine avant la fin, l’opération VACUUM suivante reprend l’opération de réindexation avant d’exécuter l’opération VACUUM complète.  
VACUUM REINDEX n’est pas pris en charge avec TO *seuil* PERCENT.  

RECLUSTER  <a name="vacuum-recluster"></a>
Trie les parties de la table qui ne sont pas triées. Les parties de la table qui sont déjà triées par le tri automatique de la table restent intactes. Cette commande ne fusionne pas les données nouvellement triées avec la région triée. Elle ne récupère pas non plus tout l’espace marqué pour suppression. Lorsque cette commande est terminée, il se peut que la table n’apparaisse pas entièrement triée, comme indiqué par le champ `unsorted` dans SVV\$1TABLE\$1INFO.   
 Nous vous recommandons d’utiliser VACUUM RECLUSTER pour les grandes tables avec une ingestion fréquente et des requêtes qui accèdent uniquement aux données les plus récentes.   
 VACUUM RECLUSTER n’est pas pris en charge avec TO threshold PERCENT. Si RECLUSTER est utilisé, le nom d’une table est requis.  
VACUUM RECLUSTER n’est pas pris en charge sur les tables ayant des clés de tri entrelacées et les tables ayant le style de distribution ALL.

 *table\$1name*   
Nom de la table sur laquelle s’applique l’opération VACUUM. Si vous ne spécifiez pas un nom de table, l’opération VACUUM s’applique à toutes les tables de la base de données actuelle. Vous pouvez spécifier une table créée par l’utilisateur permanente ou temporaire. La commande n’est pas pertinente pour les autres objets, tels que les vues et les tables système.  
 Si vous incluez le paramètre TO *seuil* PERCENT, un nom de table est obligatoire.

 TO *seuil* PERCENT   
Clause qui spécifie le seuil au-dessus duquel VACUUM ignore la phase de tri et le seuil cible de récupération de l’espace dans la phase de suppression. Le *seuil de tri* est le pourcentage du total des lignes qui sont déjà dans l’ordre de tri de la table spécifiée avant l’opération VACUUM.  Le *seuil de suppression* est le pourcentage minimal de lignes totales non marquées en vue de leur suppression après l’opération VACUUM.   
Comme VACUUM ne retrie les lignes que lorsque le pourcentage de lignes triées d’une table est inférieur au seuil de tri, Amazon Redshift peut souvent réduire la durée de VACUUM de façon significative. De même, lorsque VACUUM n’est pas limité pour récupérer l’espace de 100 % des lignes marquée en vue de leur suppression, il est souvent possible d’ignorer la réécriture des blocs contenant seulement quelques lignes supprimées.  
Par exemple, si vous spécifiez 75 pour *seuil*, VACUUM ignore la phase de tri si 75 % ou plus des lignes de la table sont déjà dans l’ordre de tri. Pour la phase de suppression, VACUUM définit une cible de récupération de l’espace disque de telle sorte qu’au moins 75 % des lignes de la table ne sont pas marquées en vue de leur suppression après l’opération VACUUM. La valeur *seuil* doit être un nombre entier compris entre 0 et 100. La valeur par défaut est 95. Si vous spécifiez une valeur égale à 100, VACUUM trie toujours la table, sauf si elle est déjà entièrement triée, et récupère l’espace de toutes les lignes marquées en vue de leur suppression. Si vous spécifiez la valeur 0, VACUUM ne trie jamais la table et ne récupère jamais l’espace.  
Si vous incluez le paramètre TO *seuil* PERCENT, vous devez également spécifier un nom de table. Si le nom de table est omis, VACUUM échoue.   
Vous ne pouvez pas utiliser le paramètre TO *seuil* PERCENT avec REINDEX. 

BOOST  
Exécute la commande VACUUM avec des ressources supplémentaires, comme la mémoire et l’espace disque, en fonction de leur disponibilité. Avec l’option BOOST, VACUUM exécute l’opération dans une fenêtre et bloque les suppressions et mises à jour simultanées pendant la durée de l’opération VACUUM. L’exécution de l’option BOOST utilise des ressources systèmes, ce qui peut affecter les performances de la requête. Exécutez l’opération VACUUM BOOST lorsque la charge sur le système est légère, par exemple pendant les opérations de maintenance.   
Tenez compte des éléments suivants lorsque vous utilisez l’option BOOST :  
+ Lorsque l’option BOOST est spécifiée, la valeur *table\$1name* est requise. 
+ L’option BOOST n’est pas prise en charge avec REINDEX. 
+ L’option BOOST est ignorée avec DELETE ONLY. 

## Notes d’utilisation
<a name="r_VACUUM_usage_notes"></a>

Pour la plupart des applications Amazon Redshift, une opération VACUUM FULL est recommandée. Pour plus d'informations, consultez [Exécution de l’opération VACUUM sur les tables](t_Reclaiming_storage_space202.md).

Avant d’exécuter une opération VACUUM, notez le comportement suivant : 
+ Vous ne pouvez pas exécuter VACUUM au sein d’un bloc de transaction (BEGIN ... END). Pour plus d’informations sur les transactions, consultez [Niveaux d’isolement dans Amazon Redshift](c_serial_isolation.md). 
+ Une certaine croissance de la table peut se produire lors d’une opération VACUUM. Ce comportement est attendu lorsqu’il n’y a aucune ligne supprimée à récupérer ou que le nouvel ordre de tri de la table se traduit par un ratio inférieur de compression des données.
+ Pendant les opérations VACUUM, une certaine dégradation des performances des requêtes est attendue. Les performances normales reprennent dès que l’opération VACUUM est terminée.
+ Les opérations d’écriture simultanées se poursuivent pendant les opérations VACUUM, mais nous ne les recommandons pas. Il est plus efficace de terminer les opérations d’écriture avant d’exécuter l’opération VACUUM. En outre, toutes les données écrites après le démarrage d’une opération de vide ne peuvent pas être nettoyées par cette opération. Dans ce cas, une deuxième opération de nettoyage est nécessaire.
+ Une opération VACUUM peut ne pas être en mesure de démarrer si une opération de chargement ou d’insertion est déjà en cours. Les opérations VACUUM nécessitent temporairement un accès exclusif aux tables afin de démarrer. Comme cet accès exclusif est requis brièvement, les opérations VACUUM ne bloquent pas les charges et les insertions simultanées pendant une période de temps significative.
+ Les opérations VACUUM sont ignorées lorsqu’il n’y a aucun travail à faire pour une table spécifique ; cependant, la découverte que l’opération peut être ignorée a un coût. Si vous savez qu’une table est vierge ou qu’elle ne respecte pas le seuil VACUUM défini, n’exécutez pas sur elle d’opération VACUUM.
+ Une opération DELETE ONLY sur une petite table peut ne pas réduire le nombre de blocs utilisés pour stocker les données, en particulier lorsque la table possède un grand nombre de colonnes ou que le cluster utilise un grand nombre de tranches par nœud. Ces opérations VACUUM ajoutent un bloc par colonne et par tranche pour tenir compte des insertions simultanées dans la table ; en outre, il est possible que cette surcharge compense la diminution du nombre de blocs de l’espace disque récupéré. Par exemple, si une table de 10 colonnes sur un cluster de 8 nœuds occupe 1000 blocs avant une opération VACUUM, celle-ci ne réduit pas le nombre réel de blocs, sauf si plus de 80 blocs d’espace disque sont récupérés en raison des lignes supprimées. (Chaque bloc de données utilise 1 Mo.)

Les opérations VACUUM automatiques s’interrompent si une des conditions suivantes est remplie : 
+ Un utilisateur exécute une opération de langage de manipulation de données (DDL), telle que ALTER TABLE, qui nécessite un verrou exclusif sur une table pour laquelle une opération VACUUM automatique est en cours. 
+ Une période de forte charge de cluster.

### Prend en charge VACUUM simultané
<a name="r_VACUUM_usage_notes_concurrent"></a>

Amazon Redshift prend en charge l’exécution simultanée de plusieurs transactions vacuum sur différentes sessions d’un cluster ou d’un groupe de travail. Cela signifie que vous pouvez émettre des instances différentes et multiples de tous les modes vacuum à la fois, chaque transaction vacuum étant enregistrée sur une table unique. Deux opérations vacuum ne peuvent pas fonctionner sur une seule table en même temps.

**Directives relatives à l’utilisation simultanée de vacuum**
+ Lorsque vous exécutez des transactions vacuum simultanées sur différentes sessions, vous devez surveiller les ressources du système et éviter d’exécuter un trop grand nombre d’opérations vacuum simultanément.
+ Le niveau de simultanéité recommandé dépend de l’espace à récupérer, du nombre et de la largeur des lignes à trier, de la taille de l’entrepôt et de la taille de votre charge de travail associée aux opérations VACUUM.
+ Selon le mode de transaction vacuum, commencez par deux opérations vacuum simultanées, puis ajoutez-en d’autres en fonction de leur durée d’exécution et de la charge du système. Tout comme les autres requêtes volumineuses émises par les utilisateurs, les opérations vacuum peuvent commencer à être mises en file d’attente si vous en exécutez un trop grand nombre simultanément lorsqu’Amazon Redshift atteint les limites de ressources du système. 
+ Exécutez plusieurs opérations Vacuum BOOST avec soin. L’exécution de l’option Vacuum BOOST utilise des ressources systèmes, ce qui peut affecter les performances de la requête. Exécutez l’opération VACUUM BOOST lorsque la charge sur le système est légère, par exemple pendant les opérations de maintenance.
+ Si vous ne spécifiez pas un nom de table, l’opération VACUUM s’applique à toutes les tables de la base de données actuelle. Ces opérations vacuum se déroulent toujours de manière séquentielle.

## Exemples
<a name="r_VACUUM_command-examples"></a>

Récupérez l’espace et la base de données, et triez à nouveau les lignes de toutes les tables en fonction du seuil d’aspiration de 95 % par défaut.

```
vacuum;
```

Récupérez l’espace et retriez les lignes de la table SALES en fonction du seuil de 95 % par défaut. 

```
vacuum sales;
```

Récupérez toujours l’espace et retriez les lignes de la table SALES. 

```
vacuum sales to 100 percent;
```

Retriez les lignes de la table SALES uniquement si moins de 75 % des lignes sont déjà triées. 

```
 vacuum sort only sales to 75 percent;
```

Récupérez de l’espace dans la table SALES, de telle sorte qu’au moins 75 % des lignes restantes ne soient pas marqués en vue de leur suppression après l’aspiration. 

```
vacuum delete only sales to 75 percent;
```

Réindexez, puis aspirez la table LISTING. 

```
vacuum reindex listing;
```

La commande suivante renvoie une erreur. 

```
vacuum reindex listing to 75 percent;
```

Regroupez, puis aspirez la table LISTING. 

```
vacuum recluster listing;
```

Regroupez, puis aspirez la table LISTING avec l’option BOOST. 

```
vacuum recluster listing boost;
```

# Référence sur les fonctions SQL
<a name="c_SQL_functions"></a>

**Topics**
+ [Fonctions exécutées uniquement sur le nœud principal](c_SQL_functions_leader_node_only.md)
+ [Fonctions d’agrégation](c_Aggregate_Functions.md)
+ [Fonctions de tableau](c_Array_Functions.md)
+ [Fonctions d’agrégation bit par bit](c_bitwise_aggregate_functions.md)
+ [Expressions conditionnelles](c_conditional_expressions.md)
+ [Fonctions de formatage des types de données](r_Data_type_formatting.md)
+ [Fonctions de date et d’heure](Date_functions_header.md)
+ [Fonctions de hachage](hash-functions.md)
+ [HyperLogLog fonctions](hyperloglog-functions.md)
+ [Fonctions JSON](json-functions.md)
+ [Solutions de machine learning](ml-function.md)
+ [Fonctions mathématiques](Math_functions.md)
+ [Fonctions d’objet](Object_Functions.md)
+ [Fonctions spatiales](geospatial-functions.md)
+ [Fonctions de chaîne](String_functions_header.md)
+ [Fonctions d’informations sur le type SUPER](c_Type_Info_Functions.md)
+ [Fonctions et opérateurs VARBYTE](varbyte-functions.md)
+ [Fonctions de fenêtrage](c_Window_functions.md)
+ [Fonctions d’administration système](r_System_administration_functions.md)
+ [Fonctions d’informations système](r_System_information_functions.md)

Amazon Redshift prend en charge un certain nombre de fonctions qui sont des extensions de la norme SQL, ainsi que des fonctions d’agrégation standard, des fonctions scalaires et des fonctions de fenêtrage.

**Note**  
Amazon Redshift est basé sur PostgreSQL. Amazon Redshift et PostgreSQL présentent un certain nombre de différences très importantes dont vous devez être conscient lorsque vous concevez et développez vos applications d’entrepôt des données. Pour plus d’informations sur les différences entre Amazon Redshift SQL et PostgreSQL, consultez [Amazon Redshift et PostgreSQL](c_redshift-and-postgres-sql.md).

# Fonctions exécutées uniquement sur le nœud principal
<a name="c_SQL_functions_leader_node_only"></a>

Certaines requêtes Amazon Redshift sont distribuées et exécutées sur les nœuds de calcul, et d’autres requêtes s’exécutent exclusivement sur le nœud principal.

Le nœud principal répartit SQL sur les nœuds de calcul chaque fois qu’une requête fait référence aux tables créées par l’utilisateur ou aux tables système (tables avec le préfixe STL ou STV, et vues système avec le préfixe SVL ou SVV). Une requête qui ne fait référence qu’aux tables catalogue (tables avec le préfixe PG, comme PG\$1TABLE\$1DEF) ou qui ne fait référence à aucune table, s’exécute exclusivement sur le nœud principal.

Certaines fonctions SQL d’Amazon Redshift sont prises en charge uniquement sur le nœud principal et ne le sont pas sur les nœuds de calcul. Une requête qui utilise une fonction de nœud principal doit être exécutée exclusivement sur celui-ci, et non sur les nœuds de calcul, sinon elle renverra une erreur.

La documentation relative à chaque fonction de nœud principal uniquement inclut un commentaire attestant que la fonction renvoie une erreur si elle fait référence aux tables définies par l’utilisateur ou aux tables système Amazon Redshift.

Pour plus d'informations, consultez [Fonctions SQL prises en charge sur le nœud principal](c_sql-functions-leader-node.md).

Les fonctions SQL suivantes sont des fonctions de nœud principal uniquement et ne sont pas prises en charge sur les nœuds de calcul :

Fonctions d’informations système
+ CURRENT\$1SCHEMA
+ CURRENT\$1SCHEMAS
+ HAS\$1DATABASE\$1PRIVILEGE
+ HAS\$1SCHEMA\$1PRIVILEGE
+ HAS\$1TABLE\$1PRIVILEGE

Fonctions de chaîne
+ SUBSTR

Fonctions mathématiques
+ FACTORIAL
+  LOG 

Les fonctions de nœud principal uniquement suivantes sont déconseillées et ne sont plus prises en charge :

Fonctions de date
+ AGE
+ CURRENT\$1TIME
+ CURRENT\$1TIMESTAMP
+ LOCALTIME
+ ISFINITE
+ NOW

Fonctions de chaîne
+ GETBIT
+ GET\$1BYTE
+ SET\$1BIT
+ SET\$1BYTE
+ TO\$1ASCII

# Fonctions d’agrégation
<a name="c_Aggregate_Functions"></a>

**Topics**
+ [Fonction ANY\$1VALUE](r_ANY_VALUE.md)
+ [Fonction APPROXIMATE PERCENTILE\$1DISC](r_APPROXIMATE_PERCENTILE_DISC.md)
+ [Fonction AVG](r_AVG.md)
+ [Fonction COUNT](r_COUNT.md)
+ [Fonction LISTAGG](r_LISTAGG.md)
+ [Fonction MAX](r_MAX.md)
+ [Fonction MEDIAN](r_MEDIAN.md)
+ [Fonction MIN](r_MIN.md)
+ [Fonction PERCENTILE\$1CONT](r_PERCENTILE_CONT.md)
+ [Fonctions STDDEV\$1SAMP et STDDEV\$1POP](r_STDDEV_functions.md)
+ [Fonction SUM](r_SUM.md)
+ [Fonctions VAR\$1SAMP et VAR\$1POP](r_VARIANCE_functions.md)

Les fonctions d’agrégation calculent une valeur de résultat unique à partir d’un ensemble de valeurs d’entrée. 

Les instructions SELECT utilisant des fonctions d’agrégation peuvent inclure deux clauses facultatives : GROUP BY et HAVING. La syntaxe de ces clauses est la suivante (avec la fonction COUNT par exemple) : 

```
SELECT count (*) expression FROM table_reference
WHERE condition [GROUP BY expression ] [ HAVING condition]
```

La clause GROUP BY agrège et regroupe les résultats en fonction de valeurs uniques dans une ou des colonnes spécifiées. La clause HAVING limite les résultats renvoyés aux lignes dans lesquelles une condition d’agrégation particulière a la valeur true, par exemple count (\$1) > 1. La clause HAVING est utilisée de la même manière que WHERE afin de limiter les lignes en fonction de la valeur d’une colonne. Pour voir un exemple de ces clauses supplémentaires, consultez [COUNT](r_COUNT.md).

Les fonctions d’agrégation n’acceptent pas les fonctions d’agrégation ou les fonctions de fenêtrage imbriquées comme arguments.

# Fonction ANY\$1VALUE
<a name="r_ANY_VALUE"></a>

La fonction ANY\$1VALUE renvoie n’importe quelle valeur des valeurs d’expression en entrée de manière non déterministe. Cette fonction renvoie la valeur `NULL` si l’expression en entrée n’entraîne pas de renvoi de ligne. La fonction peut également renvoyer `NULL` si l’expression d’entrée contient des valeurs `NULL`. Si l’entrée contient des valeurs `NULL` mélangées à des valeurs autres que `NULL`, `NULL` peut être renvoyé. Si toutes les valeurs sont `NULL`, `NULL` est renvoyé. Si aucune ligne ne correspond à la condition, `NULL` est renvoyé.

## Syntaxe
<a name="r_ANY_VALUE-synopsis"></a>

```
ANY_VALUE( [ DISTINCT | ALL ] expression )
```

## Arguments
<a name="r_ANY_VALUE-arguments"></a>

DISTINCT \$1 ALL  
Spécifiez DISTINCT ou ALL pour renvoyer n’importe quelle valeur des valeurs d’expression en entrée. L’argument DISTINCT n’a aucun effet et est ignoré.

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. L’*expression* est l’un des types de données suivants :  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ DOUBLE PRECISON
+ BOOLEAN
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ TIMETZ
+ INTERVAL YEAR TO MONTH
+ INTERVAL DAY TO SECOND
+ VARBYTE
+ SUPER
+ HLLSKETCH
+ GEOMETRY
+ GEOGRAPHY

## Renvoie
<a name="r_ANY_VALUE-returns"></a>

Renvoie le même type de données que *expression*. 

## Notes d’utilisation
<a name="r_ANY_VALUE-usage-notes"></a>

Si une instruction qui spécifie la fonction ANY\$1VALUE d’une colonne inclut également une deuxième référence de colonne, la deuxième colonne doit apparaître dans une clause GROUP BY ou être incluse dans une fonction d’agrégation. 

## Exemples
<a name="r_ANY_VALUE-examples"></a>

Les exemples utilisent la table d’événements créée à l’[étape 4 : charger des exemples de données depuis Amazon S3](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html) du *Guide de démarrage d’Amazon Redshift*. L’exemple suivant renvoie une instance de n’importe quel dateid dont le nom d’événement est Eagles. 

```
select any_value(dateid) as dateid, eventname from event where eventname ='Eagles' group by eventname;
```

Voici les résultats.

```
dateid | eventname
-------+---------------
 1878  | Eagles
```

L’exemple suivant renvoie une instance de n’importe quel dateid dont le nom d’événement est Eagles ou Cold War Kids. 

```
select any_value(dateid) as dateid, eventname from event where eventname in('Eagles', 'Cold War Kids') group by eventname;
```

Voici les résultats.

```
dateid | eventname
-------+---------------
 1922  | Cold War Kids
 1878  | Eagles
```

# Fonction APPROXIMATE PERCENTILE\$1DISC
<a name="r_APPROXIMATE_PERCENTILE_DISC"></a>

APPROXIMATE PERCENTILE\$1DISC est une fonction de distribution inverse qui suppose un modèle de distribution discrète. Elle prend une valeur de centile et une spécification de tri et renvoie un élément de l’ensemble donné. L’approximation permet une exécution de la fonction nettement plus rapide, avec une erreur relative faible d’environ 0,5 %.

Pour une valeur de *percentile* donnée, APPROXIMATE PERCENTILE\$1DISC utilise un algorithme résumé de quantile afin d’évaluer de façon approximative le percentile discret de l’expression dans la clause ORDER BY. APPROXIMATE PERCENTILE\$1DISC renvoie la valeur ayant la valeur de distribution cumulative la moins élevée (par rapport à la même spécification de tri) supérieure ou égale au *percentile*. 

## Syntaxe
<a name="r_APPROXIMATE_PERCENTILE_DISC-synopsis"></a>

```
APPROXIMATE  PERCENTILE_DISC ( percentile )
WITHIN GROUP (ORDER BY expr)
```

## Arguments
<a name="r_APPROXIMATE_PERCENTILE_DISC-arguments"></a>

 *percentile*   
Constante numérique comprise entre 0 et 1. Les valeurs NULL sont ignorées dans le calcul.

WITHIN GROUP ( ORDER BY *expr*)   
Clause qui spécifie les date/time valeurs numériques ou sur lesquelles trier et calculer le percentile. 

## Renvoie
<a name="r_APPROXIMATE_PERCENTILE_DISC-returns"></a>

Type de données identique à l’expression ORDER BY dans la clause WITHIN GROUP.

## Notes d’utilisation
<a name="r_APPROXIMATE_PERCENTILE_DISC-usage-notes"></a>

Si l’instruction APPROXIMATE PERCENTILE\$1DISC inclut une clause GROUP BY, le jeu de résultats est limité. La limite varie en fonction du type de nœud et du nombre de nœuds. Si la limite est dépassée, la fonction échoue et renvoie l’erreur suivante.

```
GROUP BY limit for approximate percentile_disc exceeded.
```

Si vous devez évaluer plus de groupes que ne le permet la limite, pensez à utiliser [Fonction PERCENTILE\$1CONT](r_PERCENTILE_CONT.md). 

## Exemples
<a name="r_APPROXIMATE_PERCENTILE_DISC-examples"></a>

L’exemple suivant renvoie le nombre de ventes, le total des ventes et la valeur du 50e percentile pour les 10 meilleures dates. 

```
select top 10 date.caldate,
count(totalprice), sum(totalprice),
approximate percentile_disc(0.5) 
within group (order by totalprice)
from listing
join date on listing.dateid = date.dateid
group by date.caldate
order by 3 desc;

caldate    | count | sum        | percentile_disc
-----------+-------+------------+----------------
2008-01-07 |   658 | 2081400.00 |         2020.00
2008-01-02 |   614 | 2064840.00 |         2178.00
2008-07-22 |   593 | 1994256.00 |         2214.00
2008-01-26 |   595 | 1993188.00 |         2272.00
2008-02-24 |   655 | 1975345.00 |         2070.00
2008-02-04 |   616 | 1972491.00 |         1995.00
2008-02-14 |   628 | 1971759.00 |         2184.00
2008-09-01 |   600 | 1944976.00 |         2100.00
2008-07-29 |   597 | 1944488.00 |         2106.00
2008-07-23 |   592 | 1943265.00 |         1974.00
```

# Fonction AVG
<a name="r_AVG"></a>

 La fonction AVG renvoie la moyenne (arithmétique) des valeurs d’expression d’entrée. La fonction AVG utilise des valeurs numériques et ignore les valeurs NULL.

## Syntaxe
<a name="r_AVG-synopsis"></a>

```
AVG ( [ DISTINCT | ALL ] expression )
```

## Arguments
<a name="r_AVG-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. L’*expression* est l’un des types de données suivants :  
+ SMALLINT
+ INTEGER
+ BIGINT
+ NUMERIC
+ DECIMAL
+ REAL
+ DOUBLE PRECISON
+ SUPER

DISTINCT \$1 ALL   
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double dans l’expression spécifiée avant de calculer la moyenne. Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression pour calculer la moyenne. La valeur par défaut est ALL.

## Types de données
<a name="r_AVG-data-types"></a>

 Les types d’argument pris en charge par la fonction AVG sont SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, DOUBLE PRECISION et SUPER.

Les types de retour pris en charge par la fonction AVG sont les suivants : 
+ BIGINT pour tout argument de type nombre entier
+ DOUBLE PRECISION pour un argument à virgule flottante
+ Renvoie le même type de données que l’expression pour tout autre type d’argument.

La précision par défaut d’un résultat de fonction AVG avec un argument NUMERIC ou DECIMAL est de 38. L’échelle du résultat est identique à celle de l’argument. Par exemple, une fonction AVG d’une colonne DEC(5,2) renvoie un type de données DEC(38,2).

## Exemples
<a name="r_AVG-examples"></a>

Recherchez la quantité moyenne vendue par transaction dans la table SALES : 

```
select avg(qtysold)from sales;

avg
-----
2
(1 row)
```

Recherchez le prix total moyen répertorié dans toutes les listes : 

```
select avg(numtickets*priceperticket) as avg_total_price from listing;

avg_total_price
-----------------
3034.41
(1 row)
```

Recherchez le prix moyen payé, regroupé par mois par ordre décroissant : 

```
select avg(pricepaid) as avg_price, month 
from sales, date
where sales.dateid = date.dateid
group by month
order by avg_price desc;

avg_price | month
-----------+-------
659.34 | MAR
655.06 | APR
645.82 | JAN
643.10 | MAY
642.72 | JUN
642.37 | SEP
640.72 | OCT
640.57 | DEC
635.34 | JUL
635.24 | FEB
634.24 | NOV
632.78 | AUG
(12 rows)
```

# Fonction COUNT
<a name="r_COUNT"></a>

 La fonction COUNT compte les lignes définies par l’expression.

La fonction COUNT présente les variantes suivantes.
+ COUNT (\$1) compte toutes les lignes de la table cible, qu’elles comprennent des valeurs null ou non.
+ COUNT ( *expression* ) calcule le nombre de lignes avec des valeurs non NULL dans une colonne ou une expression spécifique.
+ COUNT ( DISTINCT *expression* ) calcule le nombre de valeurs non NULL distinctes dans une colonne ou une expression.
+ APPROXIMATE COUNT DISTINCT donne une approximation du nombre de valeurs distinctes non NULL dans une colonne ou une expression.

## Syntaxe
<a name="r_COUNT-synopsis"></a>

```
COUNT( * | expression )
```

```
COUNT ( [ DISTINCT | ALL ] expression )
```

```
APPROXIMATE COUNT ( DISTINCT expression )
```

## Arguments
<a name="r_COUNT-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. La fonction COUNT prend en charge tous les types de données d’argument.

DISTINCT \$1 ALL  
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double dans l’expression spécifiée avant d’effectuer le compte. Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression pour le compte. La valeur par défaut est ALL.

APPROXIMATE  
Lorsqu'elle est utilisée avec APPROXIMATE, une fonction COUNT DISTINCT utilise un HyperLogLog algorithme pour estimer le nombre de valeurs distinctes non NULL dans une colonne ou une expression. Les requêtes qui utilisent le mot clé APPROXIMATE s’exécutent beaucoup plus rapidement, avec une erreur relative faible d’environ 2 %. L’approximation est garantie pour les requêtes qui renvoient un grand nombre de valeurs distinctes (par millions ou plus encore) par requête, ou par groupe, en cas de clause GROUP BY. Pour les ensembles plus petits de valeurs distinctes (par milliers), l’approximation peut être plus lente qu’un compte précis. La fonction APPROXIMATE peut être utilisée uniquement avec COUNT DISTINCT.

## Type de retour
<a name="c_Supported_data_types_count"></a>

La fonction COUNT renvoie BIGINT.

## Exemples
<a name="r_COUNT-examples"></a>

Pour compter tous les utilisateurs de l’état de Floride :

```
select count(*) from users where state='FL';

count
-------
510
```

Comptez tous les noms d’événements de la table EVENT :

```
select count(eventname) from event;

count
-------
8798
```

Comptez tous les noms d’événements de la table EVENT :

```
select count(all eventname) from event;

count
-------
8798
```

Comptez tous les lieux uniques dans le tableau IDs des ÉVÉNEMENTS :

```
select count(distinct venueid) as venues from event;

venues
--------
204
```

Pour compter le nombre de fois où chaque vendeur a répertorié des lots de plus de quatre billets en vente. Pour regrouper les résultats de l’ID du vendeur :

```
select count(*), sellerid from listing 
where numtickets > 4
group by sellerid
order by 1 desc, 2;

count | sellerid
------+----------
12    |    6386
11    |    17304
11    |    20123
11    |    25428
...
```

Les exemples suivants comparent les valeurs de retour et les durées d’exécution de COUNT et de APPROXIMATE COUNT. 

```
select  count(distinct pricepaid) from sales;
              
count
-------
  4528


Time: 48.048 ms

               
select approximate count(distinct pricepaid) from sales;

count
-------
  4553


Time: 21.728 ms
```

# Fonction LISTAGG
<a name="r_LISTAGG"></a>

Pour chaque groupe d’une requête, la fonction d’agrégation LISTAGG trie les lignes du groupe conformément à l’expression ORDER BY, puis concatène les valeurs en une chaîne unique. 

## Syntaxe
<a name="r_LISTAGG-synopsis"></a>

```
LISTAGG( [DISTINCT] aggregate_expression [, 'delimiter' ] ) 
[ WITHIN GROUP (ORDER BY order_list) ]
```

## Arguments
<a name="r_LISTAGG-arguments"></a>

DISTINCT  
Clause qui supprime toutes les valeurs en double dans l’expression spécifiée avant de procéder à la concaténation. Les espaces de fin sont ignorés. Par exemple, les chaînes `'a'` et `'a '` sont traitées comme des doublons. LISTAGG utilise la première valeur rencontrée. Pour plus d'informations, consultez [Signification des blancs de fin](r_Character_types.md#r_Character_types-significance-of-trailing-blanks).

 *aggregate\$1expression*   
 Toute expression valide, comme un nom de colonne, qui fournit les valeurs à regrouper. Les valeurs NULL et les chaînes vides sont ignorées. 

 *delimiter*   
Constante de chaîne qui sépare les valeurs concaténées. La valeur par défaut est NULL.

 *WITHIN GROUP (ORDER BY order\$1list)*   
Clause qui spécifie l’ordre de tri des valeurs regroupées. 

## Renvoie
<a name="r_LISTAGG-data-types"></a>

VARCHAR(MAX). Si le jeu de résultats est supérieur à la taille de VARCHAR maximale, LISTAGG renvoie l’erreur suivante :

```
Invalid operation: Result size exceeds LISTAGG limit
```

## Notes d’utilisation
<a name="r_LISTAGG-usage-notes"></a>
+ Si une instruction inclut plusieurs fonctions LISTAGG qui utilisent des clauses WITHIN GROUP, chaque clause WITHIN GROUP doit utiliser les mêmes valeurs ORDER BY.

  Par exemple, l’instruction suivante renvoie une erreur.

  ```
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) 
  WITHIN GROUP (ORDER BY sellerid) AS dates
  FROM sales;
  ```

  L’instruction suivante s’exécute avec succès.

  ```
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) 
  WITHIN GROUP (ORDER BY dateid) AS dates
  FROM sales;
  
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) AS dates
  FROM sales;
  ```
+ Vous ne pouvez pas utiliser les fonctions d’agrégation LISTAGG, PERCENTILE\$1CONT et MEDIAN avec d’autres fonctions d’agrégation distinctes.

## Exemples
<a name="r_LISTAGG-examples"></a>

L'exemple suivant regroupe les vendeurs IDs, triés par numéro de vendeur. 

```
SELECT LISTAGG(sellerid, ', ') 
WITHIN GROUP (ORDER BY sellerid) 
FROM sales
WHERE eventid = 4337;

listagg                                                                                                                                 
----------------------------------------------------------------------------------------------------------------------------------------
380, 380, 1178, 1178, 1178, 2731, 8117, 12905, 32043, 32043, 32043, 32432, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 47188, 48294
```

L'exemple suivant utilise DISTINCT pour renvoyer une liste de vendeurs uniques IDs.

```
SELECT LISTAGG(DISTINCT sellerid, ', ') 
WITHIN GROUP (ORDER BY sellerid) 
FROM sales
WHERE eventid = 4337;

listagg                                                                                    
-------------------------------------------------------------------------------------------
380, 1178, 2731, 8117, 12905, 32043, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 48294
```

L'exemple suivant regroupe les vendeurs par ordre IDs chronologique. 

```
SELECT LISTAGG(sellerid, ', ')  
WITHIN GROUP (ORDER BY dateid) 
FROM sales
WHERE eventid = 4337;

   listagg
-----------------------------------------------------------------------------------------------------------------------------------------
 41498, 47188, 47188, 1178, 1178, 1178, 380, 45676, 46324, 48294, 32043, 32043, 32432, 12905, 8117, 38750, 2731, 32432, 32043, 380, 38669
```

L’exemple suivant renvoie une liste des dates de ventes de l’acheteur ID 660 séparées par des barres verticales.

```
SELECT LISTAGG(
    (SELECT caldate FROM date WHERE date.dateid=sales.dateid), ' | '    
)
WITHIN GROUP (ORDER BY sellerid DESC, salesid ASC)
FROM sales
WHERE buyerid = 660;

             listagg
-------------------------------------------------
2008-07-16 | 2008-07-09 | 2008-01-01 | 2008-10-26
```

L'exemple suivant renvoie une liste des ventes séparées par des IDs virgules pour les acheteurs IDs 660, 661 et 662.

```
SELECT buyerid, 
LISTAGG(salesid,', ')
WITHIN GROUP (ORDER BY salesid) AS sales_id
FROM sales
WHERE buyerid BETWEEN 660 AND 662
GROUP BY buyerid
ORDER BY buyerid;
            
buyerid |                sales_id
--------+-----------------------------------------------------
660     | 32872, 33095, 33514, 34548
661     | 19951, 20517, 21695, 21931
662     | 3318, 3823, 4215, 51980, 53202, 55908, 57832, 171603
```

# Fonction MAX
<a name="r_MAX"></a>

 La fonction MAX renvoie la valeur maximale d’un ensemble de lignes. La fonction DISTINCT ou ALL peut être utilisée, mais elle n’affecte pas le résultat. 

## Syntaxe
<a name="r_MAX-synopsis"></a>

```
MAX ( [ DISTINCT | ALL ] expression )
```

## Arguments
<a name="r_MAX-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. L’*expression* est l’un des types de données suivants :  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ DOUBLE PRECISON
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ TIMETZ
+ VARBYTE
+ SUPER

DISTINCT \$1 ALL   
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double dans l’expression spécifiée avant de calculer la valeur maximale. Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression pour calculer la valeur maximale. La valeur par défaut est ALL. 

## Types de données
<a name="c_Supported_data_types_max"></a>

Renvoie le même type de données que *expression*. L’équivalent booléen de la fonction MIN est [Fonction BOOL\$1AND](r_BOOL_AND.md), et l’équivalent booléen de MAX est [Fonction BOOL\$1OR](r_BOOL_OR.md). 

## Exemples
<a name="r_MAX-examples"></a>

Recherchez le prix le plus élevé payé de toutes les ventes : 

```
select max(pricepaid) from sales;

max
----------
12624.00
(1 row)
```

Pour trouver le prix le plus élevé payé par billet de toutes les ventes : 

```
select max(pricepaid/qtysold) as max_ticket_price
from sales;

max_ticket_price
-----------------
2500.00000000
(1 row)
```

# Fonction MEDIAN
<a name="r_MEDIAN"></a>

Calcule la valeur médiane de la plage de valeurs. Les valeurs `NULL` de la plage sont ignorées.

MEDIAN est une fonction de distribution inverse qui suppose un modèle de distribution continue.

MEDIAN est un cas particulier de [PERCENTILE\$1CONT](r_PERCENTILE_CONT.md).

## Syntaxe
<a name="r_MEDIAN-synopsis"></a>

```
MEDIAN(median_expression)
```

## Arguments
<a name="r_MEDIAN-arguments"></a>

 *median\$1expression*   
Colonne cible ou expression sur laquelle la fonction opère.

## Types de données
<a name="r_MEDIAN-data-types"></a>

Le type de retour est déterminé par le type de données de *median\$1expression*. Le tableau suivant illustre le type de retour de chaque type de données *median\$1expression*.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_MEDIAN.html)

## Notes d’utilisation
<a name="r_MEDIAN-data-type-usage-notes"></a>

Si l’argument *median\$1expression* est un type de données `DECIMAL` défini avec la précision maximale de 38 chiffres, il est possible que MEDIAN renvoie un résultat inexact ou une erreur. Si la valeur de retour de la fonction MEDIAN dépasse 38 chiffres, le résultat est tronqué pour s’adapter, ce qui entraîne une perte de précision. Si, au cours de l’interpolation, un résultat intermédiaire dépasse la précision maximale, un dépassement de capacité numérique se produit et la fonction renvoie une erreur. Pour éviter ces conditions, nous vous recommandons d’utiliser un type de données avec une précision inférieure ou l’argument *median\$1expression* avec une précision inférieure. 

Si une instruction inclut plusieurs appels à des fonctions d’agrégation basées sur le tri (LISTAGG, PERCENTILE\$1CONT, or MEDIAN), elles doivent toutes utiliser les mêmes valeurs ORDER BY. Notez que MEDIAN applique une clause order by implicite sur la valeur d’expression. 

Par exemple, l’instruction suivante renvoie une erreur. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

An error occurred when executing the SQL command:
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

ERROR: within group ORDER BY clauses for aggregate functions must be the same
```

L’instruction suivante s’exécute avec succès. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales 
GROUP BY salesid, pricepaid;
```

## Exemples
<a name="r_MEDIAN-examples"></a>

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

L’exemple suivant montre que MEDIAN produit les mêmes résultats que PERCENTILE\$1CONT(0.5). 

```
SELECT TOP 10 DISTINCT sellerid, qtysold, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold),
MEDIAN(qtysold) 
FROM sales
GROUP BY sellerid, qtysold;

+----------+---------+-----------------+--------+
| sellerid | qtysold | percentile_cont | median |
+----------+---------+-----------------+--------+
|        2 |       2 |               2 |      2 |
|       26 |       1 |               1 |      1 |
|       33 |       1 |               1 |      1 |
|       38 |       1 |               1 |      1 |
|       43 |       1 |               1 |      1 |
|       48 |       2 |               2 |      2 |
|       48 |       3 |               3 |      3 |
|       77 |       4 |               4 |      4 |
|       85 |       4 |               4 |      4 |
|       95 |       2 |               2 |      2 |
+----------+---------+-----------------+--------+
```

L’exemple suivant permet de trouver la quantité médiane vendue pour chaque ID de vendeur.

```
SELECT sellerid, 
MEDIAN(qtysold)
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;

+----------+--------+
| sellerid | median |
+----------+--------+
|        1 |    1.5 |
|        2 |      2 |
|        3 |      2 |
|        4 |      2 |
|        5 |      1 |
|        6 |      1 |
|        7 |    1.5 |
|        8 |      1 |
|        9 |      4 |
|       12 |      2 |
+----------+--------+
```

Pour vérifier les résultats de la requête précédente pour le premier ID de vendeur, utilisez l’exemple suivant.

```
SELECT qtysold 
FROM sales 
WHERE sellerid=1;

+---------+
| qtysold |
+---------+
|       2 |
|       1 |
+---------+
```

# Fonction MIN
<a name="r_MIN"></a>

 La fonction MIN renvoie la valeur minimale d’un ensemble de lignes. La fonction DISTINCT ou ALL peut être utilisée, mais elle n’affecte pas le résultat.

## Syntaxe
<a name="r_MIN-synopsis"></a>

```
MIN ( [ DISTINCT | ALL ] expression )
```

## Arguments
<a name="r_MIN-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. L’*expression* est l’un des types de données suivants :  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ DOUBLE PRECISON
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ TIMETZ
+ VARBYTE
+ SUPER

DISTINCT \$1 ALL  
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double dans l’expression spécifiée avant de calculer la valeur minimale. Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression pour calculer la valeur minimale. La valeur par défaut est ALL.

## Types de données
<a name="c_Supported_data_types_min"></a>

 Renvoie le même type de données que *expression*. L’équivalent booléen de la fonction MIN est [Fonction BOOL\$1AND](r_BOOL_AND.md), et l’équivalent booléen de MAX est [Fonction BOOL\$1OR](r_BOOL_OR.md). 

## Exemples
<a name="r_MIN-examples"></a>

Pour trouver le prix le plus bas payé de toutes les ventes :

```
select min(pricepaid) from sales;

min
-------
20.00
(1 row)
```

Pour trouver le prix le plus bas payé par billet de toutes les ventes :

```
select min(pricepaid/qtysold)as min_ticket_price
from sales;

min_ticket_price
------------------
20.00000000
(1 row)
```

# Fonction PERCENTILE\$1CONT
<a name="r_PERCENTILE_CONT"></a>

La fonction PERCENTILE\$1CONT est une fonction de distribution inverse qui suppose un modèle de distribution continue. Elle prend une valeur de centile et une spécification de tri, et renvoie une valeur interpolée qui entre dans la catégorie de la valeur de centile donnée en ce qui concerne la spécification de tri. 

PERCENTILE\$1CONT calcule une interpolation linéaire entre les valeurs après les avoir ordonnées. A l’aide de la valeur de centile `(P)` et le nombre de lignes non null `(N)` dans le groupe d’agrégation, la fonction calcule le nombre de lignes après l’ordonnancement des lignes en fonction de la spécification de tri. Ce nombre de lignes `(RN)` est calculé selon la formule `RN = (1+ (P*(N-1))`. Le résultat de la fonction d’agrégation est calculé par interpolation linéaire entre les valeurs des lignes aux numéros de ligne `CRN = CEILING(RN)` et `FRN = FLOOR(RN)`. 

Le résultat final sera le suivant.

Si `(CRN = FRN = RN)` le résultat est `(value of expression from row at RN)` 

Sinon, le résultat est le suivant :

`(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)`.

## Syntaxe
<a name="r_PERCENTILE_CONT-synopsis"></a>

```
PERCENTILE_CONT(percentile)
WITHIN GROUP(ORDER BY expr)
```

## Arguments
<a name="r_PERCENTILE_CONT-arguments"></a>

 *percentile*   
Constante numérique comprise entre 0 et 1. Les valeurs `NULL` sont ignorées dans le calcul.

*expr*  
Spécifie date/time les valeurs numériques ou sur lesquelles trier et calculer le percentile. 

## Renvoie
<a name="r_PERCENTILE_CONT-returns"></a>

Le type de retour est déterminé par le type de données de l’expression ORDER BY dans la clause WITHIN GROUP. Le tableau suivant illustre le type de retour de chaque type de données d’expression ORDER BY.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_PERCENTILE_CONT.html)

## Notes d’utilisation
<a name="r_PERCENTILE_CONT-usage-notes"></a>

Si l’expression ORDER BY est un type de données DECIMAL défini avec la précision maximale de 38 chiffres, il est possible que PERCENTILE\$1CONT renvoie un résultat inexact ou une erreur. Si la valeur de retour de la fonction PERCENTILE\$1CONT dépasse 38 chiffres, le résultat est tronqué pour s’adapter, ce qui entraîne une perte de précision.. Si, au cours de l’interpolation, un résultat intermédiaire dépasse la précision maximale, un dépassement de capacité numérique se produit et la fonction renvoie une erreur. Pour éviter ces conditions, nous vous recommandons d’utiliser un type de données avec une précision inférieure ou l’expression ORDER BY avec une précision inférieure.

Si une instruction inclut plusieurs appels à des fonctions d’agrégation basées sur le tri (LISTAGG, PERCENTILE\$1CONT, or MEDIAN), elles doivent toutes utiliser les mêmes valeurs ORDER BY. Notez que MEDIAN applique une clause order by implicite sur la valeur d’expression. 

Par exemple, l’instruction suivante renvoie une erreur. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

An error occurred when executing the SQL command:
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

ERROR: within group ORDER BY clauses for aggregate functions must be the same
```

L’instruction suivante s’exécute avec succès. 

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales 
GROUP BY salesid, pricepaid;
```

## Exemples
<a name="r_PERCENTILE_CONT-examples"></a>

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

L’exemple suivant montre que PERCENTILE\$1CONT(0.5) produit les mêmes résultats que MEDIAN. 

```
SELECT TOP 10 DISTINCT sellerid, qtysold, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold),
MEDIAN(qtysold) 
FROM sales
GROUP BY sellerid, qtysold;

+----------+---------+-----------------+--------+
| sellerid | qtysold | percentile_cont | median |
+----------+---------+-----------------+--------+
|        2 |       2 |               2 |      2 |
|       26 |       1 |               1 |      1 |
|       33 |       1 |               1 |      1 |
|       38 |       1 |               1 |      1 |
|       43 |       1 |               1 |      1 |
|       48 |       2 |               2 |      2 |
|       48 |       3 |               3 |      3 |
|       77 |       4 |               4 |      4 |
|       85 |       4 |               4 |      4 |
|       95 |       2 |               2 |      2 |
+----------+---------+-----------------+--------+
```

L’exemple suivant recherche PERCENTILE\$1CONT(0.5) et PERCENTILE\$1CONT(0.75) pour la quantité vendue pour chaque ID de vendeur dans la table SALES.

```
SELECT sellerid, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold) as pct_50,
PERCENTILE_CONT(0.75) WITHIN GROUP(ORDER BY qtysold) as pct_75
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;

+----------+--------+---------+
| sellerid | pct_50 | pct_75 |
+----------+--------+---------+
|        1 |    1.5 |    1.75 |
|        2 |      2 |    2.25 |
|        3 |      2 |       3 |
|        4 |      2 |       2 |
|        5 |      1 |     1.5 |
|        6 |      1 |       1 |
|        7 |    1.5 |    1.75 |
|        8 |      1 |       1 |
|        9 |      4 |       4 |
|       12 |      2 |    3.25 |
+----------+--------+---------+
```

Pour vérifier les résultats de la requête précédente pour le premier ID de vendeur, utilisez l’exemple suivant.

```
SELECT qtysold 
FROM sales 
WHERE sellerid=1;

+---------+
| qtysold |
+---------+
|       2 |
|       1 |
+---------+
```

# Fonctions STDDEV\$1SAMP et STDDEV\$1POP
<a name="r_STDDEV_functions"></a>

 Les fonctions STDDEV\$1SAMP et STDDEV\$1POP renvoient l’écart type entre l’échantillon et la population d’un ensemble de valeurs numériques (nombre entier, décimale ou à virgule flottante). Le résultat de la fonction STDDEV\$1SAMP est équivalent à la racine carré de la variance de l’échantillon du même ensemble de valeurs. 

STDDEV\$1SAMP et STDDEV sont des synonymes de la même fonction. 

## Syntaxe
<a name="r_STDDEV_functions-syntax"></a>

```
STDDEV_SAMP | STDDEV ( [ DISTINCT | ALL ] expression)
STDDEV_POP ( [ DISTINCT | ALL ] expression)
```

L’expression doit comporter un type de données de nombre entier, décimale ou à virgule flottante. Quel que soit le type de données de l’expression, le type de retour de cette fonction est un nombre double précision. 

**Note**  
L’écart type est calculé à l’aide de l’arithmétique à virgule flottante, qui peut se traduire par une légère imprécision.

## Notes d’utilisation
<a name="r_STDDEV_usage_notes"></a>

Lorsque l’écart type de l’échantillon (STDDEV ou STDDEV\$1SAMP) est calculé pour une expression qui se compose d’une seule valeur, le résultat de la fonction est NULL, pas 0. 

## Exemples
<a name="r_STDDEV_functions-examples"></a>

La requête suivante renvoie la moyenne des valeurs de la colonne VENUESEATS de la table VENUE, suivie par l’écart type de l’échantillon et l’écart type de la population du même ensemble de valeurs. VENUESEATS est une colonne INTEGER. L’échelle du résultat est réduite à 2 chiffres. 

```
select avg(venueseats),
cast(stddev_samp(venueseats) as dec(14,2)) stddevsamp,
cast(stddev_pop(venueseats) as dec(14,2)) stddevpop
from venue;

avg  | stddevsamp | stddevpop
-------+------------+-----------
17503 |   27847.76 |  27773.20
(1 row)
```

La requête suivante renvoie l’écart type de l’échantillon pour la colonne COMMISSION de la table SALES. COMMISSION est une virgule DECIMAL. L’échelle du résultat est réduite à 10 chiffres. 

```
select cast(stddev(commission) as dec(18,10))
from sales;

stddev
----------------
130.3912659086
(1 row)
```

La requête suivante convertit l’écart type de l’échantillon de la colonne COMMISSION en un nombre entier. 

```
select cast(stddev(commission) as integer)
from sales;

stddev
--------
130
(1 row)
```

La requête suivante renvoie l’écart type de l’échantillon et la racine carré de la variance de l’échantillon pour la colonne COMMISSION. Les résultats de ces calculs sont identiques. 

```
select
cast(stddev_samp(commission) as dec(18,10)) stddevsamp,
cast(sqrt(var_samp(commission)) as dec(18,10)) sqrtvarsamp
from sales;

stddevsamp   |  sqrtvarsamp
----------------+----------------
130.3912659086 | 130.3912659086
(1 row)
```

# Fonction SUM
<a name="r_SUM"></a>

 La fonction SUM renvoie la somme des valeurs de la colonne d’entrée ou de l’expression. La fonction SUM utilise des valeurs numériques et ignore les valeurs NULL. 

## Syntaxe
<a name="r_SUM-synopsis"></a>

```
SUM ( [ DISTINCT | ALL ] expression )
```

## Arguments
<a name="r_SUM-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. L’*expression* est l’un des types de données suivants :  
+ SMALLINT
+ INTEGER
+ BIGINT
+ NUMERIC
+ DECIMAL
+ REAL
+ DOUBLE PRECISON
+ SUPER

DISTINCT \$1 ALL   
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double dans l’expression spécifiée avant de calculer la somme. Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression pour calculer la somme. La valeur par défaut est ALL. 

## Types de données
<a name="c_Supported_data_types_sum"></a>

Les types d’argument pris en charge par la fonction SUM sont SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL, DOUBLE PRECISION et SUPER.

Les types de retour pris en charge par la fonction SUM sont les suivants : 
+ BIGINT pour les arguments BIGINT, SMALLINT et INTEGER
+ NUMERIC pour les arguments NUMERIC
+ DOUBLE PRECISION pour les arguments à virgule flottante
+ Renvoie le même type de données que l’expression pour tout autre type d’argument.

La précision par défaut d’un résultat de fonction SUM avec un argument NUMERIC ou DECIMAL est de 38. L’échelle du résultat est identique à celle de l’argument. Par exemple, une fonction SUM d’une colonne DEC(5,2) renvoie un type de données DEC(38,2).

## Exemples
<a name="r_SUM-examples"></a>

 Pour rechercher toutes les commissions payées à partir de la table SALES : 

```
select sum(commission) from sales;

sum
-------------
16614814.65
(1 row)
```

Pour trouver le nombre de places de tous les lieux de l’état de Floride : 

```
select sum(venueseats) from venue
where venuestate = 'FL';

sum
--------
250411
(1 row)
```

Pour trouver le nombre de places vendu en mai : 

```
select sum(qtysold) from sales, date
where sales.dateid = date.dateid and date.month = 'MAY';

sum
-------
32291
(1 row)
```

# Fonctions VAR\$1SAMP et VAR\$1POP
<a name="r_VARIANCE_functions"></a>

 Les fonctions VAR\$1SAMP et VAR\$1POP renvoient la variance entre l’échantillon et la population d’un ensemble de valeurs numériques (nombre entier, décimale ou à virgule flottante). Le résultat de la fonction VAR\$1SAMP est équivalent au carré de l’écart type de l’échantillon du même ensemble de valeurs. 

VAR\$1SAMP et VARIANCE sont des synonymes de la même fonction. 

## Syntaxe
<a name="r_VARIANCE_functions-syntax"></a>

```
VAR_SAMP | VARIANCE ( [ DISTINCT | ALL ] expression)
VAR_POP ( [ DISTINCT | ALL ] expression)
```

L’expression doit comporter un type de données de nombre entier, décimale ou à virgule flottante. Quel que soit le type de données de l’expression, le type de retour de cette fonction est un nombre double précision. 

**Note**  
Les résultats de ces fonctions peuvent varier entre les clusters d’entrepôts des données, en fonction de la configuration du cluster dans chaque cas. 

## Notes d’utilisation
<a name="r_VARIANCE_usage_notes"></a>

Lorsque l’écart type de l’échantillon (VARIANCE ou VAR\$1SAMP) est calculé pour une expression qui se compose d’une valeur unique, le résultat de la fonction est NULL pas 0. 

## Exemples
<a name="r_VARIANCE_functions-examples"></a>

La requête suivante renvoie la variance arrondie entre l’échantillon et la population de la colonne NUMTICKETS dans la table LISTING. 

```
select avg(numtickets),
round(var_samp(numtickets)) varsamp,
round(var_pop(numtickets)) varpop
from listing;

avg | varsamp | varpop
-----+---------+--------
10 |      54 |     54
(1 row)
```

La requête suivante exécute les mêmes calculs mais traduit les résultats en valeur décimales. 

```
select avg(numtickets),
cast(var_samp(numtickets) as dec(10,4)) varsamp,
cast(var_pop(numtickets) as dec(10,4)) varpop
from listing;

avg | varsamp | varpop
-----+---------+---------
10 | 53.6291 | 53.6288
(1 row)
```

# Fonctions de tableau
<a name="c_Array_Functions"></a>

Vous trouverez ci-dessous une description des fonctions de tableau pour SQL prises en charge par Amazon Redshift pour accéder aux tableaux et les manipuler.

**Topics**
+ [Fonction ARRAY](r_array.md)
+ [Fonction ARRAY\$1CONCAT](r_array_concat.md)
+ [Fonction ARRAY\$1CONTAINS](array_contains.md)
+ [Fonction ARRAY\$1DISTINCT](array_distinct.md)
+ [Fonction ARRAY\$1EXCEPT](array_except.md)
+ [Fonction ARRAY\$1FLATTEN](array_flatten.md)
+ [Fonction ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fonction ARRAY\$1POSITION](array_position.md)
+ [Fonction ARRAY\$1POSITIONS](array_positions.md)
+ [Fonction ARRAY\$1SORT](array_sort.md)
+ [Fonction ARRAY\$1UNION](array_union.md)
+ [Fonction ARRAYS\$1OVERLAP](arrays_overlap.md)
+ [Fonction GET\$1ARRAY\$1LENGTH](get_array_length.md)
+ [Fonction SPLIT\$1TO\$1ARRAY](split_to_array.md)
+ [Fonction SUBARRAY](r_subarray.md)

# Fonction ARRAY
<a name="r_array"></a>

Crée un tableau du type de données SUPER.

## Syntaxe
<a name="r_array-synopsis"></a>

```
ARRAY( [ expr1 ] [, expr2 [, ... ]] )
```

## Argument
<a name="r_array-argument"></a>

 *expr1, expr2*   
Expressions de n’importe quel type de données Amazon Redshift à l’exception des types de date et d’heure, car Amazon Redshift ne convertit pas les types de date et d’heure en type de données SUPER. Les arguments ne doivent pas nécessairement être du même type de données.

## Type de retour
<a name="r_array-return-type"></a>

La fonction ARRAY renvoie le type de données SUPER.

## Exemple
<a name="r_array-example"></a>

Les exemples suivants montrent un tableau de valeurs numériques et un tableau de différents types de données.

```
--an array of numeric values
select ARRAY(1,50,null,100);
      array
------------------
 [1,50,null,100]
(1 row)

--an array of different data types
select ARRAY(1,'abc',true,3.14);
        array
-----------------------
 [1,"abc",true,3.14]
(1 row)
```

## Consultez aussi
<a name="r_array-see-also"></a>
+ [Fonction ARRAY\$1CONCAT](r_array_concat.md)
+ [Fonction SPLIT\$1TO\$1ARRAY](split_to_array.md)
+ [Fonction ARRAY\$1FLATTEN](array_flatten.md)

# Fonction ARRAY\$1CONCAT
<a name="r_array_concat"></a>

Concatène deux tableaux pour créer un tableau contenant tous les éléments du premier tableau, suivis de tous les éléments du second tableau. Les deux arguments doivent être des tableaux SUPER valides.

## Syntaxe
<a name="r_array_concat-synopsis"></a>

```
ARRAY_CONCAT( array1, array2 )
```

## Arguments
<a name="r_array_concat-argument-arguments"></a>

 *matrice1*  
Valeur qui spécifie le premier des deux tableaux à concaténer.

 *tableau 2*  
Valeur qui spécifie le deuxième des deux tableaux à concaténer.

## Type de retour
<a name="r_array_concat-return-type"></a>

La fonction ARRAY\$1CONCAT renvoie une valeur de données SUPER.

## Exemple
<a name="r_array_concat-example"></a>

Les exemples suivants montrent la concaténation de deux tableaux du même type et la concaténation de deux tableaux de types différents.

```
-- concatenating two arrays 
SELECT ARRAY_CONCAT(ARRAY(10001,10002),ARRAY(10003,10004));
              array_concat
------------------------------------
 [10001,10002,10003,10004]
(1 row)

-- concatenating two arrays of different types 
SELECT ARRAY_CONCAT(ARRAY(10001,10002),ARRAY('ab','cd'));
          array_concat
------------------------------
 [10001,10002,"ab","cd"]
(1 row)
```

## Consultez aussi
<a name="r_array_concat-see-also"></a>
+ [Fonction ARRAY\$1UNION](array_union.md)
+ [Fonction ARRAY\$1FLATTEN](array_flatten.md)
+ [Fonction SPLIT\$1TO\$1ARRAY](split_to_array.md)
+ [Fonction ARRAY\$1DISTINCT](array_distinct.md)

# Fonction ARRAY\$1CONTAINS
<a name="array_contains"></a>

Vérifie si le tableau contient la valeur donnée et renvoie TRUE s'il est trouvé.

## Syntaxe
<a name="array_contains-syntax"></a>

```
ARRAY_CONTAINS( array, value [, null_match] )
```

## Arguments
<a name="array_contains-arguments"></a>

 *réseau*   
Expression SUPER qui indique le tableau dans lequel effectuer la recherche.

 *valeur*   
Valeur qui indique l'élément à rechercher.

 *null\$1match*   
Une valeur booléenne qui indique comment les valeurs NULL sont gérées :  
+ *null\$1match* = FALSE : la recherche de NULL renvoie NULL. Si le tableau contient des valeurs NULL et qu'aucune correspondance n'est trouvée pour une valeur de recherche non nulle, renvoie NULL.
+ *null\$1match* = TRUE : NULLs sont traités comme des éléments valides et consultables. Si le tableau contient des valeurs NULL et qu'aucune correspondance n'est trouvée pour une valeur de recherche autre que NULL, il renvoie FALSE.
La valeur par défaut est TRUE.  
La gestion des valeurs NULL par défaut peut également être spécifiée par l'option de configuration :  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## Type de retour
<a name="array_contains-return-type"></a>

La fonction ARRAY\$1CONTAINS renvoie un type BOOLEAN.

## Exemple
<a name="array_contains-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1CONTAINS.

```
SELECT ARRAY_CONTAINS(ARRAY('red', 'green'), 'red');
array_contains
----------------
 t
(1 row)
```

Les exemples suivants montrent le comportement de la fonction lorsque *null\$1match* est défini sur TRUE.

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), NULL);
array_contains
----------------
 t
(1 row)

-- The array can contain NULLs
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'blue', TRUE);
array_contains
----------------
 f
(1 row)
```

Les exemples suivants montrent le comportement de la fonction lorsque *null\$1match* est défini sur FALSE. Notez que la spécification du comportement *null\$1match* dans la fonction remplacera le paramètre de configuration par défaut.

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_CONTAINS(ARRAY('red', 'green'), NULL, FALSE);
array_contains
----------------
 
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'green');
array_contains
----------------
 t
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'blue');
array_contains
----------------
 
(1 row)
```

## Consultez aussi
<a name="array_contains-see-also"></a>
+ [Fonction ARRAY\$1POSITION](array_position.md)
+ [Fonction ARRAY\$1POSITIONS](array_positions.md)
+ [Fonction ARRAYS\$1OVERLAP](arrays_overlap.md)

# Fonction ARRAY\$1DISTINCT
<a name="array_distinct"></a>

Crée un nouveau tableau contenant uniquement des éléments uniques du tableau d'entrée, en supprimant tous les doublons. Il n'est pas garanti que l'ordre des éléments du tableau de sortie corresponde à l'ordre d'entrée. Les valeurs NULL sont traitées comme des éléments valides ; s'il en NULLs existe plusieurs dans le tableau d'entrée, un seul NULL apparaît dans le tableau de sortie.

## Syntaxe
<a name="array_distinct-syntax"></a>

```
ARRAY_DISTINCT( array )
```

## Arguments
<a name="array_distinct-arguments"></a>

 *réseau*   
Expression SUPER qui spécifie le tableau.

## Type de retour
<a name="array_distinct-return-type"></a>

La fonction ARRAY\$1DISTINCT renvoie un type SUPER.

## Exemple
<a name="array_distinct-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1DISTINCT.

```
SELECT ARRAY_DISTINCT(ARRAY(1, 1, 'a', 'a', NULL, NULL));
 array_distinct 
----------------
 [1,"a",null]
(1 row)

SELECT ARRAY_DISTINCT(ARRAY_CONCAT(ARRAY(1,2,3,3),ARRAY(2,3,4,4)));
 array_distinct 
----------------
 [1,2,3,4]
(1 row)
```

## Consultez aussi
<a name="array_distinct-see-also"></a>
+ [Fonction ARRAY\$1UNION](array_union.md)
+ [Fonction ARRAY\$1SORT](array_sort.md)
+ [Fonction ARRAY\$1EXCEPT](array_except.md)
+ [Fonction ARRAY\$1INTERSECTION](array_intersection.md)

# Fonction ARRAY\$1EXCEPT
<a name="array_except"></a>

Renvoie la différence entre deux tableaux en conservant les éléments du premier tableau qui n'existent pas dans le second tableau. La fonction est sûre pour les valeurs NULL, ce qui signifie qu'elle traite NULLs les objets comme des objets connus.

## Syntaxe
<a name="array_except-syntax"></a>

```
ARRAY_EXCEPT( array1, array2 [, distinct] )
```

## Arguments
<a name="array_except-arguments"></a>

 *matrice1*   
Expression SUPER qui spécifie le premier tableau.

 *tableau 2*   
Expression SUPER qui spécifie le deuxième tableau.

 *distinct*   
Une valeur booléenne qui indique s'il faut renvoyer uniquement des éléments distincts :  
+ *distinct* = FALSE : la sémantique multi-ensembles s'applique. Chaque occurrence d'un élément du premier tableau est mise en correspondance avec des occurrences du second tableau. Si le premier tableau contient plus d'occurrences d'un élément que le second tableau, les occurrences supplémentaires sont conservées dans le résultat.
+ *distinct* = TRUE : la sémantique définie s'applique. Les deux tableaux sont traités comme des ensembles, sans tenir compte des éléments dupliqués. Les éléments du premier tableau sont supprimés s'ils existent n'importe où dans le second tableau, quel que soit le nombre d'occurrences.
La valeur par défaut est FALSE.

## Type de retour
<a name="array_except-return-type"></a>

La fonction ARRAY\$1EXCEPT renvoie un type SUPER.

## Exemple
<a name="array_except-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1EXCEPT.

```
SELECT ARRAY_EXCEPT(ARRAY('a','b','c'), ARRAY('b','c','d'));
 array_except
--------------
 ["a"]
(1 row)
```

Sémantique multi-ensembles :

```
SELECT ARRAY_EXCEPT(ARRAY('b','b','b','b'), ARRAY('b','b'));
 array_except
--------------
 ["b","b"]
(1 row)
```

Sémantique des paramètres :

```
SELECT ARRAY_EXCEPT(ARRAY('a','b','b'), ARRAY('b'), TRUE);
 array_except
--------------
 ["a"]
(1 row)
```

NULLs sont traités comme des objets connus.

```
SELECT ARRAY_EXCEPT(ARRAY('a',NULL), ARRAY(NULL));
 array_except
--------------
 ["a"]
(1 row)
```

## Consultez aussi
<a name="array_except-see-also"></a>
+ [Fonction ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fonction ARRAY\$1UNION](array_union.md)
+ [Fonction ARRAY\$1DISTINCT](array_distinct.md)
+ [Fonction ARRAYS\$1OVERLAP](arrays_overlap.md)

# Fonction ARRAY\$1FLATTEN
<a name="array_flatten"></a>

Fusionne plusieurs tableaux en un seul tableau de type SUPER. Les éléments du premier tableau interne apparaissent en premier, suivis des éléments des tableaux internes suivants. NULLs sont traités comme des objets connus.

## Syntaxe
<a name="array_flatten-syntax"></a>

```
ARRAY_FLATTEN( array )
```

## Arguments
<a name="array_flatten-arguments"></a>

 *réseau*   
Une super expression sous forme de tableau.

## Type de retour
<a name="array_flatten-returm-type"></a>

La fonction ARRAY\$1FLATTEN renvoie un type SUPER.

## Exemple
<a name="array_flatten-example"></a>

L'exemple suivant montre la fonction ARRAY\$1FLATTEN.

```
SELECT ARRAY_FLATTEN(ARRAY(ARRAY(1,2,3,4),ARRAY(5,6,7,8),ARRAY(9,10)));
     array_flatten
------------------------
 [1,2,3,4,5,6,7,8,9,10]
(1 row)
```

## Consultez aussi
<a name="array_flatten-see-also"></a>
+ [Fonction ARRAY\$1CONCAT](r_array_concat.md)
+ [Fonction SUBARRAY](r_subarray.md)
+ [Fonction ARRAY\$1DISTINCT](array_distinct.md)

# Fonction ARRAY\$1INTERSECTION
<a name="array_intersection"></a>

Renvoie un nouveau tableau contenant uniquement les éléments qui existent dans les deux tableaux d'entrée. La fonction est sûre pour les valeurs NULL, ce qui signifie qu'elle traite NULLs les objets comme des objets connus. L'ordre des éléments dans le résultat n'est pas garanti.

## Syntaxe
<a name="array_intersection-syntax"></a>

```
ARRAY_INTERSECTION( array1, array2 [, distinct] )
```

## Arguments
<a name="array_intersection-arguments"></a>

 *matrice1*   
Expression SUPER qui spécifie un tableau.

 *tableau 2*   
Expression SUPER qui spécifie un tableau.

 *distinct*   
Une valeur booléenne qui indique s'il faut renvoyer uniquement des éléments distincts :  
+ *distinct* = FALSE : la sémantique multi-ensembles s'applique. Les éléments dupliqués sont préservés et la fréquence de chaque élément du résultat est égale au minimum de ses fréquences dans les deux tableaux d'entrée.
+ *distinct* = TRUE : la sémantique définie s'applique. Seuls les éléments uniques communs aux deux tableaux sont renvoyés, sans doublons.
La valeur par défaut est FALSE.

## Type de retour
<a name="array_intersection-return-type"></a>

La fonction ARRAY\$1INTERSECTION renvoie un type SUPER.

## Exemple
<a name="array_intersection-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1INTERSECTION.

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','c'), ARRAY('b','c','d'));
 array_intersection 
--------------------
 ["b","c"]
(1 row)
```

Sémantique multi-ensembles :

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','b'), ARRAY('b','b','b'));
 array_intersection 
--------------------
 ["b","b"]
(1 row)
```

Sémantique des paramètres :

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','b'), ARRAY('b','b','b'), TRUE);
 array_intersection 
--------------------
 ["b"]
(1 row)
```

NULLs sont traités comme des objets connus.

```
SELECT ARRAY_INTERSECTION(ARRAY('a',NULL), ARRAY('b',NULL));
 array_intersection 
--------------------
 [null]
(1 row)
```

## Consultez aussi
<a name="array_intersection-see-also"></a>
+ [Fonction ARRAY\$1EXCEPT](array_except.md)
+ [Fonction ARRAYS\$1OVERLAP](arrays_overlap.md)
+ [Fonction ARRAY\$1UNION](array_union.md)
+ [Fonction ARRAY\$1DISTINCT](array_distinct.md)

# Fonction ARRAY\$1POSITION
<a name="array_position"></a>

Renvoie la position (index) de la première occurrence d'un élément spécifié dans un tableau. L'indice est basé sur 0, où 0 indique le premier élément, 1 indique le deuxième élément, etc. Renvoie -1 si l'élément est introuvable dans le tableau.

La fonction renvoie uniquement la position de la première occurrence. Pour trouver toutes les occurrences, pensez à utiliser la [Fonction ARRAY\$1POSITIONS](array_positions.md) fonction.

## Syntaxe
<a name="array_position-syntax"></a>

```
ARRAY_POSITION( array, value [, null_match] )
```

## Arguments
<a name="array_position-arguments"></a>

 *réseau*   
Expression SUPER qui indique le tableau dans lequel effectuer la recherche.

 *valeur*   
Valeur qui indique l'élément à rechercher.

 *null\$1match*   
Une valeur booléenne qui indique comment les valeurs NULL sont gérées :  
+ *null\$1match* = FALSE : la recherche de NULL renvoie NULL. Si le tableau contient des valeurs NULL et qu'aucune correspondance n'est trouvée pour une valeur de recherche non nulle, renvoie NULL.
+ *null\$1match* = TRUE : NULLs sont traités comme des éléments valides et consultables. Si le tableau contient des valeurs NULL et qu'aucune correspondance n'est trouvée pour une valeur de recherche non nulle, il renvoie -1.
La valeur par défaut est TRUE.  
La gestion des valeurs NULL par défaut peut également être spécifiée par l'option de configuration :  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## Type de retour
<a name="array_position-return-type"></a>

La fonction ARRAY\$1POSITION renvoie un type INT.

## Exemple
<a name="array_position-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1POSITION.

```
SELECT ARRAY_POSITION(ARRAY('red', 'green'), 'red');
 array_position 
----------------
              0
(1 row)

SELECT ARRAY_POSITION(ARRAY(1, 2, 3), 4);
 array_position 
----------------
             -1
(1 row)

-- only the position of the first occurrence is returned
SELECT ARRAY_POSITION(ARRAY('red', 'green', 'red'), 'red');
 array_position 
----------------
              0
(1 row)
```

Les exemples suivants montrent le comportement de la fonction lorsque *null\$1match* est défini sur TRUE.

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), NULL);
 array_position 
----------------
              1
(1 row)

-- The array can contain NULLs
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'blue', TRUE);
 array_position 
----------------
             -1
(1 row)
```

Les exemples suivants montrent le comportement de la fonction lorsque *null\$1match* est défini sur FALSE. Notez que la spécification du comportement *null\$1match* dans la fonction remplacera le paramètre de configuration par défaut.

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_POSITION(ARRAY('red', 'green'), NULL, FALSE);
 array_position 
----------------
               
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'green');
 array_position 
----------------
              2
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'blue');
 array_position 
----------------
               
(1 row)
```

## Consultez aussi
<a name="array_position-see-also"></a>
+ [Fonction ARRAY\$1POSITIONS](array_positions.md)
+ [Fonction ARRAY\$1CONTAINS](array_contains.md)
+ [Fonction SUBARRAY](r_subarray.md)

# Fonction ARRAY\$1POSITIONS
<a name="array_positions"></a>

Renvoie un tableau de positions (indices) où l'élément spécifié apparaît dans le tableau d'entrée. Les indices sont basés sur 0, où 0 indique le premier élément, 1 indique le deuxième élément, etc. Renvoie un tableau vide si l'élément est introuvable.

## Syntaxe
<a name="array_positions-syntax"></a>

```
ARRAY_POSITIONS( array, value [, null_match] )
```

## Arguments
<a name="array_positions-arguments"></a>

 *réseau*   
Expression SUPER qui indique le tableau dans lequel effectuer la recherche.

 *valeur*   
Valeur qui indique l'élément à rechercher.

 *null\$1match*   
Une valeur booléenne qui indique comment les valeurs NULL sont gérées :  
+ *null\$1match* = FALSE : la recherche de NULL renvoie NULL. Si le tableau contient des valeurs NULL et qu'aucune correspondance n'est trouvée pour une valeur de recherche non nulle, renvoie NULL.
+ *null\$1match* = TRUE : NULLs sont traités comme des éléments valides et consultables. Si le tableau contient des valeurs NULL et qu'aucune correspondance n'est trouvée pour une valeur de recherche non nulle, il renvoie un tableau vide.
La valeur par défaut est TRUE.  
La gestion des valeurs NULL par défaut peut également être spécifiée par l'option de configuration :  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## Type de retour
<a name="array_positions-return-type"></a>

La fonction ARRAY\$1POSITIONS renvoie un type SUPER.

## Exemple
<a name="array_positions-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1POSITIONS.

```
SELECT ARRAY_POSITIONS(ARRAY('red', 'green', 'red'), 'red');
 array_positions 
-----------------
 [0,2]
(1 row)

SELECT ARRAY_POSITIONS(ARRAY(1, 2, 3), 4);
 array_positions 
-----------------
 []
(1 row)
```

Les exemples suivants montrent le comportement de la fonction lorsque *null\$1match* est défini sur TRUE.

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green', NULL), NULL);
 array_positions 
-----------------
 [1,3]
(1 row)

-- The array can contain NULLs
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'blue', TRUE);
 array_positions 
-----------------
 []
(1 row)
```

Les exemples suivants montrent le comportement de la fonction lorsque *null\$1match* est défini sur FALSE. Notez que la spécification du comportement *null\$1match* dans la fonction remplacera le paramètre de configuration par défaut.

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_POSITIONS(ARRAY('red', 'green'), NULL, FALSE);
 array_positions 
-----------------
 
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'green');
 array_positions 
-----------------
 [2]
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'blue');
 array_positions 
-----------------
 
(1 row)
```

## Consultez aussi
<a name="array_positions-see-also"></a>
+ [Fonction ARRAY\$1POSITION](array_position.md)
+ [Fonction ARRAY\$1CONTAINS](array_contains.md)
+ [Fonction SUBARRAY](r_subarray.md)

# Fonction ARRAY\$1SORT
<a name="array_sort"></a>

Crée une version triée du tableau d'entrée par ordre croissant ou décroissant. Vous pouvez spécifier l'endroit où les valeurs NULL doivent apparaître dans le résultat. La fonction est sûre pour les valeurs NULL, ce qui signifie qu'elle traite NULLs les objets comme des objets connus.

## Syntaxe
<a name="array_sort-syntax"></a>

```
ARRAY_SORT( array [, sort_ascending [, nulls_first]] )
```

## Arguments
<a name="array_sort-arguments"></a>

 *réseau*   
Expression SUPER qui indique le tableau à trier.

 *tri\$1ascending*   
Une valeur booléenne qui indique s'il faut trier le tableau par ordre croissant ou décroissant :  
+ Spécifiez TRUE pour trier les éléments par ordre croissant.
+ Spécifiez FALSE pour trier les éléments par ordre décroissant.
La valeur par défaut est TRUE.

 *nulls\$1first*   
Une valeur booléenne qui indique le positionnement NULL :  
+ Spécifiez TRUE pour le placer NULLs au début du tableau trié.
+ Spécifiez FALSE pour le placer NULLs à la fin du tableau trié.

## Type de retour
<a name="array_sort-return-type"></a>

La fonction ARRAY\$1SORT renvoie un type SUPER.

## Remarque
<a name="array_sort-note"></a>

Lorsque vous triez des tableaux contenant des types de données mixtes, les éléments sont classés selon la priorité de type suivante :
+ Valeurs booléennes
+ Valeur numériques
+ Valeurs de chaîne
+ Arrays (tableaux)
+ Objets/Dictionnaires

Dans chaque catégorie de type, les éléments sont triés selon leur ordre naturel (par exemple, les nombres sont triés numériquement, les chaînes alphabétiquement).

## Exemple
<a name="array_sort-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1SORT.

```
-- Ascending order (default)
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false));
        array_sort        
--------------------------
 [false,0,1,"a","b",null]
(1 row)

-- Descending order
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false), False);
        array_sort        
--------------------------
 [null,"b","a",1,0,false]
(1 row)

-- Descending order with NULLs at the end of the sorted array
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false), False, False);
        array_sort        
--------------------------
 ["b","a",1,0,false,null]
(1 row)
```

## Consultez aussi
<a name="array_sort-see-also"></a>
+ [Fonction ARRAY\$1DISTINCT](array_distinct.md)
+ [Fonction ARRAY\$1FLATTEN](array_flatten.md)
+ [Fonction SUBARRAY](r_subarray.md)

# Fonction ARRAY\$1UNION
<a name="array_union"></a>

Combine deux tableaux et renvoie un seul tableau contenant toutes les valeurs uniques, en supprimant les doublons. La fonction est sûre pour les valeurs NULL, ce qui signifie qu'elle traite NULLs les objets comme des objets connus. L'ordre des éléments dans le résultat n'est pas garanti.

## Syntaxe
<a name="array_union-syntax"></a>

```
ARRAY_UNION( array1, array2 )
```

## Arguments
<a name="array_union-arguments"></a>

 *matrice1*   
Expression SUPER qui spécifie le premier tableau.

 *tableau 2*   
Expression SUPER qui spécifie le deuxième tableau.

## Type de retour
<a name="array_union-return-type"></a>

La fonction ARRAY\$1UNION renvoie un type SUPER.

## Exemple
<a name="array_union-example"></a>

Les exemples suivants illustrent la fonction ARRAY\$1UNION.

```
SELECT ARRAY_UNION(ARRAY('a','b','b'), ARRAY('b','c','c'));
  array_union  
---------------
 ["a","b","c"]
(1 row)
```

L'ordre des éléments n'est pas garanti :

```
SELECT ARRAY_UNION(ARRAY('b','a','b'), ARRAY(NULL,'b',NULL));
  array_union   
----------------
 ["b","a",null]
(1 row)
```

## Consultez aussi
<a name="array_union-see-also"></a>
+ [Fonction ARRAY\$1CONCAT](r_array_concat.md)
+ [Fonction ARRAY\$1DISTINCT](array_distinct.md)
+ [Fonction ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fonction ARRAY\$1EXCEPT](array_except.md)

# Fonction ARRAYS\$1OVERLAP
<a name="arrays_overlap"></a>

Vérifie si deux tableaux ont des éléments communs. Renvoie TRUE si les tableaux partagent au moins un élément, ou FALSE s'il n'existe aucun élément commun. La fonction est sûre pour les valeurs NULL, ce qui signifie qu'elle traite NULLs les objets comme des objets connus.

## Syntaxe
<a name="arrays_overlap-syntax"></a>

```
ARRAYS_OVERLAP( array1, array2 )
```

## Arguments
<a name="arrays_overlap-arguments"></a>

 *matrice1*   
Expression SUPER qui spécifie un tableau.

 *tableau 2*   
Expression SUPER qui spécifie un tableau.

## Type de retour
<a name="arrays_overlap-return-type"></a>

La fonction ARRAYS\$1OVERLAP renvoie un type booléen.

## Exemple
<a name="arrays_overlap-example"></a>

Les exemples suivants illustrent la fonction ARRAYS\$1OVERLAP.

```
SELECT ARRAYS_OVERLAP(ARRAY('blue', 'green'), ARRAY('red', 'green'));
 arrays_overlap 
----------------
 t
(1 row)
```

Les exemples suivants montrent qu' NULLs ils sont traités comme des éléments valides.

```
SELECT ARRAYS_OVERLAP(ARRAY('red', NULL, 'blue'), ARRAY('green', NULL));
 arrays_overlap 
----------------
 t
(1 row)

SELECT ARRAYS_OVERLAP(ARRAY('red', NULL, 'blue'), ARRAY('green'));
 arrays_overlap 
----------------
 f
(1 row)

SELECT ARRAYS_OVERLAP(JSON_PARSE('[null]'), ARRAY(NULL));
 arrays_overlap 
----------------
 t
(1 row)
```

## Consultez aussi
<a name="arrays_overlap-see-also"></a>
+ [Fonction ARRAY\$1INTERSECTION](array_intersection.md)
+ [Fonction ARRAY\$1CONTAINS](array_contains.md)
+ [Fonction ARRAY\$1EXCEPT](array_except.md)

# Fonction GET\$1ARRAY\$1LENGTH
<a name="get_array_length"></a>

Renvoie la longueur d'un tableau SUPER en fonction d'un objet ou d'un chemin de tableau.

## Syntaxe
<a name="get_array_length-syntax"></a>

```
GET_ARRAY_LENGTH( super_expr )
```

## Arguments
<a name="get_array_length-arguments"></a>

 *super\$1expr*   
Expression SUPER valide de forme de table.

## Type de retour
<a name="get_array_length-returm-type"></a>

La fonction GET\$1ARRAY\$1LENGTH renvoie un INT. 

## Exemple
<a name="get_array_length-example"></a>

L'exemple suivant montre la fonction GET\$1ARRAY\$1LENGTH.

```
SELECT GET_ARRAY_LENGTH(ARRAY(1,2,3,4,5,6,7,8,9,10));
 get_array_length
----------------------
            10
(1 row)
```

# Fonction SPLIT\$1TO\$1ARRAY
<a name="split_to_array"></a>

Utilise un délimiteur en tant que paramètre facultatif. Si aucun délimiteur n’est défini, la valeur par défaut est une virgule.

## Syntaxe
<a name="split_to_array-syntax"></a>

```
SPLIT_TO_ARRAY( string, delimiter )
```

## Arguments
<a name="split_to_array-arguments"></a>

 **string**   
Chaîne d’entrée à fractionner.

 **delimiter**   
Valeur facultative sur laquelle la chaîne d’entrée sera fractionnée. La valeur par défaut est une virgule.

## Type de retour
<a name="split_to_array-return-type"></a>

La fonction SPLIT\$1TO\$1ARRAY renvoie une valeur de données SUPER.

## Exemple
<a name="split_to_array-example"></a>

L'exemple suivant montre la fonction SPLIT\$1TO\$1ARRAY.

```
SELECT SPLIT_TO_ARRAY('12|345|6789', '|');
     split_to_array
-------------------------
 ["12","345","6789"]
(1 row)
```

## Consultez aussi
<a name="split_to_array-see-also"></a>
+ [Fonction ARRAY](r_array.md)
+ [Fonction ARRAY\$1CONCAT](r_array_concat.md)
+ [Fonction SUBARRAY](r_subarray.md)
+ [Fonction ARRAY\$1FLATTEN](array_flatten.md)

# Fonction SUBARRAY
<a name="r_subarray"></a>

Extrait une partie d'un tableau à partir d'une position spécifiée. Renvoie un nouveau tableau contenant le nombre spécifié d'éléments du tableau d'entrée.

## Syntaxe
<a name="r_subarray-syntax"></a>

```
SUBARRAY( super_expr, start_position, length )
```

## Arguments
<a name="r_subarray-arguments"></a>

*super\$1expr*  
Expression SUPER valide sous forme de tableau.

*start\$1position*  
Nombre entier qui indique la position de départ de l'extraction. L'indice est basé sur 0, où 0 indique le premier élément. Si start\$1position dépasse la longueur du tableau, un tableau vide est renvoyé.

*longueur*  
Entier facultatif qui indique le nombre d'éléments à extraire. En cas d'omission, tous les éléments de la position de départ à la fin du tableau sont renvoyés.

## Type de retour
<a name="r_subarray-return-type"></a>

La fonction SUBARRAY renvoie une valeur de données SUPER.

## Exemples
<a name="r_subarray-examples"></a>

Voici un exemple de fonction SUBARRAY.

```
 SELECT SUBARRAY(ARRAY('a', 'b', 'c', 'd', 'e', 'f'), 2, 3);
   subarray
---------------
 ["c","d","e"]
(1 row)
```

## Consultez aussi
<a name="r_subarray-see-also"></a>
+ [Fonction ARRAY\$1POSITION](array_position.md)
+ [Fonction ARRAY\$1POSITIONS](array_positions.md)
+ [Fonction ARRAY\$1FLATTEN](array_flatten.md)
+ [Fonction ARRAY\$1CONCAT](r_array_concat.md)

# Fonctions d’agrégation bit par bit
<a name="c_bitwise_aggregate_functions"></a>

Les fonctions d’agrégation bit par bit calculent les opérations binaires pour effectuer l’agrégation des colonnes d’entiers et des colonnes pouvant être converties ou arrondies en valeurs entières.

**Topics**
+ [Utilisation NULLs dans des agrégations au niveau du bit](#c_bitwise_aggregate_functions-nulls-in-bit-wise-aggregations)
+ [Prise en charge de la fonction DISTINCT pour les agrégations bit par bit](#distinct-support-for-bit-wise-aggregations)
+ [Exemples de présentation pour les fonctions bit par bit](#r_bitwise_example)
+ [Fonction BIT\$1AND](r_BIT_AND.md)
+ [Fonction BIT\$1OR](r_BIT_OR.md)
+ [Fonction BOOL\$1AND](r_BOOL_AND.md)
+ [Fonction BOOL\$1OR](r_BOOL_OR.md)

## Utilisation NULLs dans des agrégations au niveau du bit
<a name="c_bitwise_aggregate_functions-nulls-in-bit-wise-aggregations"></a>

Lorsque vous appliquez une fonction bit par bit à une colonne autorisant les valeurs nulles, toutes les valeurs NULL sont éliminées avant le calcul du résultat de la fonction. Si aucune ligne n’est admissible à l’agrégation, la fonction bit par bit renvoie NULL. Le même comportement s’applique aux fonctions d’agrégation standard. Voici un exemple.

```
select sum(venueseats), bit_and(venueseats) from venue
where venueseats is null;

sum  | bit_and
------+---------
null |    null
(1 row)
```

## Prise en charge de la fonction DISTINCT pour les agrégations bit par bit
<a name="distinct-support-for-bit-wise-aggregations"></a>

Tout comme d’autres fonctions d’agrégation, les fonctions bit par bit prennent en charge le mot-clé DISTINCT. 

Toutefois, l’utilisation de DISTINCT avec ces fonctions n’a aucun impact sur les résultats. La première instance d’une valeur est suffisante pour satisfaire des opérations AND ou OR bit par bit. Cela ne fait aucune différence si des valeurs en double sont présentes dans l’expression qui est évaluée. 

Du fait que le traitement DISTINCT risque d’entraîner une certaine surcharge de l’exécution des requêtes, nous vous recommandons de ne pas utiliser DISTINCT avec les fonctions bit par bit.

## Exemples de présentation pour les fonctions bit par bit
<a name="r_bitwise_example"></a>

Vous trouverez ci-dessous quelques exemples de présentation montrant comment utiliser les fonctions bit par bit. Vous trouverez également des exemples de code spécifiques avec la description de chaque fonction.

Les exemples de fonctions bit par bit sont basés sur l’exemple de base de données TICKIT. La table USERS de l’exemple de base de données TICKIT contient plusieurs colonnes booléennes qui indiquent si chaque utilisateur est connu pour aimer différents types d’événements, comme le sport, le théâtre, l’opéra et ainsi de suite. Un exemple suit.

```
select userid, username, lastname, city, state, 
likesports, liketheatre
from users limit 10;

userid | username | lastname  |     city     | state | likesports | liketheatre
-------+----------+-----------+--------------+-------+------------+-------------
1 | JSG99FHE | Taylor    | Kent         | WA    | t          | t
9 | MSD36KVR | Watkins   | Port Orford  | MD    | t          | f
```

Supposons qu’une nouvelle version de la table USERS est construite différemment. Dans cette nouvelle version, une colonne à un seul entier définit (sous forme binaire) huit types d’événements que chaque utilisateur aime ou n’aime pas. Dans cette conception, chaque position de bit représente un type d’événement. Un utilisateur qui aime les huit types d’évènements a chacun d’eux défini sur 1 (comme à la première ligne du tableau suivant). Un utilisateur qui n’aime aucun de ces événements a les huit bits définis sur 0 (voir la deuxième ligne). Un utilisateur qui aime uniquement le sport et le jazz est représenté sur la troisième ligne suivante.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/c_bitwise_aggregate_functions.html)

Dans la table de base de données, ces valeurs binaires peuvent être stockées dans une seule colonne LIKES sous forme d’entiers, comme illustré ci-dessous.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/c_bitwise_aggregate_functions.html)

# Fonction BIT\$1AND
<a name="r_BIT_AND"></a>

La fonction BIT\$1AND exécute des opérations AND bit par bit sur toutes les valeurs d’une colonne ou expression d’entiers. Ces fonctions regroupent chaque bit de chaque valeur binaire correspondant à chaque valeur de nombre entier de l’expression.

La fonction BIT\$1AND renvoie un résultat de `0` si aucun des bits n’est défini sur 1 dans l’ensemble des valeurs. Si un ou plusieurs bits est défini sur 1 dans toutes les valeurs, la fonction renvoie une valeur de nombre entier. Ce nombre entier est le chiffre qui correspond à la valeur binaire de ces bits.

Par exemple, une table contient quatre valeurs de nombre entier dans une colonne : 3, 7, 10 et 22. Ces nombres entiers sont représentés sous la forme binaire suivante :

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_BIT_AND.html)

Une opération BIT\$1AND sur cet ensemble de données détecte que tous les bits sont définis sur `1` la second-to-last position uniquement. Le résultat est une valeur binaire de `00000010`, qui représente la valeur d’entier `2`. Par conséquent, la fonction BIT\$1AND renvoie `2`.

## Syntaxe
<a name="r_BIT_AND-synopsis"></a>

```
BIT_AND ( [DISTINCT | ALL] expression )
```

## Arguments
<a name="r_BIT_AND-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. Cette expression doit avoir un INT ou un type de INT8 données. INT2 La fonction renvoie un INT ou un type de INT8 données équivalent. INT2

DISTINCT \$1 ALL  
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double de l’expression spécifiée avant de calculer le résultat. Avec l’argument ALL, la fonction conserve toutes les valeurs en double. La valeur par défaut est ALL. Pour plus d'informations, consultez [Prise en charge de la fonction DISTINCT pour les agrégations bit par bit](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Exemples
<a name="r_bit_end_example"></a>

Étant donné que des informations importantes sur l’entreprise sont stockées dans les colonnes de nombres entiers, vous pouvez utiliser des fonctions bit par bit pour extraire et regrouper ces informations. La requête suivante applique la fonction BIT\$1AND à la colonne LIKES dans une table appelée USERLIKES et regroupe les résultats en fonction de la colonne CITY. 

```
select city, bit_and(likes) from userlikes group by city 
order by city;
city          | bit_and
--------------+---------
Los Angeles   |       0
Sacramento    |       0
San Francisco |       0
San Jose      |      64
Santa Barbara |     192
(5 rows)
```

Vous pouvez interpréter ces résultats comme suit :
+ La valeur de nombre entier `192` de Santa Barbara se traduit par la valeur binaire `11000000`. Autrement dit, tous les utilisateurs de cette ville aiment le sport et le théâtre, mais tous les utilisateurs n’aiment pas un tout autre type d’événement.
+ Le nombre entier `64` se traduit par `01000000`. Ainsi, pour les utilisateurs de San Jose, le seul type d’événement qu’ils aiment tous est le théâtre.
+ Les valeurs de `0` des trois autres villes indiquent qu’aucun « J’aime » n’est partagé par tous les utilisateurs de ces villes.

# Fonction BIT\$1OR
<a name="r_BIT_OR"></a>

La fonction BIT\$1OR exécute des opérations OR bit par bit sur toutes les valeurs d’une seule colonne ou expression d’entiers. Ces fonctions regroupent chaque bit de chaque valeur binaire correspondant à chaque valeur de nombre entier de l’expression.

Par exemple, supposons que votre table contient quatre valeurs de nombre entier dans une colonne : 3, 7, 10 et 22. Ces nombres entiers sont représentés sous la forme binaire suivante.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_BIT_OR.html)

Si vous appliquez la fonction BIT\$1OR au même ensemble de valeurs entières, l’opération recherche toutes les valeurs contenant `1` à chaque position. Dans ce cas, il existe une valeur de `1` aux cinq dernières positions d’au moins une des valeurs, ce qui donne entraîne un résultat binaire de `00011111`. Par conséquent, la fonction renvoie `31` (ou `16 + 8 + 4 + 2 + 1`).

## Syntaxe
<a name="r_BIT_OR-synopsis"></a>

```
BIT_OR ( [DISTINCT | ALL] expression )
```

## Arguments
<a name="r_BIT_OR-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. Cette expression doit avoir un INT ou un type de INT8 données. INT2 La fonction renvoie un INT ou un type de INT8 données équivalent. INT2

DISTINCT \$1 ALL  
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double de l’expression spécifiée avant de calculer le résultat. Avec l’argument ALL, la fonction conserve toutes les valeurs en double. La valeur par défaut est ALL. Pour plus d'informations, consultez [Prise en charge de la fonction DISTINCT pour les agrégations bit par bit](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Exemple
<a name="r_bit_or_example"></a>

La requête suivante applique la fonction BIT\$1AND à la colonne LIKES dans une table appelée USERLIKES et regroupe les résultats en fonction de la colonne CITY.

```
select city, bit_or(likes) from userlikes group by city
order by city;
city          | bit_or
--------------+--------
Los Angeles   |    127
Sacramento    |    255
San Francisco |    255
San Jose      |    255
Santa Barbara |    255
(5 rows)
```

Pour quatre des villes répertoriées, tous les types d’événements sont appréciés par au moins un utilisateur (`255=11111111`). Pour Los Angeles, tous les types d’événements, sauf le sport sont appréciés par au moins un utilisateur (`127=01111111`).

# Fonction BOOL\$1AND
<a name="r_BOOL_AND"></a>

La fonction BOOL\$1AND opère sur une seule colonne ou expression booléenne ou entière. Elle applique une logique similaire aux fonctions BIT\$1AND et BIT\$1OR. Pour cette fonction, le type de retour est une valeur booléenne (`true` ou `false`).

Si toutes les valeurs d’un ensemble sont true, la fonction BOOL\$1AND renvoie `true` (`t`). Si une valeur est false, la fonction renvoie `false` (`f`).

## Syntaxe
<a name="r_BOOL_AND-synopsis"></a>

```
BOOL_AND ( [DISTINCT | ALL] expression )
```

## Arguments
<a name="r_BOOL_AND-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. Cette expression doit comporter un type de données BOOLEAN ou nombre entier. Le type de retour de la fonction est BOOLEAN.

DISTINCT \$1 ALL  
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double de l’expression spécifiée avant de calculer le résultat. Avec l’argument ALL, la fonction conserve toutes les valeurs en double. La valeur par défaut est ALL. Pour plus d'informations, consultez [Prise en charge de la fonction DISTINCT pour les agrégations bit par bit](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Exemples
<a name="r_bool_and_example"></a>

Vous pouvez utiliser les fonctions booléennes par rapport à des expressions booléennes ou à des expressions de type nombre entier. Par exemple, la requête suivante renvoie les résultats de la table USERS standard de la base de données TICKIT, qui comporte plusieurs colonnes booléennes.

La fonction BOOL\$1AND renvoie `false` pour les cinq lignes. Tous les utilisateurs de chacun de ces états n’aiment pas le sport.

```
select state, bool_and(likesports) from users 
group by state order by state limit 5;

state | bool_and
------+---------
AB    | f
AK    | f
AL    | f
AZ    | f
BC    | f
(5 rows)
```

# Fonction BOOL\$1OR
<a name="r_BOOL_OR"></a>

La fonction BOOL\$1OR opère sur une seule colonne ou expression booléenne ou entière. Elle applique une logique similaire aux fonctions BIT\$1AND et BIT\$1OR. Pour cette fonction, le type de retour est une valeur booléenne (`true`, `false` ou `NULL`).

Si au moins une valeur d’un ensemble est `true`, la fonction BOOL\$1OR renvoie `true` (`t`). Si toutes les valeurs d’un ensemble sont `false`, la fonction renvoie `false` (`f`). La valeur NULL peut être renvoyée si la valeur est inconnue.

## Syntaxe
<a name="r_BOOL_OR-synopsis"></a>

```
BOOL_OR ( [DISTINCT | ALL] expression )
```

## Arguments
<a name="r_BOOL_OR-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. Cette expression doit comporter un type de données BOOLEAN ou nombre entier. Le type de retour de la fonction est BOOLEAN.

DISTINCT \$1 ALL  
Avec l’argument DISTINCT, la fonction supprime toutes les valeurs en double de l’expression spécifiée avant de calculer le résultat. Avec l’argument ALL, la fonction conserve toutes les valeurs en double. La valeur par défaut est ALL. Consultez [Prise en charge de la fonction DISTINCT pour les agrégations bit par bit](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations).

## Exemples
<a name="r_bool_or_example"></a>

Vous pouvez utiliser les fonctions booléennes avec des expressions booléennes ou des expressions de type nombre entier. Par exemple, la requête suivante renvoie les résultats de la table USERS standard de la base de données TICKIT, qui comporte plusieurs colonnes booléennes.

La fonction BOOL\$1OR renvoie `true` pour les cinq lignes. Au moins un utilisateur de chacun de ces états aime le sport.

```
select state, bool_or(likesports) from users 
group by state order by state limit 5;

state | bool_or 
------+--------
AB    | t      
AK    | t      
AL    | t       
AZ    | t       
BC    | t       
(5 rows)
```

L’exemple suivant renvoie la valeur NULL.

```
SELECT BOOL_OR(NULL = '123')
               bool_or
------                  
NULL
```

# Expressions conditionnelles
<a name="c_conditional_expressions"></a>

**Topics**
+ [Expression conditionnelle CASE](r_CASE_function.md)
+ [Fonction DECODE](r_DECODE_expression.md)
+ [Fonctions GREATEST et LEAST](r_GREATEST_LEAST.md)
+ [Fonctions NVL et COALESCE](r_NVL_function.md)
+ [NVL2 fonction](r_NVL2.md)
+ [Fonction NULLIF](r_NULLIF_function.md)

Amazon Redshift prend en charge des expressions conditionnelles qui sont des extensions de la norme SQL.

# Expression conditionnelle CASE
<a name="r_CASE_function"></a>

L'expression CASE est une expression conditionnelle, similaire aux if/then/else instructions trouvées dans d'autres langages. L’expression CASE est utilisée pour spécifier un résultat lorsqu’il y a plusieurs conditions. Utilisez CASE là où l’utilisation d’une expression SQL est valide, par exemple dans une commande SELECT.

Il existe deux types d’expressions CASE : simple et recherchée.
+ Dans les expressions CASE simples, une expression est comparée à une valeur. Lorsqu’une correspondance est trouvée, l’action spécifiée dans la clause THEN est appliquée. Si aucune correspondance n’est trouvée, l’action de la clause ELSE est appliquée.
+ Dans les expressions CASE recherchées, chaque expression CASE est évaluée en fonction d’une expression booléenne, et l’instruction CASE renvoie la première expression CASE correspondante. Si aucune correspondance n’est trouvée parmi les clauses WHEN, l’action contenue dans la clause ELSE est renvoyée.

## Syntaxe
<a name="r_CASE_function-syntax"></a>

Instruction CASE simple utilisée pour mettre en correspondance des conditions :

```
CASE expression
  WHEN value THEN result
  [WHEN...]
  [ELSE result]
END
```

Instructions CASE recherchées utilisées pour évaluer chaque condition :

```
CASE
  WHEN condition THEN result
  [WHEN ...]
  [ELSE result]
END
```

## Arguments
<a name="r_CASE_function-arguments"></a>

 *expression*   
Nom de la colonne ou n’importe quelle expression valide.

 *valeur*   
Valeur à laquelle l’expression est comparée, par exemple une constante numérique ou une chaîne de caractères.

 *result*   
Valeur ou expression cible qui est renvoyée lorsqu’une expression ou une condition booléenne est évaluée. Les types de données de toutes les expressions de résultat doivent pouvoir être convertis en un seul type de sortie.

 *condition*   
Expression booléenne qui prend la valeur true ou false. Si la *condition* a la valeur true, la valeur de l’expression CASE est le résultat qui suit la condition, et le reste de l’expression CASE n’est pas traité. Si la *condition* a la valeur false, les clauses WHEN suivantes sont évaluées. Si aucune condition WHEN n’a la valeur true en résultat, la valeur de l’expression CASE est le résultat de la clause ELSE. Si la clause ELSE est omise et qu’aucune condition n’a la valeur true, le résultat est null.

## Exemples
<a name="r_CASE_function-examples"></a>

Les exemples suivants utilisent la table VENUE et la table SALES de l’exemple de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Utilisez une expression CASE simple pour remplacer `New York City` par `Big Apple` dans une requête sur la table de VENUE. Remplacer tous les autres noms de villes par `other`.

```
select venuecity,
  case venuecity
    when 'New York City'
    then 'Big Apple' else 'other'
  end 
from venue
order by venueid desc;

venuecity        |   case
-----------------+-----------
Los Angeles      | other
New York City    | Big Apple
San Francisco    | other
Baltimore        | other
...
```

Utiliser une expression CASE recherchée pour affecter des numéros de groupes basés sur la valeur PRICEPAID pour les vente de billets individuelles :

```
select pricepaid,
  case when pricepaid <10000 then 'group 1'
    when pricepaid >10000 then 'group 2'
    else 'group 3'
  end 
from sales
order by 1 desc;

pricepaid |  case
----------+---------
12624     | group 2
10000     | group 3
10000     | group 3
9996      | group 1
9988      | group 1
...
```

# Fonction DECODE
<a name="r_DECODE_expression"></a>

Une expression DECODE remplace une valeur spécifique par une autre valeur spécifique ou une valeur par défaut, selon le résultat d’une condition d’égalité. Cette opération est équivalente à l'opération d'une simple expression CASE ou d'une IF-THEN-ELSE instruction.

## Syntaxe
<a name="r_DECODE_expression-synopsis"></a>

```
DECODE ( expression, search, result [, search, result ]... [ ,default ] )
```

Ce type d’expression est utile pour remplacer des abréviations ou des codes stockés dans les tables par des valeurs commerciales pertinentes qui sont nécessaires pour les rapports.

## Parameters
<a name="r_DECODE_expression-parameters"></a>

 *expression*   
Source de la valeur que vous souhaitez comparer, comme une colonne dans une table.

 *search*   
Valeur cible comparée à l’expression source, par exemple une valeur numérique ou une chaîne de caractères. L’expression search doit correspondre à une seule valeur fixe. Vous ne pouvez pas spécifier une expression qui correspond à une plage de valeurs, par exemple `age between 20 and 29` ; vous devez spécifier des search/result paires distinctes pour chaque valeur que vous souhaitez remplacer.  
Le type de données de toutes les instances de l’expression search doit être identique ou compatible. Les paramètres *expression* et *search* doivent aussi être compatibles.

 *result*   
Valeur de remplacement que la requête renvoie lorsque l’expression correspond à la valeur de recherche. Vous devez inclure au moins une search/result paire dans l'expression DECODE.  
Les types de données de toutes les instances de l’expression result doivent être identiques ou compatibles. Les paramètres *result* et *default* doivent aussi être compatibles.

 *default*   
Valeur par défaut d’une option utilisée pour les cas où la condition de recherche échoue. Si vous ne spécifiez pas de valeur par défaut, l’expression DECODE renvoie NULL.

## Notes d’utilisation
<a name="decode-expression-usage-notes"></a>

Si *expression* et *search* ont la valeur NULL, le résultat DECODE est la valeur *result* correspondante. Pour une illustration de cette utilisation de la fonction, consultez Exemples.

Lorsqu’il est utilisé de cette façon, DECODE est similaire à [NVL2 fonction](r_NVL2.md), mais il existe quelques différences. Pour une description de ces différences, consultez les notes NVL2 d'utilisation.

## Exemples
<a name="r_DECODE_expression-examples"></a>

Lorsque la valeur `2008-06-01` existe dans la colonne CALDATE de DATETABLE, l’exemple suivant la remplace par `June 1st, 2008`. L’exemple remplace toutes les autres valeurs CALDATE par NULL. 

```
select decode(caldate, '2008-06-01', 'June 1st, 2008')
from datetable where month='JUN' order by caldate;

case
----------------
June 1st, 2008

...
(30 rows)
```

L’exemple suivant utilise une expression DECODE pour convertir les cinq colonnes CATNAME abrégées dans la table CATEGORY en noms complets et convertir les autres valeurs de la colonne en `Unknown`. 

```
select catid, decode(catname,
'NHL', 'National Hockey League',
'MLB', 'Major League Baseball',
'MLS', 'Major League Soccer',
'NFL', 'National Football League',
'NBA', 'National Basketball Association',
'Unknown')
from category
order by catid;

catid  |	case
-------+---------------------------------
1      | Major League Baseball
2      | National Hockey League
3      | National Football League
4      | National Basketball Association
5      | Major League Soccer
6      | Unknown
7      | Unknown
8      | Unknown
9      | Unknown
10     | Unknown
11     | Unknown
(11 rows)
```

Utilisez une expression DECODE pour rechercher des sites au Colorado et au Nevada avec NULL dans la colonne VENUESEATS ; convertissez-le en zéros. NULLs Si la colonne VENUESEATS n’est pas NULL, renvoyez 1 comme résultat. 

```
select venuename, venuestate, decode(venueseats,null,0,1)
from venue
where venuestate in('NV','CO')
order by 2,3,1;

venuename	              | venuestate     | case
------------------------------+----------------+-----------
Coors Field                   |	CO	       |   1
Dick's Sporting Goods Park    |	CO	       |   1
Ellie Caulkins Opera House    |	CO	       |   1
INVESCO Field		      |	CO	       |   1
Pepsi Center		      |	CO	       |   1
Ballys Hotel		      |	NV	       |   0
Bellagio Hotel                |	NV	       |   0
Caesars Palace                |	NV	       |   0
Harrahs Hotel                 |	NV	       |   0
Hilton Hotel                  |	NV	       |   0
...						
(20 rows)
```

# Fonctions GREATEST et LEAST
<a name="r_GREATEST_LEAST"></a>

Renvoie la valeur la plus grande ou la plus petite d’une liste d’un nombre quelconque d’expressions.

## Syntaxe
<a name="r_GREATEST_LEAST-synopsis"></a>

```
GREATEST (value [, ...])
LEAST (value [, ...])
```

## Parameters
<a name="r_GREATEST_LEAST-arguments"></a>

*expression\$1list*  
Liste d’expressions séparées par des virgules, telles que des noms de colonnes. Les expressions doivent toutes être converties dans un type de données commun. Les valeurs NULL de la liste sont ignorées. Si toutes les expressions sont évaluées à NULL, le résultat est NULL.

## Renvoie
<a name="r_GREATEST_LEAST-returns"></a>

Renvoie la plus grande (pour GREATEST) ou la plus petite (pour LEAST) valeur de la liste d’expressions fournie.

## Exemple
<a name="r_GREATEST_LEAST-examples"></a>

L’exemple suivant renvoie la valeur la plus élevée dans l’ordre alphabétique pour `firstname` ou `lastname`.

```
select firstname, lastname, greatest(firstname,lastname) from users
where userid < 10
order by 3;

 firstname | lastname  | greatest
-----------+-----------+-----------
 Lars      | Ratliff   | Ratliff
 Reagan    | Hodge     | Reagan
 Colton    | Roy       | Roy
 Barry     | Roy       | Roy
 Tamekah   | Juarez    | Tamekah
 Rafael    | Taylor    | Taylor
 Victor    | Hernandez | Victor
 Vladimir  | Humphrey  | Vladimir
 Mufutau   | Watkins   | Watkins
(9 rows)
```

# Fonctions NVL et COALESCE
<a name="r_NVL_function"></a>

Renvoie la valeur de la première expression qui n’est pas nulle dans une série d’expressions. Lorsqu’une valeur non nulle est trouvée, les expressions restantes de la liste ne sont pas évaluées. 

NVL est identique à COALESCE. Ce sont des synonymes. Cette rubrique explique la syntaxe et contient des exemples pour les deux.

## Syntaxe
<a name="r_NVL_function-synopsis"></a>

```
NVL( expression, expression, ... )
```

La syntaxe de COALESCE est identique :

```
COALESCE( expression, expression, ... )
```

Si toutes les expressions régulières sont null, le résultat est null.

Ces fonctions sont utiles lorsque vous souhaitez renvoyer une valeur secondaire lorsqu’une valeur primaire est manquante ou nulle. Par exemple, une requête peut renvoyer le premier des trois numéros de téléphone disponibles : portable, domicile ou travail. L’ordre des expressions dans la fonction détermine l’ordre d’évaluation.

## Arguments
<a name="r_NVL_function-arguments"></a>

 *expression*   
Expression, telle qu’un nom de colonne, à évaluer pour l’état null.

## Type de retour
<a name="r_NVL_function-returntype"></a>

Amazon Redshift détermine le type de données de la valeur renvoyée en fonction des expressions d’entrée. Si les types de données des expressions d’entrée n’ont pas de type commun, une erreur est renvoyée.

## Exemples
<a name="r_NVL_function-examples"></a>

Si la liste contient des expressions entières, la fonction renvoie un entier. 

```
SELECT COALESCE(NULL, 12, NULL);

coalesce
--------------
12
```

Cet exemple, qui est identique à l’exemple précédent, sauf qu’il utilise NVL, renvoie le même résultat. 

```
SELECT NVL(NULL, 12, NULL);

coalesce
--------------
12
```

L’exemple suivant renvoie une chaîne de caractères.

```
SELECT COALESCE(NULL, 'Amazon Redshift', NULL);

coalesce
--------------
Amazon Redshift
```

L’exemple suivant génère une erreur car les types de données varient dans la liste d’expressions. Dans ce cas, la liste contient à la fois un type de chaîne et un type de nombre.

```
SELECT COALESCE(NULL, 'Amazon Redshift', 12);
ERROR: invalid input syntax for integer: "Amazon Redshift"
```

Dans cet exemple, vous créez une table avec les colonnes START\$1DATE et END\$1DATE, vous insérez des lignes comprenant des valeurs nulles, puis vous appliquez une expression NVL aux deux colonnes.

```
create table datetable (start_date date, end_date date);           
insert into datetable values ('2008-06-01','2008-12-31');
insert into datetable values (null,'2008-12-31');
insert into datetable values ('2008-12-31',null);
```

```
select nvl(start_date, end_date)
from datetable
order by 1;
               
coalesce
------------
2008-06-01
2008-12-31
2008-12-31
```

Le nom de colonne par défaut pour une expression NVL est COALESCE. La requête suivante renvoie les mêmes résultats :

```
select coalesce(start_date, end_date)
from datetable
order by 1;
```

Dans les exemples de requêtes suivants, vous créez une table contenant des exemples d’informations sur les réservations d’hôtel et insérez plusieurs lignes. Certains enregistrements contiennent des valeurs nulles.

```
create table booking_info (booking_id int, booking_code character(8), check_in date, check_out date, funds_collected numeric(12,2));
```

Insérez l’exemple de données suivant. Certains enregistrements n’ont pas de date `check_out` ou de montant `funds_collected`.

```
insert into booking_info values (1, 'OCEAN_WV', '2023-02-01','2023-02-03',100.00);
insert into booking_info values (2, 'OCEAN_WV', '2023-04-22','2023-04-26',120.00);
insert into booking_info values (3, 'DSRT_SUN', '2023-03-13','2023-03-16',125.00);
insert into booking_info values (4, 'DSRT_SUN', '2023-06-01','2023-06-03',140.00);
insert into booking_info values (5, 'DSRT_SUN', '2023-07-10',null,null);
insert into booking_info values (6, 'OCEAN_WV', '2023-08-15',null,null);
```

La requête suivante renvoie une liste de dates. Si la date `check_out` n’est pas disponible, la date `check_in` est indiquée.

```
select coalesce(check_out, check_in)
from booking_info
order by booking_id;
```

Voici les résultats. Notez que les deux derniers enregistrements indiquent la date `check_in`.

```
coalesce
------------
2023-02-03
2023-04-26	
2023-03-16	
2023-06-03	
2023-07-10	
2023-08-15
```

Si vous prévoyez qu’une requête renvoie des valeurs null pour certaines fonctions ou colonnes, vous pouvez utiliser une expression NVL pour remplacer les valeurs NULL par une autre valeur. Par exemple, les fonctions d’agrégation, telles que SUM, renvoient des valeurs null au lieu de zéros lorsqu’elles n’ont aucune ligne à évaluer. Vous pouvez utiliser une expression NVL pour remplacer ces valeurs null par `700.0`. Au lieu de `485`, la somme de `funds_collected` a pour résultat `1885`, car les deux lignes contenant la valeur null sont remplacées par `700`.

```
select sum(nvl(funds_collected, 700.0)) as sumresult from booking_info;
               
sumresult
------
 1885
```

# NVL2 fonction
<a name="r_NVL2"></a>

Renvoie l’une des deux valeurs selon qu’une expression spécifiée a pour valeur NULL ou NOT NULL.

## Syntaxe
<a name="r_NVL2-synopsis"></a>

```
NVL2 ( expression, not_null_return_value, null_return_value )
```

## Arguments
<a name="r_NVL2-arguments"></a>

 *expression*   
Expression, telle qu’un nom de colonne, à évaluer pour l’état null.

 *not\$1null\$1return\$1value*   
Valeur renvoyée si *expression* a une valeur NOT NULL. La valeur *not\$1null\$1return\$1value* doit avoir le même type de données que *expression* ou être implicitement convertie en ce type de données.

 *null\$1return\$1value*   
Valeur renvoyée si *expression* a une valeur NULL. La valeur *null\$1return\$1value* doit avoir le même type de données que *expression* ou être implicitement convertie en ce type de données.

## Type de retour
<a name="r_NVL2-return-type"></a>

Le type de NVL2 retour est déterminé comme suit :
+ Si *not\$1null\$1return\$1value* ou *null\$1return\$1value* a une valeur null, le type de données de l’expression non-null est renvoyé.

Si *not\$1null\$1return\$1value* et *null\$1return\$1value* n’ont pas de valeur null :
+ Si *not\$1null\$1return\$1value* et *null\$1return\$1value* ont le même type de données que le type de données renvoyé.
+ Si *not\$1null\$1return\$1value* et *null\$1return\$1value* ont des types de données numériques distincts, le type de données numériques compatible le plus petit est renvoyé.
+ Si *not\$1null\$1return\$1value* et *null\$1return\$1value* ont des types de données datetime distincts, un type de données d’horodatage est renvoyé.
+ Si *not\$1null\$1return\$1value* et *null\$1return\$1value* ont des types de données de caractères distincts, le type de données *not\$1null\$1return\$1value* est renvoyé.
+ Si *not\$1null\$1return\$1value* et *null\$1return\$1value* ont des types de données numériques et non numériques mixtes, le type de données de *not\$1null\$1return\$1value* est renvoyé.

**Important**  
Dans les deux derniers cas où le type de données de *not\$1null\$1return\$1value* est renvoyé, *null\$1return\$1value* est converti implicitement en ce type de données. Si les types de données sont incompatibles, la fonction échoue.

## Notes d’utilisation
<a name="nvl2-usage-notes"></a>

[Fonction DECODE](r_DECODE_expression.md)peut être utilisé de la même manière que NVL2 lorsque l'*expression* et les paramètres *de recherche* sont tous deux nuls. La différence est que pour DECODE, le retour comportera à la fois la valeur et le type de données du paramètres *result*. *En revanche, pour NVL2, le retour aura la valeur du paramètre *not\$1null\$1return\$1value ou null\$1return\$1value*, selon ce qui est sélectionné par la fonction, mais aura le *type de données not\$1null\$1return\$1value*.*

Par exemple, en supposant que column1 a la valeur NULL, les requêtes suivantes renverront la même valeur. Cependant, le type de données de la valeur de retour DECODE sera INTEGER et le type de données de la valeur de NVL2 retour sera VARCHAR.

```
select decode(column1, null, 1234, '2345');
select nvl2(column1, '2345', 1234);
```

## Exemple
<a name="r_NVL2-examples"></a>

L’exemple suivant modifie quelques exemples de données, puis évalue les deux champs pour fournir des informations de contact aux utilisateurs : 

```
update users set email = null where firstname = 'Aphrodite' and lastname = 'Acevedo';

select (firstname + ' ' + lastname) as name, 
nvl2(email, email, phone) AS contact_info
from users 
where state = 'WA'
and lastname  like 'A%'
order by lastname, firstname;

name			     contact_info	
--------------------+-------------------------------------------
Aphrodite Acevedo	(906) 632-4407
Caldwell Acevedo 	Nunc.sollicitudin@Duisac.ca
Quinn Adams		  vel@adipiscingligulaAenean.com
Kamal Aguilar		quis@vulputaterisusa.com
Samson Alexander	 hendrerit.neque@indolorFusce.ca
Hall Alford		  ac.mattis@vitaediamProin.edu
Lane Allen		   et.netus@risusDonec.org
Xander Allison	   ac.facilisis.facilisis@Infaucibus.com
Amaya Alvarado	   dui.nec.tempus@eudui.edu
Vera Alvarez		 at.arcu.Vestibulum@pellentesque.edu
Yetta Anthony		enim.sit@risus.org
Violet Arnold		ad.litora@at.com
August Ashley		consectetuer.euismod@Phasellus.com
Karyn Austin		 ipsum.primis.in@Maurisblanditenim.org
Lucas Ayers		  at@elitpretiumet.com
```

# Fonction NULLIF
<a name="r_NULLIF_function"></a>

## Syntaxe
<a name="r_NULLIF_function-synopsis"></a>

L’expression NULLIF compare les deux arguments et renvoie la valeur nulle si les arguments sont égaux. Si ce n’est pas le cas, le premier argument est renvoyé. Cette expression est l’inverse de l’expression NVL ou COALESCE.

```
NULLIF ( expression1, expression2 )
```

## Arguments
<a name="r_NULLIF_function-arguments"></a>

 *expression1, expression2*   
Colonnes ou expressions cible qui sont comparées. Le type de retour est le identique au type de la première expression. Le nom de colonne par défaut du résultat NULLIF correspond à celui de la première expression.

## Exemples
<a name="r_NULLIF_function-examples"></a>

Dans l’exemple suivant, la requête renvoie la chaîne `first` car les arguments ne sont pas égaux.

```
SELECT NULLIF('first', 'second');

case
-------
first
```

Dans l’exemple suivant, la requête renvoie `NULL` car les arguments littéraux de la chaîne sont égaux.

```
SELECT NULLIF('first', 'first');

case
-------
NULL
```

Dans l’exemple suivant, la requête renvoie `1` car les arguments entiers ne sont pas égaux.

```
SELECT NULLIF(1, 2);

case
-------
1
```

Dans l’exemple suivant, la requête renvoie `NULL` car les arguments entiers sont égaux.

```
SELECT NULLIF(1, 1);

case
-------
NULL
```

Dans l’exemple suivant, la requête renvoie la valeur nulle lorsque les valeurs LISTID et SALESID correspondent :

```
select nullif(listid,salesid), salesid
from sales where salesid<10 order by 1, 2 desc;

listid  | salesid
--------+---------
     4  |       2
     5  |       4
     5  |       3
     6  |       5
     10 |       9
     10 |       8
     10 |       7
     10 |       6
        |       1
(9 rows)
```

Vous pouvez utiliser NULLIF pour vous assurer que les chaînes vides sont toujours renvoyées sous forme de valeurs NULL. Dans l’exemple ci-dessous, l’expression NULLIF renvoie une valeur null ou une chaîne qui contient au moins un caractère.

```
insert into category
values(0,'','Special','Special');

select nullif(catgroup,'') from category
where catdesc='Special';

catgroup
----------
null
(1 row)
```

NULLIF ignore les espaces de fin. Si une chaîne n’est pas vide, mais contient des espaces, NULLIF renvoie toujours null :

```
create table nulliftest(c1 char(2), c2 char(2));

insert into nulliftest values ('a','a ');

insert into nulliftest values ('b','b');


select nullif(c1,c2) from nulliftest;
c1
------
null
null
(2 rows)
```

# Fonctions de formatage des types de données
<a name="r_Data_type_formatting"></a>

**Topics**
+ [Fonction CAST](r_CAST_function.md)
+ [Fonction CONVERT](r_CONVERT_function.md)
+ [TEXT\$1TO\$1INT\$1ALT](r_TEXT_TO_INT_ALT.md)
+ [TEXT\$1TO\$1NUMERIC\$1ALT](r_TEXT_TO_NUMERIC_ALT.md)
+ [TO\$1CHAR](r_TO_CHAR.md)
+ [Fonction TO\$1DATE](r_TO_DATE_function.md)
+ [TO\$1NUMBER](r_TO_NUMBER.md)
+ [Fonction TRY\$1CAST](r_TRY_CAST.md)
+ [Chaînes de format datetime](r_FORMAT_strings.md)
+ [Chaînes de format numériques](r_Numeric_formating.md)
+ [Caractères de formatage de type Teradata pour les données numériques](r_Numeric-format-teradata.md)

Les fonctions de formatage des types de données offrent un moyen simple de convertir des valeurs d’un type de données à un autre. Pour chacune de ces fonctions, le premier argument est toujours la valeur à formater et le second argument contient le modèle du nouveau format. Amazon Redshift prend en charge plusieurs fonctions de formatage des types de données.

# Fonction CAST
<a name="r_CAST_function"></a>

La fonction CAST convertit un type de données en un autre type de données compatible. Par exemple, vous pouvez convertir une chaîne en date ou un type numérique en chaîne. CAST effectue une conversion d’exécution, ce qui signifie que la conversion ne modifie pas le type de données d’une valeur dans une table source. Elle n’est modifiée que dans le contexte de la requête.

La fonction CAST est très similaire à la fonction [Fonction CONVERT](r_CONVERT_function.md), en ce sens qu’elles convertissent toutes deux un type de données en un autre, mais elles sont appelées différemment.

Certains types de données nécessitent une conversion explicite en d’autres types de données à l’aide de la fonction CAST ou CONVERT. D’autres types de données peuvent être convertis implicitement, dans le cadre d’une autre commande, sans utiliser CAST ou CONVERT. Consultez [Compatibilité et conversion de types](c_Supported_data_types.md#r_Type_conversion). 

## Syntaxe
<a name="r_CAST_function-syntax"></a>

Utilisez l’une de ces deux formes de syntaxes équivalentes pour convertir les expressions cast d’un type de données à un autre.

```
CAST ( expression AS type )
expression :: type
```

## Arguments
<a name="r_CAST_function-arguments"></a>

 *expression*   
Expression qui correspond à une ou plusieurs valeurs, par exemple un nom de colonne ou un littéral. La conversion de valeurs null renvoie des valeurs null. L’expression ne peut pas contenir des chaînes vides. 

 *type*   
L’un des [Types de données](c_Supported_data_types.md) pris en charge. 

## Type de retour
<a name="r_CAST_function-return-type"></a>

CAST renvoie le type de données spécifié par l’argument *type*. 

**Note**  
Amazon Redshift renvoie une erreur si vous essayez d’effectuer une conversion problématique, telle que la conversion DECIMAL suivante qui perd en précision :   

```
select 123.456::decimal(2,1);
```
ou une conversion INTEGER qui entraîne un dépassement de capacité :   

```
select 12345678::smallint;
```

## Exemples
<a name="r_CAST_function-examples"></a>

Certains exemples utilisent l’exemple de [base de données TICKIT](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html). Pour plus d’informations sur la configuration des exemples de données, consultez [Charger des données](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html).

Les deux requêtes suivantes sont équivalentes. Toutes deux convertissent une valeur décimale en un nombre entier : 

```
select cast(pricepaid as integer)
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

```
select pricepaid::integer
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

Ce qui suit produit un résultat similaire. Il ne nécessite pas d’exemples de données pour s’exécuter : 

```
select cast(162.00 as integer) as pricepaid;

pricepaid
-----------
162
(1 row)
```

Dans cet exemple, les valeurs d’une colonne d’horodatage sont converties en dates, ce qui entraîne la suppression de l’horodatage de chaque résultat :

```
select cast(saletime as date), salesid
from sales order by salesid limit 10;

 saletime  | salesid
-----------+---------
2008-02-18 |       1
2008-06-06 |       2
2008-06-06 |       3
2008-06-09 |       4
2008-08-31 |       5
2008-07-16 |       6
2008-06-26 |       7
2008-07-10 |       8
2008-07-22 |       9
2008-08-06 |      10
(10 rows)
```

Si vous n’avez pas utilisé CAST comme illustré dans l’exemple précédent, les résultats incluraient l’heure : *2008-02-18 02:36:48*.

La requête suivante convertit des données de caractères variables en date. Elle ne nécessite pas d’exemples de données pour s’exécuter. 

```
select cast('2008-02-18 02:36:48' as date) as mysaletime;

mysaletime    
--------------------
2008-02-18  
(1 row)
```

Dans cet exemple, les valeurs d’une colonne de dates sont converties en horodatages : 

```
select cast(caldate as timestamp), dateid
from date order by dateid limit 10;

      caldate       | dateid
--------------------+--------
2008-01-01 00:00:00 |   1827
2008-01-02 00:00:00 |   1828
2008-01-03 00:00:00 |   1829
2008-01-04 00:00:00 |   1830
2008-01-05 00:00:00 |   1831
2008-01-06 00:00:00 |   1832
2008-01-07 00:00:00 |   1833
2008-01-08 00:00:00 |   1834
2008-01-09 00:00:00 |   1835
2008-01-10 00:00:00 |   1836
(10 rows)
```

Dans un cas comme dans l’exemple précédent, vous pouvez obtenir un contrôle supplémentaire sur le formatage de sortie en utilisant [TO\$1CHAR](https://docs.aws.amazon.com/redshift/latest/dg/r_TO_CHAR.html).

Dans cet exemple, un nombre entier est converti en chaîne de caractères : 

```
select cast(2008 as char(4));

bpchar
--------
2008
```

Dans cet exemple, une valeur DECIMAL(6,3) est convertie en valeur DECIMAL(4,1) : 

```
select cast(109.652 as decimal(4,1));

numeric
---------
109.7
```

Cet exemple montre une expression plus complexe. La colonne PRICEPAID (colonne DECIMAL(8,2)) de la table SALES est convertie en une colonne DECIMAL(38,2) et les valeurs sont multipliées par 100000000000000000000 : 

```
select salesid, pricepaid::decimal(38,2)*100000000000000000000
as value from sales where salesid<10 order by salesid;


 salesid |           value
---------+----------------------------
       1 | 72800000000000000000000.00
       2 |  7600000000000000000000.00
       3 | 35000000000000000000000.00
       4 | 17500000000000000000000.00
       5 | 15400000000000000000000.00
       6 | 39400000000000000000000.00
       7 | 78800000000000000000000.00
       8 | 19700000000000000000000.00
       9 | 59100000000000000000000.00
(9 rows)
```

**Note**  
Vous ne pouvez pas effectuer d’opération CAST ou CONVERT sur le type de données `GEOMETRY` pour le remplacer par un autre type de données. Toutefois, vous pouvez fournir une représentation hexadécimale du littéral d’une chaîne au format EWKB (extended well-known binary) en tant qu’entrée des fonctions qui acceptent un argument `GEOMETRY`. Par exemple, la fonction `ST_AsText` suivante attend un type de données `GEOMETRY`.   

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
Vous pouvez également spécifier de façon explicite le type de données `GEOMETRY`.   

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```

# Fonction CONVERT
<a name="r_CONVERT_function"></a>

Comme la [fonction CAST](https://docs.aws.amazon.com/redshift/latest/dg/r_CAST_function.html), la fonction CONVERT convertit un type de données en un autre type de données compatible. Par exemple, vous pouvez convertir une chaîne en date ou un type numérique en chaîne. CONVERT effectue une conversion au moment de l’exécution, ce qui signifie que la conversion ne modifie pas le type de données d’une valeur dans une table source. Elle n’est modifiée que dans le contexte de la requête.

Certains types de données nécessitent une conversion explicite en d’autres types de données à l’aide de la fonction CONVERT. D’autres types de données peuvent être convertis implicitement, dans le cadre d’une autre commande, sans utiliser CAST ou CONVERT. Consultez [Compatibilité et conversion de types](c_Supported_data_types.md#r_Type_conversion). 

## Syntaxe
<a name="r_CONVERT-syntax"></a>

```
CONVERT ( type, expression )
```

## Arguments
<a name="r_CONVERT-arguments"></a>

 *type*   
L’un des [Types de données](c_Supported_data_types.md) pris en charge. 

 *expression*   
Expression qui correspond à une ou plusieurs valeurs, par exemple un nom de colonne ou un littéral. La conversion de valeurs null renvoie des valeurs null. L’expression ne peut pas contenir des chaînes vides. 

## Type de retour
<a name="r_CONVERT-return-type"></a>

CONVERT renvoie le type de données spécifié par l’argument *type*.

**Note**  
Amazon Redshift renvoie une erreur si vous essayez d’effectuer une conversion problématique, telle que la conversion DECIMAL suivante qui perd en précision :   

```
SELECT CONVERT(decimal(2,1), 123.456);
```
ou une conversion INTEGER qui entraîne un dépassement de capacité :   

```
SELECT CONVERT(smallint, 12345678);
```

## Exemples
<a name="r_CONVERT-examples"></a>

Certains exemples utilisent l’exemple de [base de données TICKIT](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html). Pour plus d’informations sur la configuration des exemples de données, consultez [Charger des données](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html).

La requête suivante utilise la fonction CONVERT pour convertir une colonne de décimales en nombres entiers.

```
SELECT CONVERT(integer, pricepaid)
FROM sales WHERE salesid=100;
```

Cet exemple convertit un nombre entier en une chaîne de caractères.

```
SELECT CONVERT(char(4), 2008);
```

Dans cet exemple, la date et l’heure actuelles sont converties en un type de données de caractères variables : 

```
SELECT CONVERT(VARCHAR(30), GETDATE());

getdate
---------
2023-02-02 04:31:16
```

Cet exemple convertit la colonne saletime en heure uniquement, en supprimant les dates de chaque ligne.

```
SELECT CONVERT(time, saletime), salesid
FROM sales order by salesid limit 10;
```

Pour plus d’informations sur la conversion d’un horodatage d’un fuseau horaire vers un autre, consultez [Fonction CONVERT\$1TIMEZONE](CONVERT_TIMEZONE.md). Pour les autres fonctions de date et d’heure, consultez [Fonctions de date et d’heure](Date_functions_header.md).

L’exemple suivant convertit des données à caractères variables en un objet de type datetime.

```
SELECT CONVERT(datetime, '2008-02-18 02:36:48') as mysaletime;
```

**Note**  
Vous ne pouvez pas effectuer d’opération CAST ou CONVERT sur le type de données `GEOMETRY` pour le remplacer par un autre type de données. Toutefois, vous pouvez fournir une représentation hexadécimale du littéral d’une chaîne au format EWKB (extended well-known binary) en tant qu’entrée des fonctions qui acceptent un argument `GEOMETRY`. Par exemple, la fonction `ST_AsText` suivante attend un type de données `GEOMETRY`.   

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
Vous pouvez également spécifier de façon explicite le type de données `GEOMETRY`.   

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```

# TEXT\$1TO\$1INT\$1ALT
<a name="r_TEXT_TO_INT_ALT"></a>

TEXT\$1TO\$1INT\$1ALT convertit une chaîne de caractères en nombre entier à l’aide d’un formatage de style Teradata. Dans le résultat, les chiffres après la virgule sont tronqués.

## Syntaxe
<a name="r_TEXT_TO_INT_ALT-synopsis"></a>

```
TEXT_TO_INT_ALT (expression [ , 'format'])
```

## Arguments
<a name="r_TEXT_TO_INT_ALT-arguments"></a>

 *expression*   
Expression qui génère une ou plusieurs valeurs CHAR ou VARCHAR, telles qu’un nom de colonne ou une chaîne littérale. La conversion de valeurs null renvoie des valeurs null. La fonction convertit les chaînes vides en 0. 

 *format*   
Littéral de chaîne qui définit le format de l’expression en entrée. Pour plus d’informations sur les caractères de formatage que vous pouvez spécifier, consultez [Caractères de formatage de type Teradata pour les données numériques](r_Numeric-format-teradata.md). 

## Type de retour
<a name="r_TEXT_TO_INT_ALT-return-type"></a>

TEXT\$1TO\$1INT\$1ALT renvoie une valeur INTEGER.

La partie après la virgule du résultat de la conversion est tronquée.

Amazon Redshift renvoie une erreur si la conversion dans la phrase *format* que vous spécifiez n’a pas réussi.

## Exemples
<a name="r_TEXT_TO_INT_ALT-examples"></a>

L’exemple suivant convertit la chaîne d’*expression* en entrée 123- en nombre entier -123.

```
select text_to_int_alt('123-');
```

```
text_to_int_alt
----------
      -123
```

L’exemple suivant convertit la chaîne d’*expression* en entrée 2147483647\$1 en nombre entier 2147483647.

```
select text_to_int_alt('2147483647+');
```

```
text_to_int_alt
----------
2147483647
```

L’exemple suivant convertit la chaîne d’*expression* en entrée exponentielle -123E-2 en nombre entier -1.

```
select text_to_int_alt('-123E-2');
```

```
text_to_int_alt
----------
        -1
```

L’exemple suivant convertit la chaîne d’*expression* en entrée 2147483647\$1 en nombre entier 2147483647.

```
select text_to_int_alt('2147483647+');
```

```
text_to_int_alt
----------
2147483647
```

L’exemple suivant convertit la chaîne d’*expression* en entrée 123\$1 avec la phrase *format* 999S en nombre entier 1230. Le caractère S indique une « Signed Zoned Decimal ». Pour de plus amples informations, veuillez consulter [Caractères de formatage de type Teradata pour les données numériques](r_Numeric-format-teradata.md).

```
select text_to_int_alt('123{', '999S');
```

```
text_to_int_alt
----------
      1230
```

L'exemple suivant convertit la chaîne d'*expression* d'entrée « USD123 » avec la phrase de *format* « C9 (I) » en un entier 123. Consultez [Caractères de formatage de type Teradata pour les données numériques](r_Numeric-format-teradata.md).

```
select text_to_int_alt('USD123', 'C9(I)');
```

```
text_to_int_alt
----------
       123
```

L’exemple suivant spécifie une colonne de table comme étant l’*expression* en entrée.

```
select text_to_int_alt(a), text_to_int_alt(b) from t_text2int order by 1;
```

```
 text_to_int_alt | text_to_int_alt
-----------------+-----------------
            -123 |            -123
            -123 |            -123
             123 |             123
             123 |             123
```

Voici la définition de la table et l’instruction insert pour cet exemple.

```
create table t_text2int (a varchar(200), b char(200));
```

```
insert into t_text2int VALUES('123', '123'),('123.123', '123.123'), ('-123', '-123'), ('123-', '123-');
```

# TEXT\$1TO\$1NUMERIC\$1ALT
<a name="r_TEXT_TO_NUMERIC_ALT"></a>

TEXT\$1TO\$1NUMERIC\$1ALT effectue une opération de conversion de style Teradata pour convertir une chaîne de caractères en un format de données numériques. 

## Syntaxe
<a name="r_TEXT_TO_NUMERIC_ALT-synopsis"></a>

```
TEXT_TO_NUMERIC_ALT (expression [, 'format'] [, precision, scale])
```

## Arguments
<a name="r_TEXT_TO_NUMERIC_ALT-arguments"></a>

 *expression*   
Expression qui correspond à une ou plusieurs valeurs CHAR ou VARCHAR, par exemple, un nom de colonne ou un littéral. La conversion de valeurs null renvoie des valeurs null. Les chaînes vides sont converties en 0. 

 *format*   
Littéral de chaîne qui définit le format de l’expression en entrée. Pour plus d'informations, consultez [Caractères de formatage de type Teradata pour les données numériques](r_Numeric-format-teradata.md). 

 *precision*   
Nombre de chiffres dans le résultat numérique. La valeur par défaut est 38. 

 *échelle*   
Nombre de chiffres à droite de la virgule décimale dans le résultat numérique. La valeur par défaut est 0. 

## Type de retour
<a name="r_TEXT_TO_NUMERIC_ALT-return-type"></a>

TEXT\$1TO\$1NUMERIC\$1ALT renvoie un nombre DECIMAL.

Amazon Redshift renvoie une erreur si la conversion dans la phrase *format* que vous spécifiez n’a pas réussi.

Amazon Redshift convertit la chaîne d’*expression* en entrée en type numérique avec la précision la plus élevée que vous spécifiez pour ce type dans l’option *precision*. Si la longueur de la valeur numérique dépasse la valeur que vous spécifiez pour *precision*, Amazon Redshift arrondit la valeur numérique en appliquant les règles suivantes :
+ Si la longueur du résultat de la conversion dépasse la longueur que vous spécifiez dans la phrase *format*, Amazon Redshift renvoie une erreur.
+ Si le résultat est converti en une valeur numérique, le résultat est arrondi à la valeur la plus proche. Si la partie après la virgule se trouve exactement à mi-chemin entre les résultats supérieur et inférieur de la conversion, le résultat est arrondi à la valeur pair la plus proche.

## Exemples
<a name="r_TEXT_TO_NUMERIC_ALT-examples"></a>

L’exemple suivant convertit la chaîne d’*expression* en entrée 1.5 en valeur numérique 2. Parce que l’instruction ne spécifie pas d’*échelle*, l’*échelle* par défaut est 0 et le résultat de la conversion n’inclut pas les chiffres après la virgule. Etant donné que .5 est à mi-chemin entre 1 et 2, le résultat de la conversion est arrondi à la valeur pair de 2.

```
select text_to_numeric_alt('1.5');
```

```
 text_to_numeric_alt
---------------------
                   2
```

L’exemple suivant convertit la chaîne d’*expression* en entrée 2.51 en valeur numérique 3. Parce que l’instruction ne spécifie pas d’*échelle*, la valeur d’*échelle* par défaut est 0 et le résultat de la conversion n’inclut pas les chiffres après la virgule. Étant donné que .51 est plus proche de 3 que 2, le résultat de la conversion est arrondi à la valeur de 3.

```
select text_to_numeric_alt('2.51');
```

```
 text_to_numeric_alt
---------------------
                   3
```

L’exemple suivant convertit la chaîne d’*expression* en entrée 123.52501 avec une *précision* de 10 et une *échelle* de 2 en valeur numérique 123,53. 

```
select text_to_numeric_alt('123.52501', 10, 2);
```

```
 text_to_numeric_alt
---------------------
               123.53
```

L’exemple suivant convertit la chaîne d’*expression* en entrée 123\$1 avec la phrase *format* 999S en nombre 1230. Le caractère S indique une « Signed Zoned Decimal ». Pour de plus amples informations, veuillez consulter [Caractères de formatage de type Teradata pour les données numériques](r_Numeric-format-teradata.md).

```
select text_to_numeric_alt('123{', '999S');
```

```
text_to_int_alt
----------
      1230
```

L'exemple suivant convertit la chaîne d'*expression* d'entrée « USD123 » avec la phrase de *format* « C9 (I) » en 124 numérique. Consultez [Caractères de formatage de type Teradata pour les données numériques](r_Numeric-format-teradata.md).

```
select text_to_numeric_alt('USD123.9', 'C9(I)');
```

```
text_to_numeric_alt
----------
       124
```

L’exemple suivant spécifie une colonne de table comme étant l’*expression* en entrée.

```
select text_to_numeric_alt(a), text_to_numeric_alt(b) from t_text2numeric order by 1;
```

```
           text_to_numeric_alt           |           text_to_numeric_alt
-----------------------------------------+-----------------------------------------
 -99999999999999999999999999999999999999 | -99999999999999999999999999999999999999
                                  -12300 |                                  -12300
                                     123 |                                     123
                                     123 |                                     123
  99999999999999999999999999999999999999 |  99999999999999999999999999999999999999
```

Voici la définition de la table et l’instruction insert pour cet exemple.

```
create table  t_text2numeric (a varchar(200), b char(200));
```

```
insert into  t_text2numeric values
('123', '123'),
('+123.456', '+123.456'),
('-' || repeat('9', 38), '-' || repeat('9', 38)),
(repeat('9', 38) || '+', repeat('9', 38) || '+'),
('-123E2', '-123E2');
```

# TO\$1CHAR
<a name="r_TO_CHAR"></a>

TO\$1CHAR convertit un horodatage ou une expression numérique en un format de données de chaînes de caractères. 

## Syntaxe
<a name="r_TO_CHAR-synopsis"></a>

```
TO_CHAR (timestamp_expression | numeric_expression , 'format')
```

## Arguments
<a name="r_TO_CHAR-arguments"></a>

 *timestamp\$1expression*   
Expression qui se traduit par une valeur de type TIMESTAMP ou TIMESTAMPTZ ou par une valeur qui peut être implicitement convertie en un horodatage. 

 *numeric\$1expression*   
Expression qui se traduit par une valeur de type de données numérique ou par une valeur qui peut être implicitement convertie en un type numérique. Pour plus d'informations, consultez [Types numériques](r_Numeric_types201.md). TO\$1CHAR insère un espace à gauche de la chaîne numérique.  
TO\$1CHAR ne prend pas en charge les valeurs DECIMAL de 128 bits. 

 *format*   
Format de la nouvelle valeur. Pour connaître les formats valides, consultez [Chaînes de format datetime](r_FORMAT_strings.md) et [Chaînes de format numériques](r_Numeric_formating.md). 

## Type de retour
<a name="r_TO_CHAR-return-type"></a>

VARCHAR

## Exemples
<a name="r_TO_CHAR-examples"></a>

L’exemple suivant convertit un horodatage en une valeur contenant la date et l’heure dans un format comprenant le nom du mois rempli jusqu’à neuf caractères, le nom du jour de la semaine et le numéro du jour du mois.

```
select to_char(timestamp '2009-12-31 23:15:59', 'MONTH-DY-DD-YYYY HH12:MIPM');

to_char
-------------------------
DECEMBER -THU-31-2009 11:15PM
```

L’exemple suivant convertit un horodatage en une valeur avec le numéro du jour de l’année.

```
select to_char(timestamp '2009-12-31 23:15:59', 'DDD');

to_char
-------------------------
365
```

L’exemple suivant convertit un horodatage en un numéro de jour de la semaine ISO.

```
select to_char(timestamp '2022-05-16 23:15:59', 'ID');

to_char
-------------------------
1
```

L’exemple suivant extrait le nom du mois d’une date.

```
select to_char(date '2009-12-31', 'MONTH');

to_char
-------------------------
DECEMBER
```

L’exemple suivant convertit chaque valeur STARTTIME de la table EVENT en une chaîne composée d’heures, de minutes et de secondes.

```
select to_char(starttime, 'HH12:MI:SS')
from event where eventid between 1 and 5
order by eventid;

to_char
----------
02:30:00
08:00:00
02:30:00
02:30:00
07:00:00
```

L’exemple suivant convertit une valeur d’horodatage complète en un format différent.

```
select starttime, to_char(starttime, 'MON-DD-YYYY HH12:MIPM')
from event where eventid=1;

      starttime      |       to_char
---------------------+---------------------
 2008-01-25 14:30:00 | JAN-25-2008 02:30PM
```

L’exemple suivant convertit un littéral d’horodatage en une chaîne de caractères.

```
select to_char(timestamp '2009-12-31 23:15:59','HH24:MI:SS');

to_char
----------
23:15:59
```

L’exemple suivant convertit un nombre décimal en une chaîne de caractères.

```
select to_char(125.8, '999.99');

to_char
---------
125.80
```

L’exemple suivant convertit un nombre décimal en une chaîne de caractères.

```
select to_char(125.8, '999D99');

to_char
---------
125.80
```

L’exemple suivant convertit un nombre en une chaîne de caractères commençant par zéro.

```
select to_char(125.8, '0999D99');

to_char
---------
0125.80
```

L’exemple suivant convertit un nombre en chaîne de caractères avec le signe moins à la fin.

```
select to_char(-125.8, '999D99S');

to_char
---------
125.80-
```

L’exemple suivant convertit un nombre en chaîne de caractères avec le signe plus ou moins à la position spécifiée.

```
select to_char(125.8, '999D99SG');

to_char
---------
125.80+
```

L’exemple suivant convertit un nombre en chaîne de caractères avec le signe plus à la position spécifiée.

```
select to_char(125.8, 'PL999D99');

to_char
---------
+ 125.80
```

L’exemple suivant convertit un nombre en chaîne de caractères avec le symbole de la devise.

```
select to_char(-125.88, '$S999D99');

to_char
---------
$-125.88
```

L’exemple suivant convertit un nombre en chaîne de caractères avec le symbole de la devise à la position spécifiée.

```
select to_char(-125.88, 'S999D99L');

to_char
---------
-125.88$
```

L’exemple suivant convertit un nombre en une chaîne de caractères utilisant un séparateur des milliers (virgule).

```
select to_char(1125.8, '9,999.99');

to_char
---------
1,125.80
```

L’exemple suivant convertit un nombre en une chaîne de caractères.

```
select to_char(-125.88, '$999D99PR');

to_char
---------
$<125.88>
```

L’exemple suivant convertit un nombre en chaîne numérale romaine.

```
select to_char(125, 'RN');

to_char
---------
   CXXV
```

L’exemple suivant convertit une date en code de siècle.

```
select to_char(date '2020-12-31', 'CC');

to_char
---------
21
```

L’exemple suivant affiche le jour de la semaine.

```
SELECT to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS');

to_char
-----------------------
Wednesday, 31 09:34:26
```

L’exemple suivant affiche le suffixe ordinal d’un nombre.

```
SELECT to_char(482, '999th');

to_char
-----------------------
 482nd
```

L’exemple suivant soustraie la commission du prix d’achat de la table des ventes. La différence est ensuite arrondie et convertie en un chiffre romain, indiqué dans la colonne to\$1char : 

```
select salesid, pricepaid, commission, (pricepaid - commission)
as difference, to_char(pricepaid - commission, 'rn') from sales
group by sales.pricepaid, sales.commission, salesid
order by salesid limit 10;

 salesid | pricepaid | commission | difference |     to_char
---------+-----------+------------+------------+-----------------
       1 |    728.00 |     109.20 |     618.80 |           dcxix
       2 |     76.00 |      11.40 |      64.60 |             lxv
       3 |    350.00 |      52.50 |     297.50 |        ccxcviii
       4 |    175.00 |      26.25 |     148.75 |           cxlix
       5 |    154.00 |      23.10 |     130.90 |           cxxxi
       6 |    394.00 |      59.10 |     334.90 |         cccxxxv
       7 |    788.00 |     118.20 |     669.80 |           dclxx
       8 |    197.00 |      29.55 |     167.45 |          clxvii
       9 |    591.00 |      88.65 |     502.35 |             dii
      10 |     65.00 |       9.75 |      55.25 |              lv
```

L’exemple suivant ajoute le symbole de la devise aux valeurs de différence affichées dans la colonne to\$1char : 

```
select salesid, pricepaid, commission, (pricepaid - commission)
as difference, to_char(pricepaid - commission, 'l99999D99') from sales
group by sales.pricepaid, sales.commission, salesid
order by salesid limit 10;

salesid | pricepaid | commission | difference |  to_char
--------+-----------+------------+------------+------------
      1 |    728.00 |     109.20 |     618.80 | $   618.80
      2 |     76.00 |      11.40 |      64.60 | $    64.60
      3 |    350.00 |      52.50 |     297.50 | $   297.50
      4 |    175.00 |      26.25 |     148.75 | $   148.75
      5 |    154.00 |      23.10 |     130.90 | $   130.90
      6 |    394.00 |      59.10 |     334.90 | $   334.90
      7 |    788.00 |     118.20 |     669.80 | $   669.80
      8 |    197.00 |      29.55 |     167.45 | $   167.45
      9 |    591.00 |      88.65 |     502.35 | $   502.35
     10 |     65.00 |       9.75 |      55.25 | $    55.25
```

L’exemple suivant répertorie le siècle au cours duquel chaque vente a été effectuée. 

```
select salesid, saletime, to_char(saletime, 'cc') from sales
order by salesid limit 10;

 salesid |      saletime       | to_char
---------+---------------------+---------
       1 | 2008-02-18 02:36:48 | 21
       2 | 2008-06-06 05:00:16 | 21
       3 | 2008-06-06 08:26:17 | 21
       4 | 2008-06-09 08:38:52 | 21
       5 | 2008-08-31 09:17:02 | 21
       6 | 2008-07-16 11:59:24 | 21
       7 | 2008-06-26 12:56:06 | 21
       8 | 2008-07-10 02:12:36 | 21
       9 | 2008-07-22 02:23:17 | 21
      10 | 2008-08-06 02:51:55 | 21
```

L’exemple suivant convertit chaque valeur STARTTIME de la table EVENT en une chaîne qui se compose d’heures, de minutes, de secondes et d’un fuseau horaire. 

```
select to_char(starttime, 'HH12:MI:SS TZ')
from event where eventid between 1 and 5
order by eventid;

to_char
----------
02:30:00 UTC
08:00:00 UTC
02:30:00 UTC
02:30:00 UTC
07:00:00 UTC
```

L’exemple suivant illustre la mise en forme des secondes, millisecondes et microsecondes.

```
select sysdate,
to_char(sysdate, 'HH24:MI:SS') as seconds,
to_char(sysdate, 'HH24:MI:SS.MS') as milliseconds,
to_char(sysdate, 'HH24:MI:SS:US') as microseconds;

timestamp           | seconds  | milliseconds | microseconds   
--------------------+----------+--------------+----------------
2015-04-10 18:45:09 | 18:45:09 | 18:45:09.325 | 18:45:09:325143
```

# Fonction TO\$1DATE
<a name="r_TO_DATE_function"></a>

TO\$1DATE convertit une date représentée par une chaîne de caractères en un type de données DATE. 

**Note**  
TO\$1DATE ne prend pas en charge les chaînes de format avec Q (numéro de trimestre).

## Syntaxe
<a name="r_TO_DATE_function-synopsis"></a>

```
TO_DATE(string, format)
```

```
TO_DATE(string, format, is_strict)
```

## Arguments
<a name="r_TO_DATE_function-arguments"></a>

 *string*   
Chaîne à convertir. 

 *format*   
Littéral de chaîne qui définit le format de la *chaîne* de sortie, en fonction de ses parties de date. Pour obtenir la liste des formats de jour, de mois et d’année valides, consultez [Chaînes de format datetime](r_FORMAT_strings.md). 

 *is\$1strict*   
Valeur booléenne facultative qui spécifie si une erreur est renvoyée lorsqu’une valeur de date d’entrée est hors plage. Quand *is\$1strict* est défini sur `TRUE`, une erreur est renvoyée s’il y a une valeur hors plage. Quand *is\$1strict* est défini sur `FALSE`, qui est la valeur par défaut, les valeurs en dépassement sont acceptées. 

## Type de retour
<a name="r_TO_DATE_function-return-type"></a>

TO\$1DATE renvoie une DATE, selon la valeur de *format*. 

Si la conversion au *format* échoue, une erreur est renvoyée. 

## Exemples
<a name="r_TO_DATE_function-example"></a>

 L’instruction SQL suivante convertit la date `02 Oct 2001` en type de données de date.

```
select to_date('02 Oct 2001', 'DD Mon YYYY');

to_date
------------
2001-10-02
(1 row)
```

 L’instruction SQL suivante convertit la chaîne `20010631` en date.

```
select to_date('20010631', 'YYYYMMDD', FALSE);
```

Le résultat est le 1er juillet 2001, car il n’y a que 30 jours en juin.

```
to_date
------------
2001-07-01
```

 L’instruction SQL suivante convertit la chaîne `20010631` en date : 

```
to_date('20010631', 'YYYYMMDD', TRUE);
```

Le résultat est une erreur car il n’y a que 30 jours en juin.

```
ERROR:  date/time field date value out of range: 2001-6-31
```

# TO\$1NUMBER
<a name="r_TO_NUMBER"></a>

TO\$1NUMBER convertit une chaîne en une valeur numérique (décimale). 

**Note**  
Nous vous recommandons d’utiliser `FM` dans votre chaîne de format pour supprimer les blancs et les zéros de remplissage. Pour obtenir la liste des formats valides, consultez [Chaînes de format numériques](r_Numeric_formating.md).

## Syntaxe
<a name="r_TO_NUMBER-synopsis"></a>

```
to_number(string, format)
```

## Arguments
<a name="r_TO_NUMBER-arguments"></a>

 *string*   
Chaîne à convertir. Le format doit être une valeur littérale. 

 *format*   
Le deuxième argument est une chaîne de format qui indique comment la chaîne de caractères doit être analysée afin de créer la valeur numérique. Par exemple, le format `'FM99D999'` spécifie que la chaîne à convertir se compose de cinq chiffres, avec la virgule à la troisième position. Par exemple, `to_number('12.345','FM99D999')` renvoie `12.345` comme une valeur numérique. Pour obtenir la liste des formats valides, consultez [Chaînes de format numériques](r_Numeric_formating.md). 

## Type de retour
<a name="r_TO_NUMBER-return-type"></a>

TO\$1NUMBER renvoie un nombre DECIMAL. 

Si la conversion au *format* échoue, une erreur est renvoyée. 

## Exemples
<a name="r_TO_NUMBER-examples"></a>

L’exemple suivant convertit la chaîne `12,454.8-` en un nombre : 

```
select to_number('12,454.8-', 'FM99G999D9S');

to_number
-----------
-12454.8
```

L’exemple suivant convertit la chaîne `$ 12,454.88` en un nombre : 

```
select to_number('$ 12,454.88', 'FML99G999D99');

to_number
-----------
12454.88
```

L’exemple suivant convertit la chaîne `$ 2,012,454.88` en un nombre : 

```
select to_number('$ 2,012,454.88', 'FML9,999,999.99');

to_number
-----------
2012454.88
```

# Fonction TRY\$1CAST
<a name="r_TRY_CAST"></a>

Par rapport à la fonction CAST, TRY\$1CAST tente d’abord de convertir l’expression dans le type spécifié. Si la conversion échoue en raison d’erreurs de conversion, l’opération renvoie null. Si une conversion n’est pas explicitement autorisée, l’opération renvoie une erreur. Vous trouverez la liste des conversions possibles dans les notes d’utilisation ci-dessous. Par exemple, la tentative de conversion d’un booléen en horodatage n’est pas autorisée. 

## Syntaxe
<a name="r_TRY_CAST-syntax"></a>

```
TRY_CAST(expression AS type)
```

## Arguments
<a name="r_TRY_CAST-arguments"></a>

 *expression*   
Expression qui correspond à une ou plusieurs valeurs, par exemple un nom de colonne ou un littéral. La conversion de valeurs null renvoie des valeurs null. L’expression ne peut pas contenir des chaînes vides. 

 *type*   
 L’un des types de données pris en charge. Pour obtenir la liste complète des types de données, consultez [Types de données](c_Supported_data_types.md). Pour obtenir la liste des paires de types de données source et de type de données cibles pris en charge, consultez les notes d’utilisation ci-dessous. 

## Type de retour
<a name="r_TRY_CAST-return-type"></a>

TRY\$1CAST renvoie une valeur du type de données spécifié par l’argument *type*. Si la conversion échoue, l’opération renvoie null. 

## Notes d’utilisation
<a name="r_TRY_CAST-usage-notes"></a>

Vous trouverez ci-dessous la liste des paires de types de données source et de type de données cible prises en charge par Amazon Redshift pour TRY\$1CAST.

 * BOOL *   
 SMALLINT, INT, BIGINT, SUPER 

 * SMALLINT *   
 BOOL, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * INT *   
 BOOL, SMALLINT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * BIGINT *   
 BOOL, SMALLINT, INT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * DECIMAL *   
 SMALLINT, INT, BIGINT, REAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * REAL *   
 SMALLINT, INT, BIGINT, DECIMAL, FLOAT, BPCHAR, TEXT, VARCHAR, SUPER 

 * FLOAT *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, BPCHAR, TEXT, VARCHAR, SUPER 

 * BPCHAR *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER 

 * TEXT *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, VARCHAR, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER 

 * VARCHAR *   
 SMALLINT, INT, BIGINT, DECIMAL, REAL, FLOAT, BPCHAR, TEXT, TIMESTAMP, TIMESTAMPTZ, DATE, TIME, TIMETZ, SUPER 

 *HORODATAGE*   
 BPCHAR, TEXT, VARCHAR, TIMESTAMPTZ, DATE, TIME 

 * TIMESTAMPTZ *   
 BPCHAR, TEXT, VARCHAR, TIMESTAMP, DATE, TIME, TIMETZ 

 * DATE *   
 BPCHAR, TEXT, VARCHAR, TIMESTAMP, TIMESTAMPTZ 

 * TIME *   
 BPCHAR, TEXT, VARCHAR 

 * TIMETZ *   
 BPCHAR, TEXT, VARCHAR 

 * SUPER *   
 SUPER peut être converti en n’importe quel autre type de données, à l’exception de DATE, TIMESTAMP et TIMESTAMPTZ. 

## Exemples
<a name="r_TRY_CAST-examples"></a>

L’exemple suivant transforme un STRING en INTEGER.

```
SELECT TRY_CAST('123' AS INT);

int
----
123
```

L’exemple suivant renvoie null. La conversion d’un STRING en INTEGER est autorisée afin que TRY\$1CAST ne renvoie pas d’erreur, mais « foo » n’est pas un nombre entier, donc la fonction renvoie null.

```
SELECT TRY_CAST('foo' AS INT)
```

L’exemple suivant renvoie une erreur, car la conversion d’un BOOLEAN en TIMESTAMP n’est pas autorisée.

```
SELECT TRY_CAST(true as timestamp);
```

Comme TRY\$1CAST renvoie null au lieu de renvoyer immédiatement une erreur en cas d’échec de la conversion, vous pouvez utiliser TRY\$1CAST pour filtrer les données non valides. Prenons l’exemple suivant, où une ligne non valide est filtrée en raison d’un échec de conversion dans la colonne d’âge d’Akua Mansa.

```
CREATE TABLE IF NOT EXISTS student_data(
name VARCHAR(100) NOT NULL,
age VARCHAR(3) NOT NULL,
enrollment_date DATE NOT NULL);

INSERT INTO student_data (name, age, enrollment_date)
VALUES
('Alejandro Rosalez', '10', '01/01/2000'),
('Akua Mansa', 'Ten', '01/01/2000');

SELECT * FROM student_data WHERE TRY_CAST(age AS INT) IS NOT NULL;

--Akua is not returned.
 name              | age | enrollment_date
-------------------+-----+-----------------
 Alejandro Rosalez | 10  | 01/01/2000
```

# Chaînes de format datetime
<a name="r_FORMAT_strings"></a>

Vous pouvez trouver une référence pour les chaînes de format datetime ci-après. 

Les chaînes de format suivantes s’appliquent à des fonctions telles que TO\$1CHAR. Ces chaînes peuvent contenir des séparateurs datetime (comme ’`-`’, ’`/`’, ou ’`:`’) et les « dateparts » et « timeparts » suivantes.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_FORMAT_strings.html)

**Note**  
Vous devez placer les séparateurs d’heure et de date (tels que ’-’, ’/’ ou ’:’) entre guillemets simples, mais vous devez placer les éléments "dateparts" et "timeparts" figurant dans la table précédente entre guillemets doubles (").

## Exemples
<a name="r_FORMAT_strings-examples"></a>

Pour des exemples de formatage de dates sous forme de chaînes, consultez [TO\$1CHAR](r_TO_CHAR.md).

# Chaînes de format numériques
<a name="r_Numeric_formating"></a>

Vous trouverez ci-dessous une référence pour les chaînes de format numérique. 

Les chaînes de format suivantes s’appliquent aux fonctions telles que TO\$1NUMBER et TO\$1CHAR. 
+ Pour des exemples de formatage de chaînes sous forme de nombres, consultez [TO\$1NUMBER](r_TO_NUMBER.md).
+ Pour des exemples de formatage de nombres sous forme de chaînes, consultez [TO\$1CHAR](r_TO_CHAR.md).

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Numeric_formating.html)

# Caractères de formatage de type Teradata pour les données numériques
<a name="r_Numeric-format-teradata"></a>

Vous trouverez ci-dessous comment les fonctions TEXT\$1TO\$1INT\$1ALT et TEXT\$1TO\$1NUMERIC\$1ALT interprètent les caractères dans la chaîne d’*expression* en entrée. Vous pouvez également retrouver la liste des caractères que vous pouvez spécifier dans la phrase *format*. En outre, vous trouverez une description des différences entre le formatage de style Teradata et Amazon Redshift pour l’option *format*. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Numeric-format-teradata.html)

## Caractères de formatage des données pour le formatage de données numériques de type Signed Zone Decimal, Teradata
<a name="r_Numeric-format-teradata-signed-zone"></a>

Vous pouvez utiliser les caractères suivants dans la phrase *format* des fonctions TEXT\$1TO\$1INT\$1ALT et TEXT\$1TO\$1NUMERIC\$1ALT pour une valeur Signed Zone Decimal. 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Numeric-format-teradata.html)

# Fonctions de date et d’heure
<a name="Date_functions_header"></a>

Dans cette section, vous trouverez des informations sur les fonctions scalaires de date et d’heure prises en charge par Amazon Redshift.

**Topics**
+ [Résumés des fonctions de date et d’heure](#date-functions-summary)
+ [Fonctions date et heure dans les transactions](#date-functions-transactions)
+ [Fonctions de nœud principal uniquement obsolètes](#date-functions-deprecated)
+ [\$1 Opérateur (concaténation)](r_DATE-CONCATENATE_function.md)
+ [Fonction ADD\$1MONTHS](r_ADD_MONTHS.md)
+ [Fonction AT TIME ZONE](r_AT_TIME_ZONE.md)
+ [Fonction CONVERT\$1TIMEZONE](CONVERT_TIMEZONE.md)
+ [Fonction CURRENT\$1DATE](r_CURRENT_DATE_function.md)
+ [Fonction DATE\$1CMP](r_DATE_CMP.md)
+ [Fonction DATE\$1CMP\$1TIMESTAMP](r_DATE_CMP_TIMESTAMP.md)
+ [Fonction DATE\$1CMP\$1TIMESTAMPTZ](r_DATE_CMP_TIMESTAMPTZ.md)
+ [Fonction DATEADD](r_DATEADD_function.md)
+ [Fonction DATEDIFF](r_DATEDIFF_function.md)
+ [Fonction DATE\$1PART](r_DATE_PART_function.md)
+ [Fonction DATE\$1PART\$1YEAR](r_DATE_PART_YEAR.md)
+ [Fonction DATE\$1TRUNC](r_DATE_TRUNC.md)
+ [Fonction EXTRACT](r_EXTRACT_function.md)
+ [Fonction GETDATE](r_GETDATE.md)
+ [Fonction INTERVAL\$1CMP](r_INTERVAL_CMP.md)
+ [Fonction LAST\$1DAY](r_LAST_DAY.md)
+ [Fonction MONTHS\$1BETWEEN](r_MONTHS_BETWEEN_function.md)
+ [Fonction NEXT\$1DAY](r_NEXT_DAY.md)
+ [Fonction SYSDATE](r_SYSDATE.md)
+ [Fonction TIMEOFDAY](r_TIMEOFDAY_function.md)
+ [Fonction TIMESTAMP\$1CMP](r_TIMESTAMP_CMP.md)
+ [Fonction TIMESTAMP\$1CMP\$1DATE](r_TIMESTAMP_CMP_DATE.md)
+ [Fonction TIMESTAMP\$1CMP\$1TIMESTAMPTZ](r_TIMESTAMP_CMP_TIMESTAMPTZ.md)
+ [Fonction TIMESTAMPTZ\$1CMP](r_TIMESTAMPTZ_CMP.md)
+ [Fonction TIMESTAMPTZ\$1CMP\$1DATE](r_TIMESTAMPTZ_CMP_DATE.md)
+ [Fonction TIMESTAMPTZ\$1CMP\$1TIMESTAMP](r_TIMESTAMPTZ_CMP_TIMESTAMP.md)
+ [Fonction TIMEZONE](r_TIMEZONE.md)
+ [Fonction TO\$1TIMESTAMP](r_TO_TIMESTAMP.md)
+ [Fonction TRUNC](r_TRUNC_date.md)
+ [Parties de date pour les fonctions de date ou d’horodatage](r_Dateparts_for_datetime_functions.md)

## Résumés des fonctions de date et d’heure
<a name="date-functions-summary"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/Date_functions_header.html)

**Note**  
Les secondes supplémentaires ne sont pas prises en compte dans le calcul de durée écoulée.

## Fonctions date et heure dans les transactions
<a name="date-functions-transactions"></a>

Lorsque vous exécutez les fonctions suivantes au sein d’un bloc de transaction (BEGIN … END), la fonction renvoie la date ou l’heure de début de la transaction en cours, pas le début de l’instruction en cours.
+ SYSDATE
+ TIMESTAMP
+ CURRENT\$1DATE

Les fonctions suivantes renvoient toujours la date ou l’heure de début de l’instruction en cours, même si elles se trouvaient sur un bloc de transaction.
+ GETDATE
+ TIMEOFDAY

## Fonctions de nœud principal uniquement obsolètes
<a name="date-functions-deprecated"></a>

Les fonctions de date suivantes sont obsolètes, car elles s’exécutent uniquement sur le nœud principal. Pour plus d'informations, consultez [Fonctions exécutées uniquement sur le nœud principal](c_SQL_functions_leader_node_only.md).
+ AGE. Utilisez [Fonction DATEDIFF](r_DATEDIFF_function.md) à la place.
+ CURRENT\$1TIME. Utilisez [Fonction GETDATE](r_GETDATE.md) ou [SYSDATE](r_SYSDATE.md) à la place. 
+ CURRENT\$1TIMESTAMP. Utilisez [Fonction GETDATE](r_GETDATE.md) ou [SYSDATE](r_SYSDATE.md) à la place.
+ LOCALTIME. Utilisez [Fonction GETDATE](r_GETDATE.md) ou [SYSDATE](r_SYSDATE.md) à la place.
+ LOCALTIMESTAMP. Utilisez [Fonction GETDATE](r_GETDATE.md) ou [SYSDATE](r_SYSDATE.md) à la place.
+ ISFINITE 
+ NOW. Utilisez [Fonction GETDATE](r_GETDATE.md) ou [SYSDATE](r_SYSDATE.md) à la place. Si vous utilisez la fonction NOW dans une vue matérialisée, elle utilise l’horodatage de la création de la vue matérialisée, au lieu de l’horodatage actuel. 

# \$1 Opérateur (concaténation)
<a name="r_DATE-CONCATENATE_function"></a>

Concatène une valeur DATE à une valeur TIME ou TIMETZ de chaque côté du symbole \$1 et renvoie une valeur TIMESTAMP ou TIMESTAMPTZ. 

## Syntaxe
<a name="r_DATE-CONCATENATE_function-synopsis"></a>

```
date + {time | timetz}
```

L’ordre des arguments peut être inversé. Par exemple, *time* \$1 *date*.

## Arguments
<a name="r_DATE-CONCATENATE_function-arguments"></a>

 *date*   
Colonne de type de données `DATE` ou expression implicitement évaluée à un type `DATE`. 

 *time*   
Colonne de type de données `TIME` ou expression implicitement évaluée à un type `TIME`. 

 *timetz*   
Colonne de type de données `TIMETZ` ou expression implicitement évaluée à un type `TIMETZ`. 

## Type de retour
<a name="r_DATE-CONCATENATE_function-return-type"></a>

TIMESTAMP si l’entrée est *date* \$1 *time*. 

TIMESTAMP si l’entrée est *date* \$1 *timetz*. 

## Exemples
<a name="r_DATE-CONCATENATE_function-examples"></a>

### Exemple de configuration
<a name="r_DATE-CONCATENATE_function-example-setup"></a>

Pour configurer les tables TIME\$1TEST et TIMETZ\$1TEST utilisées dans les exemples, utilisez la commande suivante.

```
create table time_test(time_val time);

insert into time_test values
('20:00:00'),
('00:00:00.5550'),
('00:58:00');
   
create table timetz_test(timetz_val timetz);
   
insert into timetz_test values
('04:00:00+00'),
('00:00:00.5550+00'),
('05:58:00+00');
```

### Exemples avec une colonne time
<a name="r_DATE-CONCATENATE_function-examples-time"></a>

L'exemple de table TIME\$1TEST suivant comporte une colonne TIME\$1VAL (type TIME) avec trois valeurs insérées. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

L’exemple suivant concatène une valeur de date littérale et une colonne TIME\$1VAL.

```
select date '2000-01-02' + time_val as ts from time_test;
            
ts
---------------------
2000-01-02 20:00:00
2000-01-02 00:00:00.5550
2000-01-02 00:58:00
```

L’exemple suivant concatène une valeur de date littérale et une valeur de temps littérale. 

```
select date '2000-01-01' + time '20:00:00' as ts;
            
         ts
---------------------
 2000-01-01 20:00:00
```

L’exemple suivant concatène un littéral time et un littéral date. 

```
select time '20:00:00' + date '2000-01-01' as ts;
            
         ts
---------------------
 2000-01-01 20:00:00
```

### Exemples avec une colonne TIMETZ
<a name="r_DATE-CONCATENATE_function-examples-timetz"></a>

L'exemple de table TIMETZ\$1TEST suivant comporte une colonne TIMETZ\$1VAL (type TIMETZ) avec trois valeurs insérées. 

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

L’exemple suivant concatène une valeur de date littérale et une colonne TIMETZ\$1VAL. 

```
select date '2000-01-01' + timetz_val as ts from timetz_test;
ts
---------------------
2000-01-01 04:00:00+00
2000-01-01 00:00:00.5550+00
2000-01-01 05:58:00+00
```

L’exemple suivant concatène une colonne TIMETZ\$1VAL et un littéral date. 

```
select timetz_val + date '2000-01-01' as ts from timetz_test;
ts
---------------------
2000-01-01 04:00:00+00
2000-01-01 00:00:00.5550+00
2000-01-01 05:58:00+00
```

L’exemple suivant concatène une valeur DATE littérale et une valeur TIMETZ littérale. L’exemple renvoie une valeur TIMESTAMPTZ qui se trouve dans le fuseau horaire UTC par défaut. Le fuseau horaire UTC ayant 8 heures d’avance sur PST, le résultat affiche 8 heures d’avance par rapport à l’heure d’entrée.

```
select date '2000-01-01' + timetz '20:00:00 PST' as ts;
            
           ts
------------------------
 2000-01-02 04:00:00+00
```

# Fonction ADD\$1MONTHS
<a name="r_ADD_MONTHS"></a>

ADD\$1MONTHS ajoute le nombre de mois spécifié à une date, à une valeur d’horodatage ou à une expression. La fonction [DATEADD](r_DATEADD_function.md) fournit une fonctionnalité similaire. 

## Syntaxe
<a name="r_ADD_MONTHS-synopsis"></a>

```
ADD_MONTHS( {date | timestamp}, integer)
```

## Arguments
<a name="r_ADD_MONTHS-arguments"></a>

 *date* \$1 *timestamp*   
Colonne de type de données `DATE` ou `TIMESTAMP` ou expression implicitement évaluée à un type `DATE` ou `TIMESTAMP`. Si la date est le dernier jour du mois, ou si le mois résultant est plus court, la fonction renvoie le dernier jour du mois dans le résultat. Pour les autres dates, le résultat contient le même nombre de jours que l’expression de date. 

 *integer*   
Valeur du type de données `INTEGER`. Utilisez un nombre négatif pour soustraire des mois à partir de dates. 

## Type de retour
<a name="r_ADD_MONTHS-return-type"></a>

TIMESTAMP

## Exemples
<a name="r_ADD_MONTHS-example"></a>

La requête suivante utilise la fonction ADD\$1MONTHS à l’intérieur d’une fonction TRUNC. La fonction TRUNC supprime l’heure du jour des résultats de ADD\$1MONTHS. La fonction ADD\$1MONTHS ajoute 12 mois à chaque valeur de la colonne CALDATE. Les valeurs de la colonne CALDATE sont des dates. 

```
select distinct trunc(add_months(caldate, 12)) as calplus12,
trunc(caldate) as cal
from date
order by 1 asc;

 calplus12  |    cal
------------+------------
 2009-01-01 | 2008-01-01
 2009-01-02 | 2008-01-02
 2009-01-03 | 2008-01-03
...
(365 rows)
```

L’exemple suivant utilise la fonction ADD\$1MONTHS pour ajouter un mois à un *timestamp* (horodatage). 

```
select add_months('2008-01-01 05:07:30', 1); 

add_months
---------------------
2008-02-01 05:07:30
```

Les exemples suivants illustrent le comportement lorsque la fonction ADD\$1MONTHS opère sur des dates comportant des mois avec un nombre de jours différent. Cet exemple montre comment la fonction procède pour ajouter un mois au 31 mars et un mois au 30 avril. Sachant que le mois d’avril compte 30 jours, l’ajout d’un mois au 31 mars donne en résultat le 30 avril. En revanche, comme le mois de mai compte 31 jours, l’ajout d’un mois au 30 avril a pour résultat le 31 mai. 

```
select add_months('2008-03-31',1);

add_months
---------------------
2008-04-30 00:00:00

select add_months('2008-04-30',1); 

add_months
---------------------
2008-05-31 00:00:00
```

# Fonction AT TIME ZONE
<a name="r_AT_TIME_ZONE"></a>

AT TIME ZONE spécifie le fuseau horaire à utiliser avec une expression TIMESTAMP ou TIMESTAMPTZ.

## Syntaxe
<a name="r_AT_TIME_ZONE-syntax"></a>

```
AT TIME ZONE 'timezone'
```

## Arguments
<a name="r_AT_TIME_ZONE-arguments"></a>

*timezone*  
`TIMEZONE` pour la valeur renvoyée. Le fuseau horaire peut être spécifié comme nom de fuseau horaire (tel que **'Africa/Kampala'** ou **'Singapore'**) ou comme abréviation de fuseau horaire (telle que **'UTC'** ou **'PDT'**).   
Pour afficher la liste des noms de fuseaux horaires pris en charge, exécutez la commande suivante.   

```
select pg_timezone_names();
```
 Pour afficher la liste des abréviations de fuseaux horaires prises en charge, exécutez la commande suivante.   

```
select pg_timezone_abbrevs();
```
 Pour plus d’informations et d’exemples, consultez [Remarques sur l’utilisation de fuseaux horaires](CONVERT_TIMEZONE.md#CONVERT_TIMEZONE-usage-notes).

## Type de retour
<a name="r_AT_TIME_ZONE-return-type"></a>

TIMESTAMPTZ lorsqu’il est utilisé avec une expression TIMESTAMP. TIMESTAMP lorsqu’il est utilisé avec une expression TIMESTAMPTZ. 

## Exemples
<a name="r_AT_TIME_ZONE-examples"></a>

L’exemple suivant convertit une valeur d’horodatage sans fuseau horaire et l’interprète en tant qu’heure MST (UTC\$17 dans POSIX). L’exemple renvoie une valeur dont le type de données est TIMESTAMPTZ pour le fuseau horaire UTC. Si vous configurez votre fuseau horaire par défaut sur un autre fuseau horaire qu’UTC, le résultat peut être différent.

```
SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST';

timezone
------------------------
2001-02-17 03:38:40+00
```

L’exemple suivant prend un horodatage d’entrée avec une valeur de fuseau horaire où le fuseau horaire spécifié est EST (UTC\$15 dans POSIX) et le convertit en heure MST (UTC\$17 dans POSIX). L’exemple renvoie une valeur dont le type de données est TIMESTAMP.

```
SELECT TIMESTAMPTZ '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';

timezone
------------------------
2001-02-16 18:38:40
```

# Fonction CONVERT\$1TIMEZONE
<a name="CONVERT_TIMEZONE"></a>

CONVERT\$1TIMEZONE convertit un horodatage d’un fuseau horaire à un autre. La fonction s’ajuste automatiquement pour l’heure d’été.

## Syntaxe
<a name="CONVERT_TIMEZONE-syntax"></a>

```
CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')
```

## Arguments
<a name="CONVERT_TIMEZONE-arguments"></a>

*source\$1timezone*  
(Facultatif) Fuseau horaire de l’horodatage actuel. La valeur par défaut est UTC. Pour plus d'informations, consultez [Remarques sur l’utilisation de fuseaux horaires](#CONVERT_TIMEZONE-usage-notes).

*target\$1timezone*   
Fuseau horaire du nouvel horodatage. Pour plus d'informations, consultez [Remarques sur l’utilisation de fuseaux horaires](#CONVERT_TIMEZONE-usage-notes).

*timestamp*   
Colonne timestamp ou expression qui convertit implicitement en un horodatage.

## Type de retour
<a name="CONVERT_TIMEZONE-return-type"></a>

TIMESTAMP

## Remarques sur l’utilisation de fuseaux horaires
<a name="CONVERT_TIMEZONE-usage-notes"></a>

Vous pouvez spécifier *source\$1timezone* ou *target\$1timezone* comme nom de fuseau horaire (par exemple, « Afrique/Kampala » ou « Singapour ») ou comme une abréviation de fuseau horaire (par exemple, « UTC » ou « PDT »). Il n’est pas nécessaire de convertir les noms de fuseaux horaires en noms ou les abréviations en abréviations. Par exemple, vous pouvez choisir un horodatage à partir du nom du fuseau horaire source « Singapour » et le convertir en horodatage dans l’abréviation du fuseau horaire « PDT ».

**Note**  
Les résultats découlant de l’utilisation d’un nom ou d’une abréviation de fuseau horaire peuvent varier en raison d’une heure saisonnière locale, par exemple l’heure d’été. 

### Utilisation d’un nom de fuseau horaire
<a name="CONVERT_TIMEZONE-using-name"></a>

Pour obtenir une liste actualisée et complète des noms de fuseaux horaires, exécutez la commande suivante. 

```
select pg_timezone_names();
```

Chaque ligne contient une chaîne séparée par des virgules avec le nom du fuseau horaire, l’abréviation, le décalage UTC et un indicateur si le fuseau horaire respecte l’heure d’été (`t` ou `f`). Par exemple, l’extrait suivant montre deux lignes résultantes. La première ligne indique le fuseau horaire `Antarctica/South Pole`, l’abréviation `NZDT`, avec le décalage `13:00:00` par rapport à l’heure UTC et `f` pour indiquer que l’heure d’été n’est pas respectée. La deuxième ligne indique le fuseau horaire `Europe/Paris`, l’abréviation `CET`, avec le décalage `01:00:00` par rapport à l’heure UTC et `f` pour indiquer que l’heure d’été est respectée.

```
pg_timezone_names
------------------
(Antarctica/South_Pole,NZDT,13:00:00,t)	
(Europe/Paris,CET,01:00:00,f)
```

Exécutez l'instruction SQL pour obtenir la liste complète et trouver un nom de fuseau horaire. Environ 600 lignes sont renvoyées. Bien que certains des noms de fuseaux horaires renvoyés sont des sigles en majuscules ou des acronymes (par exemple : GB, PRC, ROK, etc.), la fonction CONVERT\$1TIMEZONE les traite comme des noms de fuseaux horaires, pas comme des abréviations de fuseaux horaires. 

Si vous spécifiez un fuseau horaire en utilisant son nom, CONVERT\$1TIMEZONE s’ajuste automatiquement pour l’heure d’été, ou n’importe quel autre protocole saisonnier local, tel que l’heure normale ou l’heure d’hiver, qui est en vigueur pour ce fuseau horaire à la date et à l’heure spécifiées par « *timestamp* ». Par exemple, « Europe/Londres » représente l’heure UTC en hiver et une heure est ajoutée en été. Notez qu’Amazon Redshift utilise la [base de données de fuseaux horaires de l’IANA](https://www.iana.org/time-zones) comme source officielle de spécification des fuseaux horaires.

### Utilisation d’une abréviation du fuseau horaire
<a name="CONVERT_TIMEZONE-using-abbrev"></a>

 Pour obtenir une liste actualisée et complète des abréviations de fuseaux horaires, exécutez la commande suivante. 

```
select pg_timezone_abbrevs();
```

Les résultats contiennent une chaîne séparée par des virgules avec l’abréviation du fuseau horaire, le décalage UTC et un indicateur si le fuseau horaire respecte l’heure d’été (`t` ou `f`). Par exemple, l’extrait suivant montre deux lignes résultantes. La première ligne contient l’abréviation de l’heure d’été du Pacifique `PDT`, avec un décalage `-07:00:00` par rapport à l’UTC et `t` pour indiquer qu’elle respecte l’heure d’été. La deuxième ligne contient l’abréviation de l’heure normale du Pacifique `PST`, avec un décalage `-08:00:00` par rapport à l’UTC et `f` pour indiquer qu’elle ne respecte pas l’heure d’été.

```
pg_timezone_abbrevs
--------------------
(PDT,-07:00:00,t)	
(PST,-08:00:00,f)
```

Exécutez l’instruction SQL pour obtenir la liste complète et trouver une abréviation en fonction de son indicateur de décalage et d’heure d’été. Environ 200 lignes sont renvoyées.

Les abréviations de fuseaux horaires représentent un décalage fixe de l’UTC. Si vous spécifiez un fuseau horaire à l’aide d’une abréviation du fuseau horaire, CONVERT\$1TIMEZONE utilise le décalage fixe de l’UTC et ne s’ajuste pour aucun protocole saisonnier local.

### Utilisation du format POSIX-Style
<a name="CONVERT_TIMEZONE-using-posix"></a>

Une spécification de fuseau horaire de style POSIX se présente sous la forme *STDoffsetSTDoffset**DST*, où *STD* est une abréviation de fuseau horaire, *offset* est le décalage numérique en heures à l'ouest par rapport à l'UTC et *DST* est une abréviation de zone d'été facultative. L’heure d’été est supposée être une heure d’avance par rapport au décalage donné.

Les formats de fuseaux horaires de style POSIX utilisent des décalages positifs à l’ouest de Greenwich, contrairement à la convention ISO-8601, qui utilise des décalages positifs à l’est de Greenwich.

Voici des exemples de fuseaux horaires de style POSIX :
+  PST8
+  PST8PDT
+  EST5
+  EST5EDT

**Note**  
Amazon Redshift ne valide pas les spécifications de fuseaux horaires de style POSIX, il est donc possible définir le fuseau horaire sur une valeur non valide. Par exemple, la commande suivante ne renvoie pas d’erreur, même si elle définit le fuseau horaire sur une valeur non valide.  

```
set timezone to ‘xxx36’;
```

## Exemples
<a name="CONVERT_TIMEZONE-examples"></a>

Bon nombre d’exemples utilisent l’exemple d’ensemble de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html).

L’exemple suivant convertit la valeur d’horodatage du fuseau horaire UTC par défaut en HNP.

```
select convert_timezone('PST', '2008-08-21 07:23:54');
                     
 convert_timezone
------------------------
2008-08-20 23:23:54
```

L’exemple suivant convertit la valeur d’horodatage dans la colonne LISTTIME du fuseau horaire UTC par défaut en HNP. Même si l’horodatage est à l’heure d’été, il est converti en heure normale, car le fuseau horaire cible est spécifié comme abréviation (PST).

```
select listtime, convert_timezone('PST', listtime) from listing
where listid = 16;
                     
     listtime       |   convert_timezone
--------------------+-------------------
2008-08-24 09:36:12     2008-08-24 01:36:12
```

L'exemple suivant convertit une colonne d'horodatage LISTTIME du fuseau horaire UTC par défaut en fuseau horaire. US/Pacific Le fuseau horaire cible utilise un nom de fuseau horaire, et l’horodatage se situe pendant la période l’heure d’été, donc la fonction renvoie l’heure.

```
select listtime, convert_timezone('US/Pacific', listtime) from listing
where listid = 16;
                     
     listtime       |   convert_timezone
--------------------+---------------------
2008-08-24 09:36:12 | 2008-08-24 02:36:12
```

L’exemple suivant convertit une chaîne d’horodatage de l’EST à PST :

```
select convert_timezone('EST', 'PST', '20080305 12:25:29');
                     
 convert_timezone
-------------------
2008-03-05 09:25:29
```

L’exemple suivant convertit un horodatage à l’heure normale de l’est des États-Unis, car le fuseau horaire cible utilise un nom de fuseau horaire (Amérique/New\$1York) et que l’horodatage est à l’heure normale.

```
select convert_timezone('America/New_York', '2013-02-01 08:00:00');

 convert_timezone
---------------------
2013-02-01 03:00:00
(1 row)
```

L’exemple suivant convertit un horodatage à l’heure d’été de l’est des États-Unis, car le fuseau horaire cible utilise un nom de fuseau horaire (Amérique/New\$1York) et que l’horodatage est à l’heure d’été.

```
select convert_timezone('America/New_York', '2013-06-01 08:00:00');

 convert_timezone
---------------------
2013-06-01 04:00:00
(1 row)
```

L’exemple suivant illustre l’utilisation des décalages. 

```
SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, 
CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, 
CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2,
CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2;
 
   newzone_plus_2    | newzone_minus_2_15  |      la_plus_2      |     gmt_plus_2
---------------------+---------------------+---------------------+---------------------
2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00
(1 row)
```

# Fonction CURRENT\$1DATE
<a name="r_CURRENT_DATE_function"></a>

CURRENT\$1DATE renvoie une date dans le fuseau horaire de la session en cours (UTC par défaut) au format par défaut :. YYYY-MM-DD

**Note**  
CURRENT\$1DATE renvoie la date de début de la transaction en cours, pas le début de l’instruction en cours. Imaginez un scénario où vous démarrez une transaction contenant plusieurs instructions le 10/01/08 à 23h59, et où l’instruction contenant CURRENT\$1DATE s’exécute le 10/02/08 à 00h00. CURRENT\$1DATE renvoie `10/01/08`, et non `10/02/08`.

## Syntaxe
<a name="r_CURRENT_DATE_function-syntax"></a>

```
CURRENT_DATE
```

## Type de retour
<a name="r_CURRENT_DATE_function-return-type"></a>

DATE

## Exemples
<a name="r_CURRENT_DATE_function-examples"></a>

L'exemple suivant renvoie la date actuelle (dans Région AWS laquelle la fonction s'exécute).

```
select current_date;

   date
------------
2008-10-01
```

Dans l’exemple suivant, un tableau est créé, une ligne est insérée, et la valeur par défaut de la colonne `todays_date` est CURRENT\$1DATE. Enfin, toutes les lignes du tableau sont sélectionnées.

```
CREATE TABLE insert_dates(
    label varchar(128) NOT NULL,
    todays_date DATE DEFAULT CURRENT_DATE);

INSERT INTO insert_dates(label)
VALUES('Date row inserted');

SELECT * FROM insert_dates;
         

 label            | todays_date
------------------+-------------
Date row inserted | 2023-05-10
```

# Fonction DATE\$1CMP
<a name="r_DATE_CMP"></a>

DATE\$1CMP compare deux dates. La fonction renvoie `0` si les dates sont identiques, `1` si *date1* est ultérieure, et `-1` si *date2* est ultérieure.

## Syntaxe
<a name="r_DATE_CMP-synopsis"></a>

```
DATE_CMP(date1, date2)
```

## Arguments
<a name="r_DATE_CMP-arguments"></a>

 *date1*   
Colonne de type de données `DATE` ou expression qui est évaluée sur un type `DATE`.

 *date2*   
Colonne de type de données `DATE` ou expression qui est évaluée sur un type `DATE`.

## Type de retour
<a name="r_DATE_CMP-return-type"></a>

INTEGER

## Exemples
<a name="r_DATE_CMP-example"></a>

La requête suivante compare les valeurs de DATE de la colonne CALDATE à la date du 4 janvier 2008 et indique si la valeur de CALDATE est antérieure (`-1`), égale (`0`) ou postérieure au 4 janvier 2008 : 

```
select caldate, '2008-01-04',
date_cmp(caldate,'2008-01-04')
from date
order by dateid
limit 10;

 caldate   |  ?column?  | date_cmp
-----------+------------+----------
2008-01-01 | 2008-01-04 |       -1
2008-01-02 | 2008-01-04 |       -1
2008-01-03 | 2008-01-04 |       -1
2008-01-04 | 2008-01-04 |        0
2008-01-05 | 2008-01-04 |        1
2008-01-06 | 2008-01-04 |        1
2008-01-07 | 2008-01-04 |        1
2008-01-08 | 2008-01-04 |        1
2008-01-09 | 2008-01-04 |        1
2008-01-10 | 2008-01-04 |        1
(10 rows)
```

# Fonction DATE\$1CMP\$1TIMESTAMP
<a name="r_DATE_CMP_TIMESTAMP"></a>

DATE\$1CMP\$1TIMESTAMP compare une date à un timestamp (horodatage) et renvoie `0` si les valeurs sont identiques, `1` si la valeur de *date* est supérieure du point de vue chronologique et `-1` si la valeur de *timestamp* est supérieure.

## Syntaxe
<a name="r_DATE_CMP_TIMESTAMP-synopsis"></a>

```
DATE_CMP_TIMESTAMP(date, timestamp)
```

## Arguments
<a name="r_DATE_CMP_TIMESTAMP-arguments"></a>

 *date*   
Colonne de type de données `DATE` ou expression qui est évaluée sur un type `DATE`.

 *timestamp*   
Colonne de type de données `TIMESTAMP` ou expression qui est évaluée sur un type `TIMESTAMP`.

## Type de retour
<a name="r_DATE_CMP_TIMESTAMP-return-type"></a>

INTEGER

## Exemples
<a name="r_DATE_CMP_TIMESTAMP-examples"></a>

L’exemple suivant compare la date `2008-06-18` à LISTTIME. Les valeurs de la colonne LISTTIME sont des horodatages. Les listes faites avant cette date renvoient `1` ; les listes faites après cette date renvoient `-1`. 

```
select listid, '2008-06-18', listtime,
date_cmp_timestamp('2008-06-18', listtime)
from listing
order by 1, 2, 3, 4
limit 10;

 listid |  ?column?  |      listtime       | date_cmp_timestamp
--------+------------+---------------------+--------------------
      1 | 2008-06-18 | 2008-01-24 06:43:29 |                  1
      2 | 2008-06-18 | 2008-03-05 12:25:29 |                  1
      3 | 2008-06-18 | 2008-11-01 07:35:33 |                 -1
      4 | 2008-06-18 | 2008-05-24 01:18:37 |                  1
      5 | 2008-06-18 | 2008-05-17 02:29:11 |                  1
      6 | 2008-06-18 | 2008-08-15 02:08:13 |                 -1
      7 | 2008-06-18 | 2008-11-15 09:38:15 |                 -1
      8 | 2008-06-18 | 2008-11-09 05:07:30 |                 -1
      9 | 2008-06-18 | 2008-09-09 08:03:36 |                 -1
     10 | 2008-06-18 | 2008-06-17 09:44:54 |                  1
(10 rows)
```

# Fonction DATE\$1CMP\$1TIMESTAMPTZ
<a name="r_DATE_CMP_TIMESTAMPTZ"></a>

DATE\$1CMP\$1TIMESTAMPTZ compare une date à un timestamp (horodatage) avec fuseau horaire et renvoie `0` si les valeurs sont identiques, `1` si la valeur de *date* est supérieure du point de vue chronologique et `-1` si la valeur de *timestamptz* est supérieure.

## Syntaxe
<a name="r_DATE_CMP_TIMESTAMPTZ-syntax"></a>

```
DATE_CMP_TIMESTAMPTZ(date, timestamptz)
```

## Arguments
<a name="r_DATE_CMP_TIMESTAMPTZ-arguments"></a>

 *date*   
Colonne de type de données `DATE` ou expression implicitement évaluée à un type `DATE`.

 *timestamptz*   
Colonne de type de données `TIMESTAMPTZ` ou expression implicitement évaluée à un type `TIMESTAMPTZ`.

## Type de retour
<a name="r_DATE_CMP_TIMESTAMPTZ-return-type"></a>

INTEGER

## Exemples
<a name="r_DATE_CMP_TIMESTAMPTZ-examples"></a>

L’exemple suivant compare la date `2008-06-18` à LISTTIME. Les listes faites avant cette date renvoient `1` ; les listes faites après cette date renvoient `-1`. 

```
select listid, '2008-06-18', CAST(listtime AS timestamptz),
date_cmp_timestamptz('2008-06-18', CAST(listtime AS timestamptz))
from listing
order by 1, 2, 3, 4
limit 10;

 listid |  ?column?  |      timestamptz       | date_cmp_timestamptz
--------+------------+------------------------+----------------------
      1 | 2008-06-18 | 2008-01-24 06:43:29+00 |                  1
      2 | 2008-06-18 | 2008-03-05 12:25:29+00 |                  1
      3 | 2008-06-18 | 2008-11-01 07:35:33+00 |                 -1
      4 | 2008-06-18 | 2008-05-24 01:18:37+00 |                  1
      5 | 2008-06-18 | 2008-05-17 02:29:11+00 |                  1
      6 | 2008-06-18 | 2008-08-15 02:08:13+00 |                 -1
      7 | 2008-06-18 | 2008-11-15 09:38:15+00 |                 -1
      8 | 2008-06-18 | 2008-11-09 05:07:30+00 |                 -1
      9 | 2008-06-18 | 2008-09-09 08:03:36+00 |                 -1
     10 | 2008-06-18 | 2008-06-17 09:44:54+00 |                  1
(10 rows)
```

# Fonction DATEADD
<a name="r_DATEADD_function"></a>

Augmente une valeur DATE, TIME, TIMETZ ou TIMESTAMP d’un intervalle spécifié. 

## Syntaxe
<a name="r_DATEADD_function-synopsis"></a>

```
DATEADD( datepart, interval, {date|time|timetz|timestamp} )
```

## Arguments
<a name="r_DATEADD_function-arguments"></a>

 *datepart*   
Partie de la date (par exemple, année, mois, jour ou heure) sur laquelle la fonction opère. Pour plus d'informations, consultez [Parties de date pour les fonctions de date ou d’horodatage](r_Dateparts_for_datetime_functions.md). 

 *interval*   
Nombre entier qui a spécifié l’intervalle (nombre de jours, par exemple) à ajouter à l’expression cible. Un nombre entier négatif soustrait l’intervalle. 

 *date*\$1*time*\$1*timetz*\$1*timestamp*  
Colonne DATE, TIME, TIMETZ ou TIMESTAMP, ou expression qui convertit implicitement en un horodatage ou valeur DATE, TIME, TIMETZ ou TIMESTAMP. L’expression DATE, TIME, TIMETZ ou TIMESTAMP doit contenir la partie de date spécifiée. 

## Type de retour
<a name="r_DATEADD_function-return-type"></a>

TIMESTAMP ou TIME ou TIMETZ selon le type de données d’entrée.

## Exemples avec une colonne DATE
<a name="r_DATEADD_function-examples"></a>

Dans l’exemple suivant, 30 jours sont ajoutés à chaque date en novembre qui existe dans la table DATE.

```
select dateadd(day,30,caldate) as novplus30
from date
where month='NOV'
order by dateid;

novplus30
---------------------
2008-12-01 00:00:00
2008-12-02 00:00:00
2008-12-03 00:00:00
...
(30 rows)
```

 L’exemple suivant ajoute 18 mois à une valeur de date littérale.

```
select dateadd(month,18,'2008-02-28');

date_add
---------------------
2009-08-28 00:00:00
(1 row)
```

Le nom de colonne par défaut pour une fonction DATEADD est DATE\$1ADD. L’horodatage par défaut pour une valeur de date est `00:00:00`. 

L’exemple suivant ajoute 30 minutes à une valeur de date qui ne spécifie pas d’horodatage.

```
select dateadd(m,30,'2008-02-28');

date_add
---------------------
2008-02-28 00:30:00
(1 row)
```

Vous pouvez nommer les parties de date intégralement ou les abréger. Dans ce cas, *m* représente les minutes, et non les mois. 

## Exemples avec une colonne TIME
<a name="r_DATEADD_function-examples-time"></a>

L'exemple de table TIME\$1TEST suivant comporte une colonne TIME\$1VAL (type TIME) avec trois valeurs insérées. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

L’exemple suivant ajoute 5 minutes à chaque TIME\$1VAL de la table TIME\$1TEST.

```
select dateadd(minute,5,time_val) as minplus5 from time_test;
            
minplus5
---------------
20:05:00
00:05:00.5550
01:03:00
```

L’exemple suivant ajoute 8 heures à une valeur de temps littérale.

```
select dateadd(hour, 8, time '13:24:55');
            
date_add
---------------
21:24:55
```

L’exemple suivant montre quand une heure est supérieure à 24:00:00 ou inférieure à 00:00:00. 

```
select dateadd(hour, 12, time '13:24:55');
            
date_add
---------------
01:24:55
```

## Exemples avec une colonne TIMETZ
<a name="r_DATEADD_function-examples-timetz"></a>

Les valeurs de sortie de ces exemples utilisent le fuseau horaire par défaut UTC. 

L'exemple de table TIMETZ\$1TEST suivant comporte une colonne TIMETZ\$1VAL (type TIMETZ) avec trois valeurs insérées.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

L’exemple suivant ajoute 5 minutes à chaque TIMETZ\$1VAL de la table TIMETZ\$1TEST.

```
select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test;
            
minplus5_tz
---------------
04:05:00+00
00:05:00.5550+00
06:03:00+00
```

L’exemple suivant ajoute 2 heures à une valeur timetz littérale.

```
select dateadd(hour, 2, timetz '13:24:55 PST');
            
date_add
---------------
23:24:55+00
```

## Exemples avec une colonne TIMESTAMP
<a name="r_DATEADD_function-examples-timestamp"></a>

Les valeurs de sortie de ces exemples utilisent le fuseau horaire par défaut UTC. 

L’exemple de table TIMESTAMP\$1TEST suivant comporte une colonne TIMESTAMP\$1VAL (type TIMESTAMP) avec trois valeurs insérées.

```
SELECT timestamp_val FROM timestamp_test;
            
timestamp_val
------------------
1988-05-15 10:23:31
2021-03-18 17:20:41
2023-06-02 18:11:12
```

L’exemple suivant ajoute 20 ans uniquement aux valeurs TIMESTAMP\$1VAL de TIMESTAMP\$1TEST antérieures à l’an 2000.

```
SELECT dateadd(year,20,timestamp_val) 
FROM timestamp_test
WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS');
            
date_add
---------------
2008-05-15 10:23:31
```

L’exemple suivant ajoute 5 secondes à une valeur d’horodatage littérale écrite sans indicateur de secondes.

```
SELECT dateadd(second, 5, timestamp '2001-06-06');
            
date_add
---------------
2001-06-06 00:00:05
```

## Notes d’utilisation
<a name="r_DATEADD_usage_notes"></a>

 Les fonctions DATEADD(month, ...) et ADD\$1MONTHS gèrent les dates tombant différemment en fin de mois :
+ ADD\$1MONTHS : Si la date que vous ajoutez est le dernier jour du mois, le résultat est toujours le dernier jour du mois du résultat, quelle que soit la longueur du mois. Par exemple, 30 avril \$1 1 mois est le 31 mai : 

  ```
  select add_months('2008-04-30',1);
  
  add_months
  ---------------------
  2008-05-31 00:00:00
  (1 row)
  ```
+ DATEADD : S’il y a moins de jours dans la date que vous ajoutez que dans le mois du résultat, le résultat sera le jour correspondant du mois du résultat, pas le dernier jour du mois. Par exemple, 30 avril \$1 1 mois est le 30 mai : 

  ```
  select dateadd(month,1,'2008-04-30');
  
  date_add
  ---------------------
  2008-05-30 00:00:00
  (1 row)
  ```

La fonction DATEADD gère la date de l’année bissextile du 29/02 différemment selon que vous utilisez dateadd(month, 12,...) ou dateadd(year, 1,...). 

```
select dateadd(month,12,'2016-02-29');
               
date_add
---------------------
2017-02-28 00:00:00

select dateadd(year, 1, '2016-02-29');

date_add       
---------------------
2017-03-01 00:00:00
```

# Fonction DATEDIFF
<a name="r_DATEDIFF_function"></a>

DATEDIFF renvoie la différence entre les parties de date de deux expressions de date ou d’heure. 

## Syntaxe
<a name="r_DATEDIFF_function-synopsis"></a>

```
DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
```

## Arguments
<a name="r_DATEDIFF_function-arguments"></a>

 *datepart*   
Partie spécifique de la valeur date ou time (année, mois, ou jour, heure, minute, seconde, milliseconde ou microseconde) sur laquelle la fonction opère. Pour plus d'informations, consultez [Parties de date pour les fonctions de date ou d’horodatage](r_Dateparts_for_datetime_functions.md).   
Plus précisément, DATEDIFF détermine le nombre de limites de partie de date qui sont traversées entre deux expressions. Par exemple, supposons que vous calculez la différence en années entre deux dates, `12-31-2008` et `01-01-2009`. Dans ce cas, la fonction renvoie 1 an malgré le fait que ces dates n’ont qu’un jour d’écart. Si vous trouvez la différence en heures entre les deux horodatages, `01-01-2009 8:30:00` et `01-01-2009 10:00:00`, le résultat est 2 heures. Si vous trouvez la différence en heures entre les deux horodatages, `8:30:00` et `10:00:00`, le résultat est 2 heures.

*date*\$1*time*\$1*timetz*\$1*timestamp*  
Une colonne ou des expressions DATE, TIME, TIMETZ ou TIMESTAMP qui se convertissent implicitement en DATE, TIME, TIMETZ ou TIMESTAMP. Les expressions régulières doivent contenir la date ou partie de date spécifiée. Si la seconde date ou heure est ultérieure à la première date ou heure, le résultat est positif. Si la seconde date ou heure est antérieure à la première date ou heure, le résultat est négatif.

## Type de retour
<a name="r_DATEDIFF_function-return-type"></a>

BIGINT

## Exemples avec une colonne DATE
<a name="r_DATEDIFF_function-examples"></a>

L’exemple suivant met en évidence la différence, en nombre de semaines, entre deux valeurs de date littérales. 

```
select datediff(week,'2009-01-01','2009-12-31') as numweeks;

numweeks
----------
52
(1 row)
```

L’exemple suivant permet de trouver la différence, en heures, entre deux valeurs littérales de date. Si vous n’indiquez pas la valeur temporelle d’une date, celle-ci est fixée par défaut à 00:00:00.

```
select datediff(hour, '2023-01-01', '2023-01-03 05:04:03');
            
date_diff
----------
53
(1 row)
```

L’exemple suivant permet de trouver la différence, en jours, entre deux valeurs TIMESTAMETZ littérales. 

```
Select datediff(days, 'Jun 1,2008  09:59:59 EST', 'Jul 4,2008  09:59:59 EST')
         
date_diff
----------
33
```

L’exemple suivant permet de trouver la différence, en jours, entre deux dates figurant sur la même ligne d’une table.

```
select * from date_table;

start_date |   end_date
-----------+-----------
2009-01-01 | 2009-03-23
2023-01-04 | 2024-05-04
(2 rows)

select datediff(day, start_date, end_date) as duration from date_table;
         
duration
---------
      81
     486
(2 rows)
```

L’exemple suivant met en évidence la différence, dans le nombre de trimestres, entre une valeur littérale dans le passé et la date du jour. Cet exemple suppose que la date du jour est le 5 juin 2008. Vous pouvez nommer les parties de date intégralement ou les abréger. Le nom de colonne par défaut pour la fonction DATEDIFF est DATE\$1DIFF. 

```
select datediff(qtr, '1998-07-01', current_date);

date_diff
-----------
40
(1 row)
```

L’exemple suivant joint les tables SALES et LISTING pour calculer combien de jours après leur mise en vente des billets ont été vendus pour les listes 1000 à 1005. L’attente la plus longue pour les ventes de ces listes a été 15 jours, et la plus courte a été de moins d’une journée (0 jour). 

```
select priceperticket,
datediff(day, listtime, saletime) as wait
from sales, listing where sales.listid = listing.listid
and sales.listid between 1000 and 1005
order by wait desc, priceperticket desc;

priceperticket | wait
---------------+------
 96.00         |   15
 123.00        |   11
 131.00        |    9
 123.00        |    6
 129.00        |    4
 96.00         |    4
 96.00         |    0
(7 rows)
```

Cet exemple calcule la moyenne du nombre d’heures que les vendeurs ont attendu pour toutes les ventes de billets. 

```
select avg(datediff(hours, listtime, saletime)) as avgwait
from sales, listing
where sales.listid = listing.listid;

avgwait
---------
465
(1 row)
```

## Exemples avec une colonne TIME
<a name="r_DATEDIFF_function-examples-time"></a>

L'exemple de table TIME\$1TEST suivant comporte une colonne TIME\$1VAL (type TIME) avec trois valeurs insérées.

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

L’exemple suivant montre comment trouver la différence en nombre d’heures entre la colonne TIME\$1VAL et une valeur de temps littérale.

```
select datediff(hour, time_val, time '15:24:45') from time_test;
         
 date_diff
-----------
        -5
        15
        15
```

L’exemple suivant montre comment trouver la différence en nombre de minutes entre deux valeurs de temps littérales.

```
select datediff(minute, time '20:00:00', time '21:00:00') as nummins;  
         
nummins 
---------- 
60
```

## Exemples avec une colonne TIMETZ
<a name="r_DATEDIFF_function-examples-timetz"></a>

L'exemple de table TIMETZ\$1TEST suivant comporte une colonne TIMETZ\$1VAL (type TIMETZ) avec trois valeurs insérées.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

L’exemple suivant montre comment trouver la différence en nombre d’heures entre une valeur TIMETZ littérale et une valeur timez\$1val. 

```
select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test;

numhours 
---------- 
0
-4
1
```

L’exemple suivant montre comment trouver la différence en nombre d’heures entre deux valeurs TIMETZ littérales.

```
select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours;
         
numhours 
---------- 
1
```

# Fonction DATE\$1PART
<a name="r_DATE_PART_function"></a>

DATE\$1PART extrait des valeurs date part d’une expression. DATE\$1PART est un synonyme de la fonction PGDATE\$1PART. 

## Syntaxe
<a name="r_DATE_PART_function-synopsis"></a>

```
DATE_PART(datepart, {date|timestamp})
```

## Arguments
<a name="r_DATE_PART_function-arguments"></a>

 *datepart*   
Un identifiant littéral ou une chaîne de caractères de la partie spécifique de la valeur de la date (par exemple, l’année, le mois ou le jour) sur laquelle la fonction opère. Pour plus d’informations, consultez [Parties de date pour les fonctions de date ou d’horodatage](r_Dateparts_for_datetime_functions.md). 

\$1*date*\$1*timestamp*\$1  
Une colonne de date, une colonne d’horodatage ou une expression qui se convertit implicitement en date ou en horodatage. La colonne ou l’expression en *date* ou *timestamp* doit contenir la partie date spécifiée dans *datepart*. 

## Type de retour
<a name="r_DATE_PART_function-return-type"></a>

DOUBLE

## Exemples
<a name="r_DATE_PART_function-examples"></a>

Le nom de colonne par défaut pour la fonction DATE\$1PART est `pgdate_part`.

 Pour obtenir plus d’informations sur les données utilisées dans certains de ces exemples, consultez [Exemple de base de données](c_sampledb.md).

L’exemple suivant recherche le jour de la semaine à partir d’un littéral d’horodatage. 

```
SELECT DATE_PART(minute, timestamp '20230104 04:05:06.789');
            
pgdate_part
-----------
         5
```

L’exemple suivant recherche le numéro de semaine à partir d’un littéral d’horodatage. Le calcul du numéro de semaine est conforme à la norme ISO 8601. Pour plus d’informations, consultez la page Wikipédia [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).

```
SELECT DATE_PART(week, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         18
```

L’exemple suivant recherche le jour du mois à partir d’un littéral d’horodatage.

```
SELECT DATE_PART(day, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         2
```

L’exemple suivant recherche le jour de la semaine à partir d’un littéral d’horodatage. Le jour de la semaine est un nombre entier compris entre 0 et 6, en commençant par dimanche.

```
SELECT DATE_PART(dayofweek, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         1
```

L’exemple suivant recherche le siècle à partir d’un littéral d’horodatage. Le calcul du siècle suit la norme ISO 8601. Pour plus d’informations, consultez la page Wikipédia [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).

```
SELECT DATE_PART(century, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         21
```

L’exemple suivant permet de trouver le millénaire à partir d’un littéral d’horodatage. Le calcul du millénaire suit la norme ISO 8601. Pour plus d’informations, consultez la page Wikipédia [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).

```
SELECT DATE_PART(millennium, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         3
```

L’exemple suivant permet de trouver les microsecondes à partir d’un littéral d’horodatage. Le calcul des microsecondes est conforme à la norme ISO 8601. Pour plus d’informations, consultez la page Wikipédia [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601).

```
SELECT DATE_PART(microsecond, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
    789000
```

L’exemple suivant recherche le mois à partir d’un littéral de date. 

```
SELECT DATE_PART(month, date '20220502');
            
pgdate_part
-----------
         5
```

L’exemple suivant applique la fonction DATE\$1PART à une colonne dans une table. 

```
SELECT date_part(w, listtime) AS weeks, listtime
FROM listing 
WHERE listid=10
            

weeks |      listtime
------+---------------------
 25   | 2008-06-17 09:44:54
(1 row)
```

Vous pouvez nommer les parties de date intégralement ou les abrégés ; dans ce cas, *w* est synonyme de semaines. 

Le jour de la semaine renvoie un nombre entier compris entre 0 et 6, en commençant par dimanche. Utilisez DATE\$1PART avec dow (DAYOFWEEK) afin d’afficher les événements d’un samedi. 

```
SELECT date_part(dow, starttime) AS dow, starttime 
FROM event
WHERE date_part(dow, starttime)=6
ORDER BY 2,1;     

 dow |      starttime
-----+---------------------
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
...
(1147 rows)
```

# Fonction DATE\$1PART\$1YEAR
<a name="r_DATE_PART_YEAR"></a>

La fonction DATE\$1PART\$1YEAR extrait l’année d’une date. 

## Syntaxe
<a name="r_DATE_PART_YEAR-synopsis"></a>

```
DATE_PART_YEAR(date)
```

## Argument
<a name="r_DATE_PART_YEAR-argument"></a>

 *date*   
Colonne de type de données `DATE` ou expression implicitement évaluée à un type `DATE`.

## Type de retour
<a name="r_DATE_PART_YEAR-return-type"></a>

INTEGER

## Exemples
<a name="r_DATE_PART_YEAR-examples"></a>

L’exemple suivant recherche l’année à partir d’un littéral de date. 

```
SELECT DATE_PART_YEAR(date '20220502 04:05:06.789');

date_part_year
---------------
2022
```

L’exemple suivant extrait l’année de la colonne CALDATE. Les valeurs de la colonne CALDATE sont des dates. Pour obtenir plus d’informations sur les données utilisées dans cet exemple, consultez [Exemple de base de données](c_sampledb.md).

```
select caldate, date_part_year(caldate)
from date
order by
dateid limit 10;

 caldate   | date_part_year
-----------+----------------
2008-01-01 |           2008
2008-01-02 |           2008
2008-01-03 |           2008
2008-01-04 |           2008
2008-01-05 |           2008
2008-01-06 |           2008
2008-01-07 |           2008
2008-01-08 |           2008
2008-01-09 |           2008
2008-01-10 |           2008
(10 rows)
```

# Fonction DATE\$1TRUNC
<a name="r_DATE_TRUNC"></a>

La fonction DATE\$1TRUNC tronque une expression d’horodatage ou littérale en fonction de la partie de date que vous spécifiez, telle que l’heure, le jour ou le mois. 

## Syntaxe
<a name="r_DATE_TRUNC-synopsis"></a>

```
DATE_TRUNC('datepart', timestamp)
```

## Arguments
<a name="r_DATE_TRUNC-arguments"></a>

 *datepart*   
Partie de la date à laquelle tronquer la valeur d’horodatage. L’entrée *timestamp* est tronquée à la précision de l’entrée *datepart*. Par exemple, `month` tronque jusqu’au premier jour du mois. Les formats valides sont les suivants :   
+ microseconde, microsecondes
+ milliseconde, millisecondes
+ seconde, secondes
+ minute, minutes
+ heure, heures
+ jour, jours
+ semaine, semaines
+ mois
+ trimestre, trimestres
+ année, années
+ décennie, décennies
+ siècle, siècles
+ millénaire, millénaires
Pour plus d’informations sur les abréviations de certains formats, consultez [Parties de date pour les fonctions de date ou d’horodatage](r_Dateparts_for_datetime_functions.md).

 *timestamp*   
Colonne timestamp ou expression qui convertit implicitement en un horodatage.

## Type de retour
<a name="r_DATE_TRUNC-return-type"></a>

TIMESTAMP

## Exemples
<a name="r_DATE_TRUNC-example"></a>

Tronquer l’horodatage en entrée à la seconde.

```
SELECT DATE_TRUNC('second', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:05:06
```

Tronquer l’horodatage en entrée à la minute.

```
SELECT DATE_TRUNC('minute', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:05:00
```

Tronquer l’horodatage en entrée à l’heure.

```
SELECT DATE_TRUNC('hour', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:00:00
```

Tronquer l’horodatage en entrée au jour.

```
SELECT DATE_TRUNC('day', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 00:00:00
```

Tronquer l’horodatage en entrée au premier jour du mois.

```
SELECT DATE_TRUNC('month', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-01 00:00:00
```

Tronquer l’horodatage en entrée au premier jour d’un trimestre.

```
SELECT DATE_TRUNC('quarter', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-01 00:00:00
```

Tronquer l’horodatage en entrée au premier jour de l’année.

```
SELECT DATE_TRUNC('year', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-01-01 00:00:00
```

Tronquer l’horodatage en entrée au premier jour d’un siècle.

```
SELECT DATE_TRUNC('millennium', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2001-01-01 00:00:00
```

Tronquez l’horodatage en entrée au lundi d’une semaine.

```
select date_trunc('week', TIMESTAMP '20220430 04:05:06.789');
date_trunc
2022-04-25 00:00:00
```

Dans l’exemple suivant, la fonction DATE\$1TRUNC utilise la partie de date ’week’ pour renvoyer la date du lundi de chaque semaine. 

```
select date_trunc('week', saletime), sum(pricepaid) from sales where
saletime like '2008-09%' group by date_trunc('week', saletime) order by 1;

date_trunc  |    sum
------------+-------------
2008-09-01  | 2474899
2008-09-08  | 2412354
2008-09-15  | 2364707
2008-09-22  | 2359351
2008-09-29  |  705249
```

# Fonction EXTRACT
<a name="r_EXTRACT_function"></a>

La fonction EXTRACT renvoie une partie de date ou d’heure à partir d’une valeur TIMESTAMP, TIMESTAMPTZ, TIMETZ, INTERVAL YEAR TO MONTH ou INTERVAL DAY TO SECOND. Les exemples incluent le jour, le mois, l’année, l’heure, la minute, la seconde, la milliseconde ou la microseconde d’un horodatage.

## Syntaxe
<a name="r_EXTRACT_function-synopsis"></a>

```
EXTRACT(datepart FROM source)
```

## Arguments
<a name="r_EXTRACT_function-arguments"></a>

 *datepart*   
Sous-champ d’une date ou d’une heure à extraire, tel que le jour, le mois, l’année, l’heure, la minute, la seconde, la milliseconde ou la microseconde. Pour les valeurs possibles, consultez [Parties de date pour les fonctions de date ou d’horodatage](r_Dateparts_for_datetime_functions.md). 

 *source*   
Une colonne ou une expression qui évalue un type de données TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH ou INTERVAL DAY TO SECOND.

## Type de retour
<a name="r_EXTRACT_function-return-type"></a>

INTEGER si la valeur *source* est de type TIMESTAMP, TIME, TIMETZ, INTERVAL YEAR TO MONTH ou INTERVAL DAY TO SECOND.

DOUBLE PRECISION si la valeur *source* est de type TIMESTAMPTZ.

## Exemples avec TIMESTAMP
<a name="r_EXTRACT_function-examples"></a>

L’exemple suivant renvoie le nombre de semaines pour les ventes au cours desquelles le prix payé était de 10 000 \$1 ou plus. Cet exemple utilise les données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

```
select salesid, extract(week from saletime) as weeknum
from sales 
where pricepaid > 9999 
order by 2;

salesid | weeknum
--------+---------
 159073 |       6
 160318 |       8
 161723 |      26
```

L’exemple suivant renvoie la valeur de minute à partir d’une valeur d’horodatage littérale. 

```
select extract(minute from timestamp '2009-09-09 12:08:43');
            
date_part
-----------
8
```

L’exemple suivant renvoie la valeur de la milliseconde à partir d’une valeur littérale d’horodatage. 

```
select extract(ms from timestamp '2009-09-09 12:08:43.101');
            
date_part
-----------
101
```

## Exemples avec TIMESTAMPTZ
<a name="r_EXTRACT_function-examples-timestamptz"></a>

L’exemple suivant renvoie la valeur de l’année à partir d’une valeur littérale de timestamptz. 

```
select extract(year from timestamptz '1.12.1997 07:37:16.00 PST');
            
date_part
-----------
1997
```

## Exemples avec TIME
<a name="r_EXTRACT_function-examples-time"></a>

L’exemple de table TIME\$1TEST suivant comporte une colonne TIME\$1VAL (type TIME) avec trois valeurs insérées. 

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

L’exemple suivant extrait les minutes de chaque time\$1val.

```
select extract(minute from time_val) as minutes from time_test;
            
minutes
-----------
         0
         0
         58
```

L’exemple suivant extrait les heures de chaque time\$1val.

```
select extract(hour from time_val) as hours from time_test;
            
hours
-----------
         20
         0
         0
```

L’exemple suivant extrait des millisecondes d’une valeur littérale.

```
select extract(ms from time '18:25:33.123456');
            
 date_part
-----------
     123
```

## Exemples avec TIMETZ
<a name="r_EXTRACT_function-examples-timetz"></a>

L’exemple de table TIMETZ\$1TEST suivant comporte une colonne TIMETZ\$1VAL (type TIMETZ) avec trois valeurs insérées.

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

L'exemple suivant extrait les heures de chaque timez\$1val.

```
select extract(hour from timetz_val) as hours from time_test;
            
hours
-----------
         4
         0
         5
```

L’exemple suivant extrait des millisecondes d’une valeur littérale. Les valeurs littérales ne sont pas converties en UTC avant le traitement de l’extraction. 

```
select extract(ms from timetz '18:25:33.123456 EST');
            
 date_part
-----------
     123
```

L’exemple suivant renvoie l’heure de décalage du fuseau horaire par rapport à UTC à partir d’une valeur littérale de timetz. 

```
select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT');
            
date_part
-----------
-7
```

## Exemples avec INTERVAL YEAR TO MONTH et INTERVAL DAY TO SECOND
<a name="r_EXTRACT_function-examples-interval"></a>

L’exemple suivant extrait la partie jour de `1` de INTERVAL DAY TO SECOND qui définit 36 heures, soit 1 jour et 12 heures.

```
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)
  
 date_part
------------------
 1
```

L’exemple suivant extrait la partie mois de `3` de YEAR TO MONTH qui définit 15 mois, soit 1 an et 3 mois.

```
select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH)
  
 date_part
------------------
 3
```

L’exemple suivant extrait la partie mois de `6` de 30 mois, soit 2 ans et 6 mois.

```
select EXTRACT('month' from INTERVAL '30' MONTH)
   
 date_part
------------------
 6
```

L’exemple suivant extrait la partie heure de `2` de 50 heures, soit 2 jours et 2 heures.

```
select EXTRACT('hours' from INTERVAL '50' HOUR)
  
 date_part
------------------
 2
```

L’exemple suivant extrait la partie minute de `11` de 1 heure 11 minutes et 11,123 secondes.

```
select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND)
  
 date_part
------------------
 11
```

L’exemple suivant extrait la partie seconde de `1.11` de 1 jour 1 heure 1 minute et 1,11 seconde.

```
select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
  
 date_part
------------------
 1.11
```

L’exemple suivant extrait le nombre total d’heures d’un INTERVAL. Chaque partie est extraite et ajoutée à un total.

```
select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR)
 
 ?column?
------------------
 50
```

L’exemple suivant extrait le nombre total de secondes d’un INTERVAL. Chaque partie est extraite et ajoutée à un total.

```
select EXTRACT('days' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 86400 + 
       EXTRACT('hours' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 3600 +
       EXTRACT('minutes' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 60 + 
       EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
  
 ?column?
------------------
 90061.11
```

# Fonction GETDATE
<a name="r_GETDATE"></a>

GETDATE renvoie la date et l’heure actuelles selon le fuseau horaire en cours (UTC par défaut). Cette fonction renvoie la date ou l’heure de début de l’instruction actuelle, même lorsqu’elle se trouve dans un bloc de transaction.

## Syntaxe
<a name="r_GETDATE-synopsis"></a>

```
GETDATE()
```

Les parenthèses sont obligatoires. 

## Type de retour
<a name="r_GETDATE-return-type"></a>

TIMESTAMP

## Exemples
<a name="r_GETDATE-examples"></a>

L’exemple suivant utilise la fonction GETDATE pour renvoyer l’horodatage complet de la date du jour. 

```
select getdate();

timestamp
---------------------
2008-12-04 16:10:43
```

L’exemple suivant utilise la fonction GETDATE à l’intérieur de la fonction TRUNC pour renvoyer la date du jour sans l’heure.

```
select trunc(getdate());

trunc
------------
2008-12-04
```

# Fonction INTERVAL\$1CMP
<a name="r_INTERVAL_CMP"></a>

INTERVAL\$1CMP compare deux intervalles et renvoie `1` si le premier intervalle est supérieur, `-1` si le deuxième intervalle est supérieur, et `0` si les intervalles sont égaux. Pour plus d'informations, consultez [Exemples de littéraux interval sans syntaxe de qualificatif](r_interval_literals.md).

## Syntaxe
<a name="r_INTERVAL_CMP-syntax"></a>

```
INTERVAL_CMP(interval1, interval2)
```

## Arguments
<a name="r_INTERVAL_CMP-arguments"></a>

 *interval1*   
Valeur d’intervalle littérale.

 *interval2*   
Valeur d’intervalle littérale.

## Type de retour
<a name="r_INTERVAL_CMP-return-type"></a>

INTEGER

## Exemples
<a name="r_INTERVAL_CMP-examples"></a>

L’exemple suivant compare la valeur de `3 days` à `1 year`. 

```
select interval_cmp('3 days','1 year');

interval_cmp
--------------
-1
```

Cet exemple compare la valeur de `7 days` à `1 week`. 

```
select interval_cmp('7 days','1 week');

interval_cmp
--------------
0
```

L’exemple suivant compare la valeur de `1 year` à `3 days`. 

```
select interval_cmp('1 year','3 days');

interval_cmp
--------------
1
```

# Fonction LAST\$1DAY
<a name="r_LAST_DAY"></a>

LAST\$1DAY renvoie la date du dernier jour du mois qui contient *date*. Le type de retour est toujours DATE, quel que soit le type de données de l’argument *date*.

Pour plus d’informations sur l’extraction de parties de dates spécifiques, consultez [Fonction DATE\$1TRUNC](r_DATE_TRUNC.md).

## Syntaxe
<a name="r_LAST_DAY-synopsis"></a>

```
LAST_DAY( { date | timestamp } )
```

## Arguments
<a name="r_LAST_DAY-arguments"></a>

*date* \$1 *timestamp*

Colonne de type de données `DATE` ou `TIMESTAMP` ou expression implicitement évaluée à un type `DATE` ou `TIMESTAMP`.

## Type de retour
<a name="r_LAST_DAY-return-type"></a>

DATE

## Exemples
<a name="r_LAST_DAY-examples"></a>

L’exemple suivant renvoie la date du dernier jour du mois en cours.

```
select last_day(sysdate);

  last_day
------------
 2014-01-31
```

L’exemple suivant renvoie le nombre de billets vendus pour chacun des 7 derniers jours du mois. Les valeurs de la colonne SALETIME sont des horodatages.

```
select datediff(day, saletime, last_day(saletime)) as "Days Remaining", sum(qtysold)
from sales
where datediff(day, saletime, last_day(saletime)) < 7
group by 1
order by 1;

days remaining |  sum
---------------+-------
             0 | 10140
             1 | 11187
             2 | 11515
             3 | 11217
             4 | 11446
             5 | 11708
             6 | 10988
(7 rows)
```

# Fonction MONTHS\$1BETWEEN
<a name="r_MONTHS_BETWEEN_function"></a>

MONTHS\$1BETWEEN détermine le nombre de mois entre deux dates.

Si la première date est ultérieure à la deuxième date, le résultat est positif ; Sinon, le résultat est négatif.

Si des arguments ont la valeur null, le résultat a la valeur NULL.

## Syntaxe
<a name="r_MONTHS_BETWEEN_function-synopsis"></a>

```
MONTHS_BETWEEN( date1, date2 )
```

## Arguments
<a name="r_MONTHS_BETWEEN_function-arguments"></a>

 *date1*   
Colonne de type de données `DATE` ou expression implicitement évaluée à un type `DATE`.

 *date2*   
Colonne de type de données `DATE` ou expression implicitement évaluée à un type `DATE`.

## Type de retour
<a name="r_MONTHS_BETWEEN_function-return-type"></a>

FLOAT8

La partie du nombre entier du résultat est basée sur la différence entre les valeurs de l’année et du mois des dates. La partie fractionnée du résultat est calculée à partir des valeurs de jour et d’horodatage de la date et présume qu’un mois dure 31 jours.

Si *date1* et *date2* contiennent la même date dans un mois (par exemple, 15/01/14 et 15/02/14) ou le dernier jour du mois (par exemple, le 31/08/14 et le 30/09/14), le résultat est donc un nombre entier basé sur les valeurs de l’année et du mois des dates, que la partie horodatage corresponde ou non, le cas échéant.

## Exemples
<a name="r_MONTHS_BETWEEN_function-examples"></a>

L’exemple suivant renvoie les mois compris entre le 18/01/1969 et le 18/03/1969. 

```
select months_between('1969-01-18', '1969-03-18')
as months;

months
----------
-2
```

L’exemple suivant renvoie les mois compris entre le 18/01/1969 et le 18/01/1969. 

```
select months_between('1969-01-18', '1969-01-18')
as months;

months
----------
0
```

 L’exemple suivant renvoie les mois entre les premières et la dernières des projections d’un événement. 

```
select eventname, 
min(starttime) as first_show,
max(starttime) as last_show,
months_between(max(starttime),min(starttime)) as month_diff
from event 
group by eventname
order by eventname
limit 5;

eventname         first_show             last_show              month_diff
---------------------------------------------------------------------------
.38 Special       2008-01-21 19:30:00.0  2008-12-25 15:00:00.0  11.12
3 Doors Down      2008-01-03 15:00:00.0  2008-12-01 19:30:00.0  10.94
70s Soul Jam      2008-01-16 19:30:00.0  2008-12-07 14:00:00.0  10.7
A Bronx Tale      2008-01-21 19:00:00.0  2008-12-15 15:00:00.0  10.8
A Catered Affair  2008-01-08 19:30:00.0  2008-12-19 19:00:00.0  11.35
```

# Fonction NEXT\$1DAY
<a name="r_NEXT_DAY"></a>

NEXT\$1DAY renvoie la date de la première instance d’une date spécifiée qui est ultérieure à la date donnée.

Si la valeur de *day* correspond au même jour de la semaine que la date donnée, la prochaine occurrence de ce jour est renvoyée.

## Syntaxe
<a name="r_NEXT_DAY-synopsis"></a>

```
NEXT_DAY( { date | timestamp }, day )
```

## Arguments
<a name="r_NEXT_DAY-arguments"></a>

 *date* \$1 *timestamp*  
Colonne de type de données `DATE` ou `TIMESTAMP` ou expression implicitement évaluée à un type `DATE` ou `TIMESTAMP`.

 *day*   
Chaîne contenant le nom de n’importe quel jour. La capitalisation n’a pas d’importance.  
Les valeurs valides sont les suivantes.      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_NEXT_DAY.html)

## Type de retour
<a name="r_NEXT_DAY-return-type"></a>

DATE

## Exemples
<a name="r_NEXT_DAY-example"></a>

L’exemple suivant renvoie la date du premier mardi après le 20/08/2014.

```
select next_day('2014-08-20','Tuesday');

next_day
-----------
2014-08-26
```

L’exemple suivant renvoie la date du premier mardi après le 01/01/2008 à 5:54:44.

```
select listtime, next_day(listtime, 'Tue') from listing limit 1;

listtime            | next_day
--------------------+-----------
2008-01-01 05:54:44 | 2008-01-08
```

L’exemple suivant obtient les dates marketing cible du troisième trimestre.

```
select username, (firstname ||' '|| lastname) as name,
eventname, caldate, next_day (caldate, 'Monday') as marketing_target
from sales, date, users, event
where sales.buyerid = users.userid
and sales.eventid = event.eventid
and event.dateid = date.dateid
and date.qtr = 3
order by marketing_target, eventname, name;

username  |     name          |     eventname        |    caldate   |   marketing_target
----------+-------------------+----------------------+--------------+-------------------
MBO26QSG  |   Callum Atkinson | .38 Special          |  2008-07-06  |	2008-07-07
WCR50YIU  |   Erasmus Alvarez | A Doll's House       |  2008-07-03  |	2008-07-07
CKT70OIE  |   Hadassah Adkins | Ana Gabriel          |  2008-07-06  |	2008-07-07
VVG07OUO  |   Nathan Abbott   | Armando Manzanero    |  2008-07-04  |	2008-07-07
GEW77SII  |   Scarlet Avila   | August: Osage County |  2008-07-06  |	2008-07-07
ECR71CVS  |   Caryn Adkins    | Ben Folds            |  2008-07-03  |	2008-07-07
KUW82CYU  |   Kaden Aguilar   | Bette Midler         |  2008-07-01  |	2008-07-07
WZE78DJZ  |   Kay Avila       | Bette Midler         |  2008-07-01  |	2008-07-07
HXY04NVE  |   Dante Austin    | Britney Spears       |  2008-07-02  |	2008-07-07
URY81YWF  |   Wilma Anthony   | Britney Spears       |  2008-07-02  |	2008-07-07
```

# Fonction SYSDATE
<a name="r_SYSDATE"></a>

SYSDATE renvoie la date et l’heure actuelles selon le fuseau horaire en cours (UTC par défaut). 

**Note**  
SYSDATE renvoie la date et l’heure de début de la transaction en cours, pas pour le début de l’instruction en cours.

## Syntaxe
<a name="r_SYSDATE-synopsis"></a>

```
SYSDATE
```

Cette fonction ne nécessite aucun argument. 

## Type de retour
<a name="r_SYSDATE-return-type"></a>

TIMESTAMP

## Exemples
<a name="r_SYSDATE-examples"></a>

L’exemple suivant utilise la fonction SYSDATE pour renvoyer l’horodatage complet de la date actuelle.

```
select sysdate;

timestamp
----------------------------
2008-12-04 16:10:43.976353
```

L’exemple suivant utilise la fonction SYSDATE à l’intérieur de la fonction TRUNC pour renvoyer la date du jour sans l’heure.

```
select trunc(sysdate);

trunc
------------
2008-12-04
```

La requête suivante renvoie des informations sur les ventes à des dates comprises entre la date d’émission de la requête et la date, quelle qu’elle soit, 120 jours plus tôt.

```
select salesid, pricepaid, trunc(saletime) as saletime, trunc(sysdate) as now
from sales
where saletime between trunc(sysdate)-120 and trunc(sysdate)
order by saletime asc;

 salesid | pricepaid |  saletime  |    now
---------+-----------+------------+------------
91535    |    670.00 | 2008-08-07 | 2008-12-05
91635    |    365.00 | 2008-08-07 | 2008-12-05
91901    |   1002.00 | 2008-08-07 | 2008-12-05
...
```

# Fonction TIMEOFDAY
<a name="r_TIMEOFDAY_function"></a>

TIMEOFDAY est un alias spécial utilisé pour renvoyer le jour de la semaine, la date et l’heure comme valeur de chaîne. Cette fonction renvoie la chaîne de l’heure pour l’instruction actuelle, même lorsqu’elle se trouve dans un bloc de transaction. 

## Syntaxe
<a name="r_TIMEOFDAY_function-syntax"></a>

```
TIMEOFDAY()
```

## Type de retour
<a name="r_TIMEOFDAY_function-return-type"></a>

VARCHAR

## Exemples
<a name="r_TIMEOFDAY_function-examples"></a>

L’exemple suivant renvoie la date et l’heure actuelles à l’aide de la fonction TIMEOFDAY. 

```
select timeofday();

timeofday
------------
Thu Sep 19 22:53:50.333525 2013 UTC
```

# Fonction TIMESTAMP\$1CMP
<a name="r_TIMESTAMP_CMP"></a>

Compare la valeur de deux horodatages et renvoie un nombre entier. Si les valeurs d’horodatage sont identiques, la fonction renvoie `0`. Si la valeur du premier horodatage est supérieure, la fonction renvoie `1`. Si la valeur du second horodatage est supérieure, la fonction renvoie `-1`.

## Syntaxe
<a name="r_TIMESTAMP_CMP-synopsis"></a>

```
TIMESTAMP_CMP(timestamp1, timestamp2)
```

## Arguments
<a name="r_TIMESTAMP_CMP-arguments"></a>

 *timestamp1*   
Colonne de type de données `TIMESTAMP` ou expression implicitement évaluée à un type `TIMESTAMP`.

 *timestamp2*   
Colonne de type de données `TIMESTAMP` ou expression implicitement évaluée à un type `TIMESTAMP`.

## Type de retour
<a name="r_TIMESTAMP_CMP-return-type"></a>

INTEGER

## Exemples
<a name="r_TIMESTAMP_CMP-examples"></a>

L’exemple suivant compare les horodatages et affiche les résultats de la comparaison.

```
SELECT TIMESTAMP_CMP('2008-01-24 06:43:29', '2008-01-24 06:43:29'), TIMESTAMP_CMP('2008-01-24 06:43:29', '2008-02-18 02:36:48'), TIMESTAMP_CMP('2008-02-18 02:36:48', '2008-01-24 06:43:29');

timestamp_cmp  | timestamp_cmp | timestamp_cmp 
---------------+---------------+---------------
             0 |            -1 |             1
```

L’exemple suivant compare les LISTTIME et SALETIME pour obtenir une liste. La valeur de TIMESTAMP\$1CMP est `-1` pour toutes les listes, car l’horodatage de la vente est postérieur à celui de la liste.

```
select listing.listid, listing.listtime,
sales.saletime, timestamp_cmp(listing.listtime, sales.saletime)
from listing, sales
where listing.listid=sales.listid
order by 1, 2, 3, 4
limit 10;

 listid |      listtime       |      saletime       | timestamp_cmp
--------+---------------------+---------------------+---------------
      1 | 2008-01-24 06:43:29 | 2008-02-18 02:36:48 |            -1
      4 | 2008-05-24 01:18:37 | 2008-06-06 05:00:16 |            -1
      5 | 2008-05-17 02:29:11 | 2008-06-06 08:26:17 |            -1
      5 | 2008-05-17 02:29:11 | 2008-06-09 08:38:52 |            -1
      6 | 2008-08-15 02:08:13 | 2008-08-31 09:17:02 |            -1
     10 | 2008-06-17 09:44:54 | 2008-06-26 12:56:06 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-10 02:12:36 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-16 11:59:24 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-22 02:23:17 |            -1
     12 | 2008-07-25 01:45:49 | 2008-08-04 03:06:36 |            -1
(10 rows)
```

Cet exemple montre que TIMESTAMP\$1CMP renvoie un 0 pour des horodatages identiques : 

```
select listid, timestamp_cmp(listtime, listtime)
from listing
order by 1 , 2
limit 10;

 listid | timestamp_cmp
--------+---------------
      1 |             0
      2 |             0
      3 |             0
      4 |             0
      5 |             0
      6 |             0
      7 |             0
      8 |             0
      9 |             0
     10 |             0
(10 rows)
```

# Fonction TIMESTAMP\$1CMP\$1DATE
<a name="r_TIMESTAMP_CMP_DATE"></a>

TIMESTAMP\$1CMP\$1DATE compare la valeur d’un horodatage et une date. Si les valeurs d’horodatage et de date sont identiques, la fonction renvoie `0`. Si la valeur d’horodatage est supérieure du point de vue chronologique, la fonction renvoie `1`. Si la valeur de date est supérieure, la fonction renvoie `-1`.

## Syntaxe
<a name="r_TIMESTAMP_CMP_DATE-syntax"></a>

```
TIMESTAMP_CMP_DATE(timestamp, date)
```

## Arguments
<a name="r_TIMESTAMP_CMP_DATE-arguments"></a>

 *timestamp*   
Colonne de type de données `TIMESTAMP` ou expression implicitement évaluée à un type `TIMESTAMP`.

 *date*   
Colonne de type de données `DATE` ou expression implicitement évaluée à un type `DATE`.

## Type de retour
<a name="r_TIMESTAMP_CMP_DATE-return-type"></a>

INTEGER

## Exemples
<a name="r_TIMESTAMP_CMP_DATE-examples"></a>

L’exemple suivant compare LISTTIME à la date `2008-06-18`. Les listes faites avant cette date renvoient `1` ; les listes faites après cette date renvoient `-1`. Les valeurs de LISTTIME sont des horodatages.

```
select listid, listtime,
timestamp_cmp_date(listtime, '2008-06-18')
from listing
order by 1, 2, 3
limit 10;


 listid |      listtime       | timestamp_cmp_date
--------+---------------------+--------------------
      1 | 2008-01-24 06:43:29 |              -1
      2 | 2008-03-05 12:25:29 |              -1
      3 | 2008-11-01 07:35:33 |               1
      4 | 2008-05-24 01:18:37 |              -1
      5 | 2008-05-17 02:29:11 |              -1
      6 | 2008-08-15 02:08:13 |               1
      7 | 2008-11-15 09:38:15 |               1
      8 | 2008-11-09 05:07:30 |               1
      9 | 2008-09-09 08:03:36 |               1
     10 | 2008-06-17 09:44:54 |              -1
(10 rows)
```

# Fonction TIMESTAMP\$1CMP\$1TIMESTAMPTZ
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ"></a>

TIMESTAMP\$1CMP\$1TIMESTAMPTZ compare la valeur d’une expression d’horodatage avec une expression d’horodatage avec fuseau horaire. Si les valeurs d’horodatage et d’horodatage avec fuseau horaire sont identiques, la fonction renvoie `0`. Si la valeur d’horodatage est supérieure du point de vue chronologique, la fonction renvoie `1`. Si la valeur d’horodatage avec fuseau horaire est supérieure, la fonction renvoie `–1`.

## Syntaxe
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-syntax"></a>

```
TIMESTAMP_CMP_TIMESTAMPTZ(timestamp, timestamptz)
```

## Arguments
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-arguments"></a>

 *timestamp*   
Colonne de type de données `TIMESTAMP` ou expression implicitement évaluée à un type `TIMESTAMP`.

 *timestamptz*   
Colonne de type de données `TIMESTAMPTZ` ou expression implicitement évaluée à un type `TIMESTAMPTZ`.

## Type de retour
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-return-type"></a>

INTEGER

## Exemples
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-examples"></a>

L’exemple suivant compare les valeurs d’horodatage et d’horodatage avec fuseau horaire et affiche les résultats de la comparaison.

```
SELECT TIMESTAMP_CMP_TIMESTAMPTZ('2008-01-24 06:43:29', '2008-01-24 06:43:29+00'), TIMESTAMP_CMP_TIMESTAMPTZ('2008-01-24 06:43:29', '2008-02-18 02:36:48+00'), TIMESTAMP_CMP_TIMESTAMPTZ('2008-02-18 02:36:48', '2008-01-24 06:43:29+00');

timestamp_cmp_timestamptz  | timestamp_cmp_timestamptz | timestamp_cmp_timestamptz 
---------------------------+---------------------------+--------------------------
             0             |            -1             |             1
```

# Fonction TIMESTAMPTZ\$1CMP
<a name="r_TIMESTAMPTZ_CMP"></a>

TIMESTAMPTZ\$1CMP compare deux valeurs d’horodatage avec fuseau horaire et renvoie un nombre entier. Si les valeurs d’horodatage sont identiques, la fonction renvoie `0`. Si la valeur du premier horodatage est supérieure d’un point de vue chronologique, la fonction renvoie `1`. Si la valeur du second horodatage est supérieure, la fonction renvoie `–1`.

## Syntaxe
<a name="r_TIMESTAMPTZ_CMP-synopsis"></a>

```
TIMESTAMPTZ_CMP(timestamptz1, timestamptz2)
```

## Arguments
<a name="r_TIMESTAMPTZ_CMP-arguments"></a>

 *timestamptz1*   
Colonne de type de données `TIMESTAMPTZ` ou expression implicitement évaluée à un type `TIMESTAMPTZ`.

 *timestamptz2*   
Colonne de type de données `TIMESTAMPTZ` ou expression implicitement évaluée à un type `TIMESTAMPTZ`.

## Type de retour
<a name="r_TIMESTAMPTZ_CMP-return-type"></a>

INTEGER

## Exemples
<a name="r_TIMESTAMPTZ_CMP-examples"></a>

L’exemple suivant compare les valeurs d’horodatage avec fuseau horaire et affiche les résultats de la comparaison.

```
SELECT TIMESTAMPTZ_CMP('2008-01-24 06:43:29+00', '2008-01-24 06:43:29+00'), TIMESTAMPTZ_CMP('2008-01-24 06:43:29+00', '2008-02-18 02:36:48+00'), TIMESTAMPTZ_CMP('2008-02-18 02:36:48+00', '2008-01-24 06:43:29+00');

timestamptz_cmp  | timestamptz_cmp | timestamptz_cmp
-----------------+-----------------+----------------
        0        |       -1        |       1
```

# Fonction TIMESTAMPTZ\$1CMP\$1DATE
<a name="r_TIMESTAMPTZ_CMP_DATE"></a>

TIMESTAMPTZ\$1CMP\$1DATE compare la valeur d’un horodatage et d’une date. Si les valeurs d’horodatage et de date sont identiques, la fonction renvoie `0`. Si la valeur d’horodatage est supérieure du point de vue chronologique, la fonction renvoie `1`. Si la valeur de date est supérieure, la fonction renvoie `–1`.

## Syntaxe
<a name="r_TIMESTAMPTZ_CMP_DATE-syntax"></a>

```
TIMESTAMPTZ_CMP_DATE(timestamptz, date)
```

## Arguments
<a name="r_TIMESTAMPTZ_CMP_DATE-arguments"></a>

 *timestamptz*   
Colonne de type de données `TIMESTAMPTZ` ou expression implicitement évaluée à un type `TIMESTAMPTZ`.

 *date*   
Colonne de type de données `DATE` ou expression implicitement évaluée à un type `DATE`.

## Type de retour
<a name="r_TIMESTAMPTZ_CMP_DATE-return-type"></a>

INTEGER

## Exemples
<a name="r_TIMESTAMPTZ_CMP_DATE-examples"></a>

L’exemple suivant compare LISTTIME en tant qu’horodatage avec fuseau horaire à la date `2008-06-18`. Les listes faites avant cette date renvoient `1` ; les listes faites après cette date renvoient `-1`. 

```
select listid, CAST(listtime as timestamptz) as tstz,
timestamp_cmp_date(tstz, '2008-06-18')
from listing
order by 1, 2, 3
limit 10;


 listid |          tstz          | timestamptz_cmp_date
--------+------------------------+----------------------
      1 | 2008-01-24 06:43:29+00 |              -1
      2 | 2008-03-05 12:25:29+00 |              -1
      3 | 2008-11-01 07:35:33+00 |               1
      4 | 2008-05-24 01:18:37+00 |              -1
      5 | 2008-05-17 02:29:11+00 |              -1
      6 | 2008-08-15 02:08:13+00 |               1
      7 | 2008-11-15 09:38:15+00 |               1
      8 | 2008-11-09 05:07:30+00 |               1
      9 | 2008-09-09 08:03:36+00 |               1
     10 | 2008-06-17 09:44:54+00 |              -1
(10 rows)
```

# Fonction TIMESTAMPTZ\$1CMP\$1TIMESTAMP
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP"></a>

TIMESTAMPTZ\$1CMP\$1TIMESTAMP compare la valeur d’une expression d’horodatage avec fuseau horaire à une expression d’horodatage. Si les valeurs d’horodatage avec fuseau horaire et d’horodatage sont identiques, la fonction renvoie `0`. Si la valeur d’horodatage avec fuseau horaire est supérieure du point de vue chronologique, la fonction renvoie `1`. Si la valeur d’horodatage est supérieure, la fonction renvoie `–1`. 

## Syntaxe
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-syntax"></a>

```
TIMESTAMPTZ_CMP_TIMESTAMP(timestamptz, timestamp)
```

## Arguments
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-arguments"></a>

 *timestamptz*   
Colonne de type de données `TIMESTAMPTZ` ou expression implicitement évaluée à un type `TIMESTAMPTZ`.

 *timestamp*   
Colonne de type de données `TIMESTAMP` ou expression implicitement évaluée à un type `TIMESTAMP`.

## Type de retour
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-return-type"></a>

INTEGER

## Exemples
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-examples"></a>

L’exemple suivant compare les valeurs d’horodatage avec fuseau horaire et d’horodatage et affiche les résultats de la comparaison.

```
SELECT TIMESTAMPTZ_CMP_TIMESTAMP('2008-01-24 06:43:29+00', '2008-01-24 06:43:29'), TIMESTAMPTZ_CMP_TIMESTAMP('2008-01-24 06:43:29+00', '2008-02-18 02:36:48'), TIMESTAMPTZ_CMP_TIMESTAMP('2008-02-18 02:36:48+00', '2008-01-24 06:43:29');

timestamptz_cmp_timestamp  | timestamptz_cmp_timestamp | timestamptz_cmp_timestamp
---------------------------+---------------------------+---------------------------
              0            |            -1             |             1
```

# Fonction TIMEZONE
<a name="r_TIMEZONE"></a>

TIMEZONE renvoie un horodatage pour la valeur du fuseau horaire et de l’horodatage spécifiée.

Pour plus d’informations et d’exemples sur la façon de définir un fuseau horaire, consultez [timezone](r_timezone_config.md).

Pour plus d’informations et d’exemples sur la façon de convertir un fuseau horaire, consultez [CONVERT\$1TIMEZONE](CONVERT_TIMEZONE.md).

## Syntaxe
<a name="r_TIMEZONE-syntax"></a>

```
TIMEZONE('timezone', { timestamp | timestamptz })
```

## Arguments
<a name="r_TIMEZONE-arguments"></a>

*timezone*  
Le fuseau horaire de la valeur de retour. Le fuseau horaire peut être spécifié comme nom de fuseau horaire (tel que **'Africa/Kampala'** ou **'Singapore'**) ou comme abréviation de fuseau horaire (telle que **'UTC'** ou **'PDT'**). Pour afficher la liste des noms de fuseaux horaires pris en charge, exécutez la commande suivante.   

```
select pg_timezone_names();
```
 Pour afficher la liste des abréviations de fuseaux horaires prises en charge, exécutez la commande suivante.   

```
select pg_timezone_abbrevs();
```
Notez qu’Amazon Redshift utilise la [base de données de fuseaux horaires de l’IANA](https://www.iana.org/time-zones) comme source officielle de spécification des fuseaux horaires. Pour plus d’informations et d’exemples, consultez [Remarques sur l’utilisation de fuseaux horaires](CONVERT_TIMEZONE.md#CONVERT_TIMEZONE-usage-notes).

*timestamp* \$1 *timestamptz*  
Expression qui a pour résultat un type TIMESTAMP ou TIMESTAMPTZ, ou une valeur qui peut être implicitement convertie en horodatage ou horodatage avec fuseau horaire.

## Type de retour
<a name="r_TIMEZONE-return-type"></a>

TIMESTAMPTZ lorsqu’il est utilisé avec une expression TIMESTAMP. 

TIMESTAMP lorsqu’il est utilisé avec une expression TIMESTAMPTZ. 

## Exemples
<a name="r_TIMEZONE-examples"></a>

L’exemple suivant renvoie un horodatage pour le fuseau horaire UTC en utilisant l’horodatage `2008-06-17 09:44:54` du fuseau horaire PST.

```
SELECT TIMEZONE('PST', '2008-06-17 09:44:54');

timezone
-----------------------
2008-06-17 17:44:54+00
```

L’exemple suivant renvoie un horodatage pour le fuseau horaire PST en utilisant l’horodatage avec le fuseau horaire UTC `2008-06-17 09:44:54+00`.

```
SELECT TIMEZONE('PST', timestamptz('2008-06-17 09:44:54+00'));

timezone
-----------------------
2008-06-17 01:44:54
```

# Fonction TO\$1TIMESTAMP
<a name="r_TO_TIMESTAMP"></a>

TO\$1TIMESTAMP convertit une chaîne TIMESTAMP en TIMESTAMPTZ. Pour obtenir une liste des fonctions de date et d’heure supplémentaires pour Amazon Redshift, consultez [Fonctions de date et d’heure](Date_functions_header.md).

## Syntaxe
<a name="r_TO_TIMESTAMP-syntax"></a>

```
to_timestamp(timestamp, format)
```

```
to_timestamp (timestamp, format, is_strict)
```

## Arguments
<a name="r_TO_TIMESTAMP-arguments"></a>

*timestamp*  
Chaîne qui représente une valeur d’horodatage au format spécifié par *format*. Si cet argument est laissé vide, la valeur de l’horodatage est fixée par défaut à `0001-01-01 00:00:00`.

*format*  
Valeur de chaine littérale qui définit le format de la valeur *timestamp*. Formats qui incluent un fuseau horaire (**TZ**, **tz** ou **OF**) ne sont pas pris en charge comme entrée. Pour les formats d’horodatage valides, consultez [Chaînes de format datetime](r_FORMAT_strings.md).

*is\$1strict*  
Valeur booléenne facultative qui spécifie si une erreur est renvoyée lorsqu’une valeur timestamp en entrée est hors de portée. Quand *is\$1strict* est défini sur TRUE, une erreur est renvoyée s’il y a une valeur hors de portée. Quand *is\$1strict* est défini sur FALSE, qui est la valeur par défaut, les valeurs en dépassement sont acceptées.

## Type de retour
<a name="r_TO_TIMESTAMP-return-type"></a>

TIMESTAMPTZ

## Exemples
<a name="r_TO_TIMESTAMP-examples"></a>

L’exemple suivant montre l’utilisation de la fonction TO\$1TIMESTAMP pour convertir une chaîne TIMESTAMP en une chaîne TIMESTAMPTZ. 

```
select sysdate, to_timestamp(sysdate, 'YYYY-MM-DD HH24:MI:SS') as second;

timestamp                  | second
--------------------------   ----------------------
2021-04-05 19:27:53.281812 | 2021-04-05 19:27:53+00
```

Il est possible de transmettre la partie TO\$1TIMESTAMP d’une date. Les autres parties de la date sont définies sur des valeurs par défaut. L’heure est incluse dans la sortie :

```
SELECT TO_TIMESTAMP('2017','YYYY');

to_timestamp
--------------------------
2017-01-01 00:00:00+00
```

L’instruction SQL suivante convertit la chaîne « 2011-12-18 24:38:15 » en TIMESTAMPTZ. Le résultat est une valeur TIMESTAMPTZ qui tombe le jour suivant, car le nombre d’heures est supérieur à 24 heures :

```
SELECT TO_TIMESTAMP('2011-12-18 24:38:15', 'YYYY-MM-DD HH24:MI:SS');
         
to_timestamp
----------------------
2011-12-19 00:38:15+00
```

L’instruction SQL suivante convertit la chaîne « 2011-12-18 24:38:15 » en TIMESTAMPTZ. Le résultat est une erreur, car la valeur time dans l’horodatage est supérieure à 24 heures.

```
SELECT TO_TIMESTAMP('2011-12-18 24:38:15', 'YYYY-MM-DD HH24:MI:SS', TRUE);
         
ERROR:  date/time field time value out of range: 24:38:15.0
```

# Fonction TRUNC
<a name="r_TRUNC_date"></a>

Tronque une valeur `TIMESTAMP` et renvoie une valeur `DATE`.

 Cette fonction peut également tronquer un nombre. Pour plus d’informations, consultez [Fonction TRUNC](r_TRUNC.md).

## Syntaxe
<a name="r_TRUNC_date-synopsis"></a>

```
TRUNC(timestamp)
```

## Arguments
<a name="r_TRUNC_date-arguments"></a>

 *timestamp*   
Colonne de type de données `TIMESTAMP` ou expression implicitement évaluée à un type `TIMESTAMP`.  
Pour renvoyer une valeur d’horodatage avec `00:00:00` comme heure, convertissez le résultat de la fonction en `TIMESTAMP`.

## Type de retour
<a name="r_TRUNC_date-return-type"></a>

DATE

## Exemples
<a name="r_TRUNC_date-examples"></a>

L’exemple suivant renvoie la partie de date du résultat de la fonction SYSDATE (qui renvoie un horodatage). 

```
SELECT SYSDATE;

+----------------------------+
|         timestamp          |
+----------------------------+
| 2011-07-21 10:32:38.248109 |
+----------------------------+

SELECT TRUNC(SYSDATE);

+------------+
|   trunc    |
+------------+
| 2011-07-21 |
+------------+
```

L’exemple suivant applique la fonction TRUNC à une colonne `TIMESTAMP`. Le type de retour est une date. 

```
SELECT TRUNC(starttime) FROM event
ORDER BY eventid LIMIT 1;

+------------+
|   trunc    |
+------------+
| 2008-01-25 |
+------------+
```

L’exemple suivant renvoie une valeur d’horodatage avec `00:00:00` comme heure en convertissant le résultat de la fonction TRUNC en `TIMESTAMP`.

```
SELECT CAST((TRUNC(SYSDATE)) AS TIMESTAMP);

+---------------------+
|        trunc        |
+---------------------+
| 2011-07-21 00:00:00 |
+---------------------+
```

# Parties de date pour les fonctions de date ou d’horodatage
<a name="r_Dateparts_for_datetime_functions"></a>

Le tableau suivant identifie les noms de partie de date et d’horodatage et les abréviations qui sont acceptées comme arguments pour les fonctions suivantes : 
+ DATEADD 
+ DATEDIFF 
+ DATE\$1PART 
+ EXTRACT 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_Dateparts_for_datetime_functions.html)

## Variations de résultats avec les secondes, les millisecondes et les microsecondes
<a name="r_Dateparts_for_datetime_functions-variations-in-results"></a>

Des différences mineures dans les résultats de la requête se produisent lorsque d’autres fonctions de date spécifient les secondes, les millisecondes ou les microsecondes comme des parties de date : 
+ La fonction EXTRACT renvoie des nombres entiers pour la partie de date spécifiée uniquement, sans tenir compte des parties de date de niveau supérieur et inférieur. Si la partie de date spécifiée est les secondes, les millisecondes et les microsecondes ne figurent pas dans le résultat. Si la partie de date spécifiée est les millisecondes, les secondes et les microsecondes ne sont pas incluses. Si la partie de date spécifiée est les microsecondes, les secondes et les millisecondes ne sont pas incluses. 
+ La fonction DATE\$1PART renvoie la seconde partie complète de l’horodatage, quelle que soit la partie de date spécifiée, en renvoyant une valeur décimale ou un nombre entier comme requis. 

Par exemple, comparez les résultats des requêtes suivantes : 

```
create table seconds(micro timestamp);

insert into seconds values('2009-09-21 11:10:03.189717');

select extract(sec from micro) from seconds;
               
date_part
-----------
3
               
select date_part(sec, micro) from seconds;
   
pgdate_part
-------------
3.189717
```

## Remarques sur CENTURY, EPOCH, DECADE et MIL
<a name="r_Dateparts_for_datetime_functions-century"></a>

CENTURY ou CENTURIES   
Amazon Redshift interprète un CENTURY comme démarrant avec l’année *\$1\$1\$11* et se terminant par l’année `###0` :   

```
select extract (century from timestamp '2000-12-16 12:21:13');
date_part
-----------
20

select extract (century from timestamp '2001-12-16 12:21:13');
date_part
-----------
21
```

EPOCH   
L’implémentation d’Amazon Redshift d’EPOCH est associée à 1970-01-01 00:00:00.000000 quel que soit le fuseau horaire sur lequel réside le cluster. Vous devrez peut-être décaler les résultats de la différence en heures selon le fuseau horaire sur lequel se trouve le cluster.   
 L’exemple suivant illustre les éléments suivants :   

1.  Crée une table appelée EVENT\$1EXAMPLE en fonction de la table EVENT. Cette commande CREATE AS utilise la fonction DATE\$1PART pour créer une colonne de date (appelée PGDATE\$1PART par défaut) pour stocker la valeur epoch de chaque événement. 

1.  Sélectionne le type de colonne et de données d’EVENT\$1EXAMPLE de PG\$1TABLE\$1DEF. 

1.  Sélectionne EVENTNAME, STARTTIME et PGDATE\$1PART de la table EVENT\$1EXAMPLE pour afficher les différents formats de date et d’heure. 

1.  Sélectionne EVENTNAME et STARTTIME à partir de EVENT EXAMPLE tel quel. Convertit les valeurs d’époque dans PGDATE\$1PART à l’aide d’un intervalle de 1 seconde dans un horodatage sans fuseau horaire et renvoie les résultats dans une colonne appelée CONVERTED\$1TIMESTAMP. 

```
create table event_example
as select eventname, starttime, date_part(epoch, starttime) from event;

select "column", type from pg_table_def where tablename='event_example';

     column    |            type
---------------+-----------------------------
 eventname     | character varying(200)
 starttime     | timestamp without time zone
 pgdate_part   | double precision
(3 rows)
```

```
select eventname, starttime, pgdate_part from event_example;

   eventname          |      starttime      | pgdate_part
----------------------+---------------------+-------------
 Mamma Mia!           | 2008-01-01 20:00:00 |  1199217600
 Spring Awakening     | 2008-01-01 15:00:00 |  1199199600
 Nas                  | 2008-01-01 14:30:00 |  1199197800
 Hannah Montana       | 2008-01-01 19:30:00 |  1199215800
 K.D. Lang            | 2008-01-01 15:00:00 |  1199199600
 Spamalot             | 2008-01-02 20:00:00 |  1199304000
 Macbeth              | 2008-01-02 15:00:00 |  1199286000
 The Cherry Orchard   | 2008-01-02 14:30:00 |  1199284200
 Macbeth              | 2008-01-02 19:30:00 |  1199302200
 Demi Lovato          | 2008-01-02 19:30:00 |  1199302200

   
select eventname, 
starttime, 
timestamp with time zone 'epoch' + pgdate_part * interval '1 second' AS converted_timestamp 
from event_example;

       eventname      |      starttime      | converted_timestamp
----------------------+---------------------+---------------------
 Mamma Mia!           | 2008-01-01 20:00:00 | 2008-01-01 20:00:00
 Spring Awakening     | 2008-01-01 15:00:00 | 2008-01-01 15:00:00
 Nas                  | 2008-01-01 14:30:00 | 2008-01-01 14:30:00
 Hannah Montana       | 2008-01-01 19:30:00 | 2008-01-01 19:30:00
 K.D. Lang            | 2008-01-01 15:00:00 | 2008-01-01 15:00:00
 Spamalot             | 2008-01-02 20:00:00 | 2008-01-02 20:00:00
 Macbeth              | 2008-01-02 15:00:00 | 2008-01-02 15:00:00
 The Cherry Orchard   | 2008-01-02 14:30:00 | 2008-01-02 14:30:00
 Macbeth              | 2008-01-02 19:30:00 | 2008-01-02 19:30:00
 Demi Lovato          | 2008-01-02 19:30:00 | 2008-01-02 19:30:00
 ...
```

DECADE ou DECADES   
Amazon Redshift interprète DECADE ou DECADES DATEPART en fonction du calendrier courant. Par exemple, si le calendrier commun commence à partir de l’année 1, la première décennie (décennie 1) est 0001-01-01 jusqu’au 0009-12-31, et la deuxième décennie (décennie 2) du 0010-01-01 au 0019-12-31. Par exemple, la décennie 201 s’étend du 2000-01-01 au 2009-12-31 :   

```
select extract(decade from timestamp '1999-02-16 20:38:40');
date_part
-----------
200

select extract(decade from timestamp '2000-02-16 20:38:40');
date_part
-----------
201

select extract(decade from timestamp '2010-02-16 20:38:40');
date_part
-----------
202
```

MIL ou MILS   
Amazon Redshift interprète un MIL comme démarrant avec le premier jour de l’année *\$1001* et se terminant par le dernier jour de l’année `#000` :   

```
select extract (mil from timestamp '2000-12-16 12:21:13');
date_part
-----------
2

select extract (mil from timestamp '2001-12-16 12:21:13');
date_part
-----------
3
```

# Fonctions de hachage
<a name="hash-functions"></a>

**Topics**
+ [Fonction CHECKSUM](r_CHECKSUM.md)
+ [Fonction farmFingerprint64](r_FARMFINGERPRINT64.md)
+ [Fonction FUNC\$1 SHA1](FUNC_SHA1.md)
+ [Fonction FNV\$1HASH](r_FNV_HASH.md)
+ [MD5 fonction](r_MD5.md)
+ [Fonction SHA](SHA.md)
+ [SHA1 fonction](SHA1.md)
+ [SHA2 fonction](SHA2.md)
+ [MURMUR3\$132 HASH](MURMUR3_32_HASH.md)

Une fonction de hachage est une fonction mathématique qui convertit une valeur d’entrée numérique en une autre valeur.

# Fonction CHECKSUM
<a name="r_CHECKSUM"></a>

Calcule une valeur checksum pour créer un index de hachage. 

## Syntaxe
<a name="r_CHECKSUM-synopsis"></a>

```
CHECKSUM(expression)
```

## Argument
<a name="r_CHECKSUM-argument"></a>

 *expression*   
L’expression d’entrée doit être un type de données VARCHAR, INTEGER ou DECIMAL. 

## Type de retour
<a name="r_CHECKSUM-return-type"></a>

La fonction CHECKSUM renvoie un nombre entier. 

## Exemple
<a name="r_CHECKSUM-example"></a>

L’exemple suivant calcule une valeur checksum de la colonne COMMISSION : 

```
select checksum(commission)
from sales
order by salesid
limit 10;

checksum
----------
10920
1140
5250
2625
2310
5910
11820
2955
8865
975
(10 rows)
```

# Fonction farmFingerprint64
<a name="r_FARMFINGERPRINT64"></a>

Calcule la valeur farmhash de l’argument en entrée à l’aide de la fonction `Fingerprint64`. 

## Syntaxe
<a name="r_FARMFINGERPRINT64-synopsis"></a>

```
farmFingerprint64(expression)
```

## Argument
<a name="r_FARMFINGERPRINT64-argument"></a>

 *expression*   
L’expression en entrée doit être un type de données `VARCHAR` ou `VARBYTE`. 

## Type de retour
<a name="r_FARMFINGERPRINT64-return-type"></a>

La fonction `farmFingerprint64` renvoie un `BIGINT`. 

## Exemple
<a name="r_FARMFINGERPRINT64-example"></a>

L’exemple suivant renvoie la valeur `farmFingerprint64` de `Amazon Redshift` qui est entré en tant que type de données `VARCHAR`. 

```
SELECT farmFingerprint64('Amazon Redshift');
```

```
  
  farmfingerprint64
---------------------
 8085098817162212970
```

L’exemple suivant renvoie la valeur `farmFingerprint64` de `Amazon Redshift` qui est entré en tant que type de données `VARBYTE`. 

```
SELECT farmFingerprint64('Amazon Redshift'::varbyte);
```

```
  
  farmfingerprint64
---------------------
 8085098817162212970
```

# Fonction FUNC\$1 SHA1
<a name="FUNC_SHA1"></a>

Synonyme de SHA1 fonction. 

Consultez [SHA1 fonction](SHA1.md). 

# Fonction FNV\$1HASH
<a name="r_FNV_HASH"></a>

Calcule la fonction de hachage non cryptographique FNV-1a 64 bits pour tous les types de données de base.

## Syntaxe
<a name="r_FNV_HASH-synopsis"></a>

```
FNV_HASH(value [, seed])
```

## Arguments
<a name="r_FNV_HASH-argument-arguments"></a>

 *valeur*  
Valeur d’entrée à hacher. Amazon Redshift utilise la représentation binaire de la valeur pour hacher la valeur d’entrée ; par exemple, les valeurs INTEGER sont hachées en utilisant 4 octets et les valeurs BIGINT sont hachées en utilisant 8 octets. En outre, le hachage des entrées CHAR et VARCHAR n’ignore pas les espaces de fin.

 *Seed (Noyau)*  
La graine BIGINT de la fonction de hachage est facultative. Si ce n’est pas indiqué, Amazon Redshift utilise le noyau FNV par défaut. Cela permet de combiner le hachage de plusieurs colonnes sans conversions ni concaténations.

## Type de retour
<a name="r_FNV_HASH-return-type"></a>

BIGINT

## Exemple
<a name="r_FNV_HASH-example"></a>

Les exemples suivants renvoient le hachage FNV d’un nombre, la chaîne Amazon Redshift et la concaténation des deux.

```
select fnv_hash(1);
        fnv_hash
----------------------
 -5968735742475085980
(1 row)
```

```
select fnv_hash('Amazon Redshift');
      fnv_hash
---------------------
 7783490368944507294
(1 row)
```

```
select fnv_hash('Amazon Redshift', fnv_hash(1));
       fnv_hash
----------------------
 -2202602717770968555
(1 row)
```

## Notes d’utilisation
<a name="r_FNV_HASH-usage-notes"></a>
+ Pour calculer le hachage d’une table avec plusieurs colonnes, vous pouvez calculer le hachage FNV de la première colonne et le transmettre en tant que noyau au hachage de la deuxième colonne. Ensuite, il passe le hachage FNV de la deuxième colonne en tant que noyau au hachage de la troisième colonne.

  L’exemple suivant crée des noyaux pour hacher une table comportant plusieurs colonnes. 

  ```
  select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  ```
+ La même propriété peut être utilisée pour calculer le hachage d’une concaténation de chaînes. 

  ```
  select fnv_hash('abcd');
         fnv_hash
  ---------------------
   -281581062704388899
  (1 row)
  ```

  ```
  select fnv_hash('cd', fnv_hash('ab'));
        fnv_hash
  ---------------------
   -281581062704388899
  (1 row)
  ```
+ La fonction de hachage utilise le type de l’entrée pour déterminer le nombre d’octets à hacher. Utilisez la conversion de types pour appliquer un type spécifique, si nécessaire.

  Les exemples suivants utilisent différents types d’entrée pour produire des résultats différents.

  ```
  select fnv_hash(1::smallint);
        fnv_hash
  --------------------
   589727492704079044
  (1 row)
  ```

  ```
  select fnv_hash(1);
         fnv_hash
  ----------------------
   -5968735742475085980
  (1 row)
  ```

  ```
  select fnv_hash(1::bigint);
         fnv_hash
  ----------------------
   -8517097267634966620
  (1 row)
  ```

# MD5 fonction
<a name="r_MD5"></a>

Utilise la fonction de hachage MD5 cryptographique pour convertir une chaîne de longueur variable en une chaîne de 32 caractères qui est une représentation textuelle de la valeur hexadécimale d'une somme de contrôle de 128 bits. 

## Syntaxe
<a name="r_MD5-syntax"></a>

```
MD5(string)
```

## Arguments
<a name="r_MD5-arguments"></a>

 *string*   
Chaîne de longueur variable.

## Type de retour
<a name="r_MD5-return-type"></a>

La MD5 fonction renvoie une chaîne de 32 caractères qui est une représentation textuelle de la valeur hexadécimale d'une somme de contrôle de 128 bits.

## Exemples
<a name="r_MD5-examples"></a>

L’exemple suivant illustre la valeur de 128 bits de la chaîne « Amazon Redshift » : 

```
select md5('Amazon Redshift');
md5
----------------------------------
f7415e33f972c03abd4f3fed36748f7a
(1 row)
```

# Fonction SHA
<a name="SHA"></a>

Synonyme de SHA1 fonction. 

Consultez [SHA1 fonction](SHA1.md). 

# SHA1 fonction
<a name="SHA1"></a>

La SHA1 fonction utilise la fonction de hachage SHA1 cryptographique pour convertir une chaîne de longueur variable en une chaîne de 40 caractères qui est une représentation textuelle de la valeur hexadécimale d'une somme de contrôle de 160 bits.

## Syntaxe
<a name="SHA1-syntax"></a>

SHA1 est un synonyme de [Fonction SHA](SHA.md) et. [Fonction FUNC\$1 SHA1](FUNC_SHA1.md) 

```
SHA1(string)
```

## Arguments
<a name="SHA1-arguments"></a>

 *string*   
Chaîne de longueur variable.

## Type de retour
<a name="SHA1-returm-type"></a>

La SHA1 fonction renvoie une chaîne de 40 caractères qui est une représentation textuelle de la valeur hexadécimale d'une somme de contrôle de 160 bits. 

## Exemple
<a name="SHA1-example"></a>

L’exemple suivant renvoie la valeur de 160 bits du mot « Amazon Redshift » : 

```
select sha1('Amazon Redshift');
```

# SHA2 fonction
<a name="SHA2"></a>

La SHA2 fonction utilise la fonction de hachage SHA2 cryptographique pour convertir une chaîne de longueur variable en chaîne de caractères. La chaîne de caractères est une représentation textuelle de la valeur hexadécimale du total de contrôle avec le nombre de bits spécifié.

## Syntaxe
<a name="SHA2-syntax"></a>

```
SHA2(string, bits)
```

## Arguments
<a name="SHA2-arguments"></a>

 *string*   
Chaîne de longueur variable.

 *integer*   
Nombre de bits dans les fonctions de hachage. Les valeurs valides sont 0 (identique à 256), 224, 256, 384 et 512.

## Type de retour
<a name="SHA2-returm-type"></a>

La SHA2 fonction renvoie une chaîne de caractères qui est une représentation textuelle de la valeur hexadécimale de la somme de contrôle ou une chaîne vide si le nombre de bits n'est pas valide. 

## Exemple
<a name="SHA2-example"></a>

L’exemple suivant renvoie la valeur de 256 bits du mot « Amazon Redshift » : 

```
select sha2('Amazon Redshift', 256);
```

# MURMUR3\$132 HASH
<a name="MURMUR3_32_HASH"></a>

La fonction MURMUR3 \$132\$1HASH calcule le hachage non cryptographique Murmur3A 32 bits pour tous les types de données courants, y compris les types numériques et de chaîne.

## Syntaxe
<a name="MURMUR3_32_HASH-syntax"></a>

```
MURMUR3_32_HASH(value [, seed])
```

## Arguments
<a name="MURMUR3_32_HASH-arguments"></a>

 *valeur*   
Valeur d’entrée à hacher. Amazon Redshift hache la représentation binaire de la valeur d’entrée. Ce comportement est similaire à [Fonction FNV\$1HASH](r_FNV_HASH.md), mais la valeur est convertie en la représentation binaire spécifiée par la [spécification de hachage Murmur3 de 32 bits d’Apache Iceberg](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements).

 *Seed (Noyau)*   
Le noyau INT de la fonction de hachage. Cet argument est facultatif. Si ce n’est pas indiqué, Amazon Redshift utilise le noyau 0 par défaut. Cela permet de combiner le hachage de plusieurs colonnes sans conversions ni concaténations.

## Type de retour
<a name="MURMUR3_32_HASH-return-type"></a>

La fonction renvoie un INT.

## Exemple
<a name="MURMUR3_32_HASH-example"></a>

Les exemples suivants renvoient le hachage Murmur3 d’un nombre, la chaîne Amazon Redshift et la concaténation des deux.

```
select MURMUR3_32_HASH(1);
    
    MURMUR3_32_HASH
----------------------
 1392991556
(1 row)
```

```
select MURMUR3_32_HASH('Amazon Redshift');
    
    MURMUR3_32_HASH
----------------------
 -1563580564
(1 row)
```

```
select MURMUR3_32_HASH('Amazon Redshift', MURMUR3_32_HASH(1));
    
    MURMUR3_32_HASH
----------------------
 -1346554171
(1 row)
```

## Notes d’utilisation
<a name="MURMUR3_32_HASH-usage-notes"></a>

Pour calculer le hachage d’une table avec plusieurs colonnes, vous pouvez calculer le hachage Murmur3 de la première colonne et le transmettre en tant que noyau au hachage de la deuxième colonne. Ensuite, il passe le hachage Murmur3 de la deuxième colonne en tant que noyau au hachage de la troisième colonne.

L’exemple suivant crée des noyaux pour hacher une table comportant plusieurs colonnes.

```
select MURMUR3_32_HASH(column_3, MURMUR3_32_HASH(column_2, MURMUR3_32_HASH(column_1))) from sample_table;
```

La même propriété peut être utilisée pour calculer le hachage d’une concaténation de chaînes.

```
select MURMUR3_32_HASH('abcd');
   
   MURMUR3_32_HASH
---------------------
 1139631978
(1 row)
```

```
select MURMUR3_32_HASH('cd', MURMUR3_32_HASH('ab'));
   
   MURMUR3_32_HASH
---------------------
 1711522338
(1 row)
```

La fonction de hachage utilise le type de l’entrée pour déterminer le nombre d’octets à hacher. Utilisez la conversion de types pour appliquer un type spécifique, si nécessaire.

Les exemples suivants utilisent différents types d’entrée pour produire des résultats différents.

```
select MURMUR3_32_HASH(1, MURMUR3_32_HASH(1));
   
   MURMUR3_32_HASH
--------------------
 -1193428387
(1 row)
```

```
select MURMUR3_32_HASH(1);
   
   MURMUR3_32_HASH
----------------------
 1392991556
(1 row)
```

```
select MURMUR3_32_HASH(1, MURMUR3_32_HASH(2));
   
   MURMUR3_32_HASH
----------------------
 1179621905
(1 row)
```

# HyperLogLog fonctions
<a name="hyperloglog-functions"></a>

Vous trouverez ci-dessous les descriptions des HyperLogLog fonctions SQL prises en charge par Amazon Redshift.

**Topics**
+ [Fonction HLL](r_HLL_function.md)
+ [Fonction HLL\$1CREATE\$1SKETCH](r_HLL_CREATE_SKETCH.md)
+ [Fonction HLL\$1CARDINALITY](r_HLL_CARDINALITY.md)
+ [Fonction HLL\$1COMBINE](r_HLL_COMBINE.md)
+ [Fonction HLL\$1COMBINE\$1SKETCHES](r_HLL_COMBINE_SKETCHES.md)

# Fonction HLL
<a name="r_HLL_function"></a>

La fonction HLL renvoie la HyperLogLog cardinalité des valeurs d'expression d'entrée. La fonction HLL fonctionne avec tous les types de données sauf le type de données HLLSKETCH. La fonction HLL ignore les valeurs NULL. Lorsqu’il n’y a pas de lignes dans une table ou que toutes les lignes sont NULL, la cardinalité résultante est 0.

## Syntaxe
<a name="r_HLL_function-synopsis"></a>

```
HLL (aggregate_expression)
```

## Argument
<a name="r_HLL_function-argument"></a>

 *aggregate\$1expression*   
Toute expression valide qui fournit la valeur à un agrégat, telle qu’un nom de colonne. Cette fonction prend en charge n’importe quel type de données d’entrée, sauf HLLSKETCH, GEOMETRY, GEOGRAPHY et VARBYTE.

## Type de retour
<a name="r_HLL_function-return-type"></a>

La fonction HLL renvoie un BIGINT ou INT8 une valeur.

## Exemples
<a name="r_HLL_function-examples"></a>

L’exemple suivant renvoie la cardinalité de la colonne `an_int` de la table `a_table`.

```
CREATE TABLE a_table(an_int INT);
INSERT INTO a_table VALUES (1), (2), (3), (4);

SELECT hll(an_int) AS cardinality FROM a_table;
cardinality
-------------
4
```

# Fonction HLL\$1CREATE\$1SKETCH
<a name="r_HLL_CREATE_SKETCH"></a>

La fonction HLL\$1CREATE\$1SKETCH renvoie un type de données HLLSKETCH qui encapsule les valeurs d’expression en entrée. La fonction HLL\$1CREATE\$1SKETCH fonctionne avec n’importe quel type de données et ignore les valeurs NULL. Lorsqu’il n’y a pas de lignes dans une table ou que toutes les lignes sont NULL, le schéma résultant n’a pas de paires index-valeur telles que `{"version":1,"logm":15,"sparse":{"indices":[],"values":[]}}`.

## Syntaxe
<a name="r_HLL_CREATE_SKETCH-synopsis"></a>

```
HLL_CREATE_SKETCH (aggregate_expression)
```

## Argument
<a name="r_HLL_CREATE_SKETCH-argument"></a>

 *aggregate\$1expression*   
Toute expression valide qui fournit la valeur à un agrégat, telle qu’un nom de colonne. Les valeurs NULL sont ignorées. Cette fonction prend en charge n’importe quel type de données d’entrée, sauf HLLSKETCH, GEOMETRY, GEOGRAPHY et VARBYTE.

## Type de retour
<a name="r_HLL_CREATE_SKETCH-return-type"></a>

La fonction HLL\$1CREATE\$1SKETCH renvoie une valeur HLLSKETCH.

## Exemples
<a name="r_HLL_CREATE_SKETCH-examples"></a>

L’exemple suivant renvoie le type HLLSKETCH pour la colonne `an_int` de la table `a_table`. Un objet JSON est utilisé pour représenter une HyperLogLog esquisse éparse lors de l'importation, de l'exportation ou de l'impression d'esquisses. Une représentation sous forme de chaîne (au format Base64) est utilisée pour représenter une HyperLogLog esquisse dense.

```
CREATE TABLE a_table(an_int INT);
INSERT INTO a_table VALUES (1), (2), (3), (4);

SELECT hll_create_sketch(an_int) AS sketch FROM a_table;
sketch
-------------------------------------------------------------------------------------------------------
{"version":1,"logm":15,"sparse":{"indices":[20812342,20850007,22362299,47158030],"values":[1,2,1,1]}}
(1 row)
```

# Fonction HLL\$1CARDINALITY
<a name="r_HLL_CARDINALITY"></a>

La fonction HLL\$1CARDINALITY renvoie la cardinalité du type de données HLLSKETCH en entrée.

## Syntaxe
<a name="r_HLL_CARDINALITY-synopsis"></a>

```
HLL_CARDINALITY (hllsketch_expression)
```

## Argument
<a name="r_HLL_CARDINALITY-argument"></a>

 *hllsketch\$1expression*   
Expression valide qui correspond à un type HLLSKETCH, par exemple un nom de colonne. La valeur en entrée est le type de données HLLSKETCH.

## Type de retour
<a name="r_HLL_CARDINALITY-return-type"></a>

La fonction HLL\$1CARDINALITY renvoie un BIGINT ou une valeur. INT8 

## Exemples
<a name="r_HLL_CARDINALITY-examples"></a>

L’exemple suivant renvoie la cardinalité de la colonne `sketch` de la table `hll_table`.

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

SELECT hll_cardinality(sketch) AS cardinality FROM hll_table;
cardinality
-------------
6
4
(2 rows)
```

# Fonction HLL\$1COMBINE
<a name="r_HLL_COMBINE"></a>

La fonction d’agrégation HLL\$1COMBINE renvoie un type de données HLLSKETCH qui combine toutes les valeurs HLLSKETCH en entrée. 

La combinaison de deux HyperLogLog esquisses ou plus constitue un nouveau HLLSKETCH qui encapsule les informations relatives à l'union des valeurs distinctes représentées par chaque esquisse en entrée. Après avoir combiné les schémas, Amazon Redshift extrait la cardinalité de l’union de deux ou plusieurs jeux de données. Pour plus d’informations sur la façon de combiner plusieurs schémas, consultez [Exemple : renvoyer une HyperLogLog esquisse en combinant plusieurs esquisses](r_HLL-examples.md#hll-examples-multiple-sketches).

## Syntaxe
<a name="r_HLL_COMBINE-synopsis"></a>

```
HLL_COMBINE (hllsketch_expression)
```

## Argument
<a name="r_HLL_COMBINE-argument"></a>

 *hllsketch\$1expression*   
Expression valide qui correspond à un type HLLSKETCH, par exemple un nom de colonne. La valeur en entrée est le type de données HLLSKETCH.

## Type de retour
<a name="r_HLL_COMBINE-return-type"></a>

La fonction HLL\$1COMBINE renvoie un type HLLSKETCH.

## Exemples
<a name="r_HLL_COMBINE-examples"></a>

L’exemple suivant renvoie les valeurs HLLSLETCH combinées dans la table `hll_table`.

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

SELECT hll_combine(sketch) AS sketches FROM hll_table;
sketches
----------------------------------------------------------------------------------------------------------------------------
{"version":1,"logm":15,"sparse":{"indices":[20812342,20850007,22362299,40314817,42650774,47158030],"values":[1,2,1,3,2,1]}}
(1 row)
```

# Fonction HLL\$1COMBINE\$1SKETCHES
<a name="r_HLL_COMBINE_SKETCHES"></a>

HLL\$1COMBINE\$1SKETCHES est une fonction scalaire qui prend comme entrée deux valeurs HLLSKETCH et les combine en une seule HLLSKETCH.

La combinaison de deux HyperLogLog esquisses ou plus constitue un nouveau HLLSKETCH qui encapsule les informations relatives à l'union des valeurs distinctes représentées par chaque esquisse en entrée.

## Syntaxe
<a name="r_HLL_COMBINE_SKETCHES-synopsis"></a>

```
HLL_COMBINE_SKETCHES (hllsketch_expression1, hllsketch_expression2)
```

## Argument
<a name="r_HLL_COMBINE_SKETCHES-argument"></a>

 *hllsketch\$1expression1* et *hllsketch\$1expression2*   
Expression valide qui correspond à un type HLLSKETCH, par exemple un nom de colonne.

## Type de retour
<a name="r_HLL_COMBINE_SKETCHES-return-type"></a>

La fonction HLL\$1COMBINE\$1SKETCHES renvoie un type HLLSKETCH.

## Exemples
<a name="r_HLL_COMBINE_SKETCHES-examples"></a>

L’exemple suivant renvoie les valeurs HLLSLETCH combinées dans la table `hll_table`.

```
WITH tbl1(x, y)
     AS (SELECT Hll_create_sketch(1),
                Hll_create_sketch(2)
         UNION ALL
         SELECT Hll_create_sketch(3),
                Hll_create_sketch(4)
         UNION ALL
         SELECT Hll_create_sketch(5),
                Hll_create_sketch(6)
         UNION ALL
         SELECT Hll_create_sketch(7),
                Hll_create_sketch(8)),
     tbl2(x, y)
     AS (SELECT Hll_create_sketch(9),
                Hll_create_sketch(10)
         UNION ALL
         SELECT Hll_create_sketch(11),
                Hll_create_sketch(12)
         UNION ALL
         SELECT Hll_create_sketch(13),
                Hll_create_sketch(14)
         UNION ALL
         SELECT Hll_create_sketch(15),
                Hll_create_sketch(16)
         UNION ALL
         SELECT Hll_create_sketch(NULL),
                Hll_create_sketch(NULL)),
     tbl3(x, y)
     AS (SELECT *
         FROM   tbl1
         UNION ALL
         SELECT *
         FROM   tbl2)
SELECT Hll_combine_sketches(x, y)
FROM   tbl3;
```

# Fonctions JSON
<a name="json-functions"></a>

**Topics**
+ [Fonction JSON\$1PARSE](JSON_PARSE.md)
+ [Fonction CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md)
+ [Fonction JSON\$1SERIALIZE](JSON_SERIALIZE.md)
+ [Fonction JSON\$1SERIALIZE\$1TO\$1VARBYTE](JSON_SERIALIZE_TO_VARBYTE.md)
+ [Fonctions JSON basées sur du texte](text-json-functions.md)

**Note**  
Nous vous recommandons d’utiliser les fonctions suivantes pour travailler avec JSON :  
 [Fonction JSON\$1PARSE](JSON_PARSE.md) 
 [Fonction CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md) 
 [Fonction JSON\$1SERIALIZE](JSON_SERIALIZE.md) 
 [Fonction JSON\$1SERIALIZE\$1TO\$1VARBYTE](JSON_SERIALIZE_TO_VARBYTE.md) 
Avec JSON\$1PARSE, il suffit de convertir le texte JSON en valeur de type SUPER une seule fois lors de l’ingestion, après quoi vous pouvez opérer sur les valeurs SUPER. Amazon Redshift analyse les valeurs SUPER plus efficacement que VARCHAR, qui est la sortie des fonctions JSON basées sur du texte. Pour plus d’informations sur l’utilisation du type de données SUPER, consultez [Données semi-structurées dans Amazon Redshift](super-overview.md). 

Lorsque vous avez besoin de stocker un ensemble relativement petit de paires clé-valeur, vous pouvez économiser de l’espace en stockant les données au format JSON. Étant donné que les chaînes au format JSON peuvent être stockées dans une seule colonne, l’utilisation de JSON peut être plus efficace que de stocker vos données sous forme de table. Par exemple, supposons que vous ayez une table partiellement remplie, dans laquelle vous avez besoin de nombreuses colonnes pour représenter entièrement tous les attributs possibles, mais que la plupart des valeurs de colonnes ont une valeur NULL pour n’importe quelle ligne ou colonne donnée. En utilisant JSON pour le stockage, vous pourriez stocker les données pour une ligne des paires clé:valeur dans une seule chaîne JSON et éliminer les colonnes de la table partiellement renseignées. 

En outre, vous pouvez facilement modifier les chaînes au format JSON pour stocker des paires clé:valeur supplémentaires lorsque votre schéma JSON change, sans avoir besoin d’ajouter des colonnes à une table. 

Nous vous conseillons d’utiliser JSON avec modération. JSON n’est pas le bon choix pour stocker des ensembles de données plus volumineux parce que, en stockant des données disparates dans une seule colonne, JSON n’exploite pas l’architecture de stockage de colonnes d’Amazon Redshift. Bien qu’Amazon Redshift prenne en charge les fonctions JSON sur les colonnes CHAR et VARCHAR, nous vous recommandons d’utiliser SUPER pour le traitement des données au format de sérialisation JSON. SUPER utilise une représentation sans schéma post-analyse qui peut interroger efficacement les données hiérarchiques. Pour plus d’informations sur le type de données SUPER, consultez [Données semi-structurées dans Amazon Redshift](super-overview.md).

JSON utilise des chaînes de texte codées UTF-8, les chaînes JSON peuvent donc être stockées sous forme de types de données CHAR ou VARCHAR. 

Les chaînes JSON doivent être au bon format JSON, selon les règles suivantes : 
+ Le JSON de niveau racine peut être un objet JSON ou un tableau JSON. Un objet JSON est un ensemble non trié de paires clé:valeur séparées par des virgules délimitées par des accolades. 

  Par exemple, `{"one":1, "two":2} `
+ Un tableau JSON est un ensemble ordonné de valeurs séparées par des virgules délimitées par des crochets. 

  Voici un exemple : `["first", {"one":1}, "second", 3, null] `.
+ Les tableaux JSON utilisent un index de base zéro ; le premier élément d’un tableau se trouve à la position 0. Dans une paire clé:valeur JSON, la clé est une chaîne entre guillemets doubles. 
+ Une valeur JSON peut être l’une des suivantes : 
  + Objet JSON 
  + array 
  + chaîne
    + Représenté entre guillemets doubles
  + number
    + Inclut les nombres entiers, les décimaux et les nombres flottants
  + un booléen
  + null 
+ Les objets vides et les tableaux vides sont des valeurs JSON valides.
+ Les champs JSON sont sensibles à la casse. 
+ Les espace vides entre les éléments structurels JSON (tel que `{ }, [ ]`) sont ignorés. 

Les fonctions JSON Amazon Redshift et la commande COPY Amazon Redshift utilisent les mêmes méthodes pour utiliser des données au format JSON. Pour plus d’informations sur l’utilisation de JSON, consultez [Exécution de la commande COPY à partir du format JSON](copy-usage_notes-copy-from-json.md).

# Fonction JSON\$1PARSE
<a name="JSON_PARSE"></a>

La fonction JSON\$1PARSE analyse les données au format JSON et les convertit en représentation `SUPER`. 

Pour ingérer dans le type de données `SUPER` à l’aide de la commande INSERT ou UPDATE, utilisez la fonction JSON\$1PARSE. Lorsque vous utilisez JSON\$1PARSE() pour analyser des chaînes JSON en valeurs `SUPER`, certaines restrictions s’appliquent. Pour plus d’informations, consultez [Options d’analyse pour Super](super-configurations.md#parsing-options-super).

## Syntaxe
<a name="JSON_PARSE-synopsis"></a>

```
JSON_PARSE( {json_string | binary_value} )
```

## Arguments
<a name="JSON_PARSE-arguments"></a>

 *json\$1string*  
Expression qui renvoie la chaîne JSON sérialisée sous forme de type `VARBYTE` ou `VARCHAR`. 

 *binary\$1value*  
Valeur binaire du type VARBYTE.

## Type de retour
<a name="JSON_PARSE-return"></a>

`SUPER`

## Exemples
<a name="JSON_PARSE-examples"></a>

Pour convertir le tableau JSON `[10001,10002,"abc"]` dans le type de données `SUPER`, utilisez l’exemple suivant.

```
SELECT JSON_PARSE('[10001,10002,"abc"]');

+---------------------+
|     json_parse      |
+---------------------+
| [10001,10002,"abc"] |
+---------------------+
```

Pour vous assurer que la fonction a converti le tableau JSON dans le type de données `SUPER`, utilisez l’exemple suivant. Pour de plus amples informations, consultez [Fonction JSON\$1TYPEOF](r_json_typeof.md).

```
SELECT JSON_TYPEOF(JSON_PARSE('[10001,10002,"abc"]'));

+-------------+
| json_typeof |
+-------------+
| array       |
+-------------+
```

# Fonction CAN\$1JSON\$1PARSE
<a name="CAN_JSON_PARSE"></a>

La fonction CAN\$1JSON\$1PARSE analyse les données au format JSON et renvoie `true` si le résultat peut être converti en valeur `SUPER` à l’aide de la fonction JSON\$1PARSE.

## Syntaxe
<a name="CAN_JSON_PARSE-synopsis"></a>

```
CAN_JSON_PARSE( {json_string | binary_value} )
```

## Arguments
<a name="CAN_JSON_PARSE-arguments"></a>

 *json\$1string*  
Expression qui renvoie la chaîne JSON sérialisée sous la forme `VARCHAR`. 

 *binary\$1value*  
Valeur binaire du type VARBYTE.

## Type de retour
<a name="CAN_JSON_PARSE-return"></a>

`BOOLEAN`

## Notes d’utilisation
<a name="CAN_JSON_PARSE-usage-notes"></a>
+ CAN\$1JSON\$1PARSE renvoie la valeur false pour les chaînes vides. Il renvoie NULL lorsque l’argument d’entrée est null. 

## Exemples
<a name="CAN_JSON_PARSE-examples"></a>

 L’exemple suivant montre CAN\$1JSON\$1PARSE s’exécutant sur un tableau JSON correctement formé à l’aide d’une condition CASE. Il renvoie true. Amazon Redshift exécute donc la fonction JSON\$1PARSE sur la valeur d’exemple. 

```
SELECT CASE 
            WHEN CAN_JSON_PARSE('[10001,10002,"abc"]')
            THEN JSON_PARSE('[10001,10002,"abc"]')
        END;

 case
---------------------
'[10001,10002,"abc"]'
```

 L’exemple suivant montre CAN\$1JSON\$1PARSE s’exécutant sur une valeur qui n’est pas au format JSON avec une condition CASE. Il renvoie false. Amazon Redshift renvoie donc le segment dans la clause ELSE de la condition CASE à la place. 

```
SELECT CASE 
            WHEN CAN_JSON_PARSE('This is a string.')
            THEN JSON_PARSE('This is a string.')
            ELSE 'This is not JSON.'
        END;

 case
---------------------
"This is not JSON."
```

# Fonction JSON\$1SERIALIZE
<a name="JSON_SERIALIZE"></a>

La fonction JSON\$1SERIALIZE sérialise une expression `SUPER` en représentation JSON textuelle pour suivre la norme RFC 8259. Pour plus d'informations sur cette RFC, consultez [le format d'échange de données JSON ( JavaScript Object Notation)](https://tools.ietf.org/html/rfc8259).

La limite de taille des données `SUPER` est approximativement la même que la limite de bloc, et la limite des données `VARCHAR` est inférieure à la limite de taille des données `SUPER`. Par conséquent, la fonction JSON\$1SERIALIZE renvoie une erreur lorsque le format JSON dépasse la limite VARCHAR du système. Pour vérifier la taille d’une expression `SUPER`, consultez la fonction [JSON\$1SIZE](r_json_size.md).

## Syntaxe
<a name="JSON_SERIALIZE-synopsis"></a>

```
JSON_SERIALIZE(super_expression)
```

## Arguments
<a name="JSON_SERIALIZE-arguments"></a>

 *super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="JSON_SERIALIZE-return"></a>

`VARCHAR`

**Note**  
La valeur VARCHAR renvoyée est toujours une chaîne JSON non null. Si *super\$1expression* est NULL, JSON\$1SERIALIZE renvoie la chaîne JSON `'null'`.

## Exemples
<a name="JSON_SERIALIZE-examples"></a>

Pour sérialiser une valeur `SUPER` en chaîne, utilisez l’exemple suivant.

```
SELECT JSON_SERIALIZE(JSON_PARSE('[10001,10002,"abc"]'));
   
+---------------------+
|   json_serialize    |
+---------------------+
| [10001,10002,"abc"] |
+---------------------+
```

# Fonction JSON\$1SERIALIZE\$1TO\$1VARBYTE
<a name="JSON_SERIALIZE_TO_VARBYTE"></a>

La fonction JSON\$1SERIALIZE\$1TO\$1VARBYTE convertit une valeur `SUPER` en chaîne JSON similaire à JSON\$1SERIALIZE(), mais stockée dans une valeur `VARBYTE`.

## Syntaxe
<a name="JSON_SERIALIZE_TO_VARBYTE-synopsis"></a>

```
JSON_SERIALIZE_TO_VARBYTE(super_expression)
```

## Arguments
<a name="JSON_SERIALIZE_TO_VARBYTE-arguments"></a>

 *super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="JSON_SERIALIZE_TO_VARBYTE-return"></a>

`VARBYTE`

## Exemples
<a name="JSON_SERIALIZE_TO_VARBYTE-examples"></a>

Pour sérialiser une valeur `SUPER` et renvoyer le résultat au format `VARBYTE`, utilisez l’exemple suivant.

```
SELECT JSON_SERIALIZE_TO_VARBYTE(JSON_PARSE('[10001,10002,"abc"]'));

+----------------------------------------+
|       json_serialize_to_varbyte        |
+----------------------------------------+
| 5b31303030312c31303030322c22616263225d |
+----------------------------------------+
```

Pour sérialiser une valeur `SUPER` et convertir le résultat au format `VARCHAR`, utilisez l’exemple suivant. Pour plus d’informations, consultez [Fonction CAST](r_CAST_function.md).

```
SELECT CAST((JSON_SERIALIZE_TO_VARBYTE(JSON_PARSE('[10001,10002,"abc"]'))) AS VARCHAR);

+---------------------------+
| json_serialize_to_varbyte |
+---------------------------+
| [10001,10002,"abc"]       |
+---------------------------+
```

# Fonctions JSON basées sur du texte
<a name="text-json-functions"></a>

Les fonctions de cette section analysent les valeurs JSON en tant que VARCHAR. Pour analyser JSON, nous vous recommandons plutôt d’utiliser les fonctions suivantes, qui analysent les valeurs JSON en tant que SUPER. Amazon Redshift analyse les valeurs SUPER plus efficacement que VARCHAR.
+  [Fonction JSON\$1PARSE](JSON_PARSE.md) 
+  [Fonction CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md) 
+  [Fonction JSON\$1SERIALIZE](JSON_SERIALIZE.md) 
+  [Fonction JSON\$1SERIALIZE\$1TO\$1VARBYTE](JSON_SERIALIZE_TO_VARBYTE.md) 

**Topics**
+ [Fonction IS\$1VALID\$1JSON](IS_VALID_JSON.md)
+ [Fonction IS\$1VALID\$1JSON\$1ARRAY](IS_VALID_JSON_ARRAY.md)
+ [Fonction JSON\$1ARRAY\$1LENGTH](JSON_ARRAY_LENGTH.md)
+ [Fonction JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT](JSON_EXTRACT_ARRAY_ELEMENT_TEXT.md)
+ [Fonction JSON\$1EXTRACT\$1PATH\$1TEXT](JSON_EXTRACT_PATH_TEXT.md)

# Fonction IS\$1VALID\$1JSON
<a name="IS_VALID_JSON"></a>

**Note**  
CAN\$1JSON\$1PARSE et ses fonctions associées analysent les valeurs JSON en tant que SUPER, qu’Amazon Redshift analyse plus efficacement que VARCHAR.  
 Au lieu d’utiliser IS\$1VALID\$1JSON, nous vous recommandons de valider vos chaînes JSON à l’aide de [Fonction CAN\$1JSON\$1PARSE](CAN_JSON_PARSE.md). 

La fonction IS\$1VALID\$1JSON valide une chaîne JSON. La fonction renvoie la valeur booléenne `true` si la chaîne est une chaîne JSON correctement formée ou `false` dans le cas contraire. Pour valider un tableau JSON, utilisez [Fonction IS\$1VALID\$1JSON\$1ARRAY](IS_VALID_JSON_ARRAY.md)

Pour plus d'informations, consultez [Fonctions JSON](json-functions.md). 

## Syntaxe
<a name="IS_VALID_JSON-synopsis"></a>

```
IS_VALID_JSON('json_string')
```

## Arguments
<a name="IS_VALID_JSON-arguments"></a>

 *json\$1string*  
Chaîne ou expression ayant pour valeur une chaîne JSON.

## Type de retour
<a name="IS_VALID_JSON-return"></a>

`BOOLEAN`

## Exemples
<a name="IS_VALID_JSON-examples"></a>

Pour créer une table et insérer des chaînes JSON à des fins de test, utilisez l’exemple suivant.

```
CREATE TABLE test_json(id int IDENTITY(0,1), json_strings VARCHAR);

-- Insert valid JSON strings --
INSERT INTO test_json(json_strings) VALUES
('{"a":2}'), 
('{"a":{"b":{"c":1}}}'), 
('{"a": [1,2,"b"]}');

-- Insert invalid JSON strings --
INSERT INTO test_json(json_strings) VALUES
('{{}}'), 
('{1:"a"}'), 
('[1,2,3]');
```

Pour valider les chaînes dans l’exemple précédent, utilisez l’exemple suivant.

```
SELECT id, json_strings, IS_VALID_JSON(json_strings) 
FROM test_json
ORDER BY id;

+----+---------------------+---------------+
| id |    json_strings     | is_valid_json |
+----+---------------------+---------------+
|  0 | {"a":2}             | true          |
|  4 | {"a":{"b":{"c":1}}} | true          |
|  8 | {"a": [1,2,"b"]}    | true          |
| 12 | {{}}                | false         |
| 16 | {1:"a"}             | false         |
| 20 | [1,2,3]             | false         |
+----+---------------------+---------------+
```

# Fonction IS\$1VALID\$1JSON\$1ARRAY
<a name="IS_VALID_JSON_ARRAY"></a>

**Note**  
JSON\$1PARSE et ses fonctions associées analysent les valeurs JSON en tant que SUPER, qu’Amazon Redshift analyse plus efficacement que VARCHAR.   
 Au lieu d’utiliser IS\$1VALID\$1JSON\$1ARRAY, nous vous recommandons d’analyser vos chaînes JSON en utilisant [Fonction JSON\$1PARSE](JSON_PARSE.md) pour obtenir une valeur SUPER. Utilisez ensuite la fonction [Fonction IS\$1ARRAY](r_is_array.md) pour confirmer que le tableau est correctement formé. 

La fonction IS\$1VALID\$1JSON\$1ARRAY valide un tableau JSON. La fonction renvoie la valeur booléenne `true` si le tableau est un tableau JSON correctement formé ou `false` dans le cas contraire. Pour valider un tableau JSON, utilisez [Fonction IS\$1VALID\$1JSON](IS_VALID_JSON.md)

Pour plus d'informations, consultez [Fonctions JSON](json-functions.md). 

## Syntaxe
<a name="IS_VALID_JSON_ARRAY-synopsis"></a>

```
IS_VALID_JSON_ARRAY('json_array') 
```

## Arguments
<a name="IS_VALID_JSON_ARRAY-arguments"></a>

 *json\$1array*  
Chaîne ou expression ayant pour valeur un tableau JSON.

## Type de retour
<a name="IS_VALID_JSON_ARRAY-return"></a>

`BOOLEAN`

## Exemples
<a name="IS_VALID_JSON_ARRAY-examples"></a>

Pour créer une table et insérer des chaînes JSON à des fins de test, utilisez l’exemple suivant.

```
CREATE TABLE test_json_arrays(id int IDENTITY(0,1), json_arrays VARCHAR);

-- Insert valid JSON array strings --
INSERT INTO test_json_arrays(json_arrays) 
VALUES('[]'), 
('["a","b"]'), 
('["a",["b",1,["c",2,3,null]]]');

-- Insert invalid JSON array strings --
INSERT INTO test_json_arrays(json_arrays) 
VALUES('{"a":1}'),
('a'),
('[1,2,]');
```

Pour valider les chaînes dans l’exemple précédent, utilisez l’exemple suivant.

```
SELECT json_arrays, IS_VALID_JSON_ARRAY(json_arrays) 
FROM test_json_arrays ORDER BY id;

+------------------------------+---------------------+
|         json_arrays          | is_valid_json_array |
+------------------------------+---------------------+
| []                           | true                |
| ["a","b"]                    | true                |
| ["a",["b",1,["c",2,3,null]]] | true                |
| {"a":1}                      | false               |
| a                            | false               |
| [1,2,]                       | false               |
+------------------------------+---------------------+
```

# Fonction JSON\$1ARRAY\$1LENGTH
<a name="JSON_ARRAY_LENGTH"></a>

**Note**  
JSON\$1PARSE et ses fonctions associées analysent les valeurs JSON en tant que SUPER, qu’Amazon Redshift analyse plus efficacement que VARCHAR.  
 Au lieu d’utiliser JSON\$1ARRAY\$1LENGTH, nous vous recommandons d’analyser vos chaînes JSON en utilisant [Fonction JSON\$1PARSE](JSON_PARSE.md) pour obtenir une valeur SUPER. Ensuite, utilisez [Fonction GET\$1ARRAY\$1LENGTH](get_array_length.md) pour obtenir la longueur de votre tableau. 

La fonction JSON\$1ARRAY\$1LENGTH renvoie le nombre d’éléments du tableau externe d’une chaîne JSON. Si l’argument *null\$1if\$1invalid* a la valeur `true` et que la chaîne JSON n’est pas valide, la fonction renvoie `NULL` au lieu de renvoyer une erreur.

Pour plus d’informations, consultez [Fonctions JSON](json-functions.md). 

## Syntaxe
<a name="JSON_ARRAY_LENGTH-synopsis"></a>

```
JSON_ARRAY_LENGTH('json_array' [, null_if_invalid ] ) 
```

## Arguments
<a name="JSON_ARRAY_LENGTH-arguments"></a>

 *json\$1array*  
Tableau JSON au bon format.

 *null\$1if\$1invalid*  
(Facultatif) Valeur `BOOLEAN` qui spécifie s’il faut renvoyer `NULL` quand la chaîne JSON en entrée n’est pas valide au lieu de renvoyer une erreur. Pour renvoyer `NULL` si la chaîne JSON n’est pas valide, spécifiez `true` (`t`). Pour renvoyer une erreur si la chaîne JSON n’est pas valide, spécifiez `false` (`f`). La valeur par défaut est `false`.

## Type de retour
<a name="JSON_ARRAY_LENGTH-return"></a>

`INTEGER`

## Exemples
<a name="JSON_ARRAY_LENGTH-examples"></a>

Pour renvoyer le nombre d’éléments du tableau, utilisez l’exemple suivant. 

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14]'); 

+-------------------+
| json_array_length |
+-------------------+
|                 5 |
+-------------------+
```

Pour renvoyer une erreur si la chaîne JSON n’est pas valide, utilisez l’exemple suivant.

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14');
 
ERROR: invalid json array object [11,12,13,{"f1":21,"f2":[25,26]},14
```

Pour définir *null\$1if\$1invalid* sur *true* afin que l’instruction renvoie `NULL` au lieu de renvoyer une erreur en cas de chaîne JSON non valide, utilisez l’exemple suivant.

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14',true);

+-------------------+
| json_array_length |
+-------------------+
| NULL              |
+-------------------+
```

# Fonction JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT"></a>

**Note**  
JSON\$1PARSE et ses fonctions associées analysent les valeurs JSON en tant que SUPER, qu’Amazon Redshift analyse plus efficacement que VARCHAR.  
Au lieu d’utiliser JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT, nous vous recommandons d’analyser vos chaînes JSON en utilisant [Fonction JSON\$1PARSE](JSON_PARSE.md) pour obtenir une valeur SUPER. Ensuite, interrogez l’élément souhaité à l’aide de son index de tableau, en utilisant la syntaxe `value[element position]`. Pour plus d’informations sur l’interrogation des éléments d’un tableau dans des valeurs SUPER, consultez [Interrogation de données semi-structurées](query-super.md).

La fonction JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT renvoie un élément de tableau JSON dans le tableau le plus externe d’une chaîne JSON, à l’aide d’un index de base zéro. Le premier élément d’un tableau est à la position 0. Si l’index est négatif ou hors limites, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT renvoie `NULL`. Si l’argument *null\$1if\$1invalid* a la valeur `TRUE` et que la chaîne JSON n’est pas valide, la fonction renvoie `NULL` au lieu de renvoyer une erreur.

Pour plus d’informations, consultez [Fonctions JSON](json-functions.md). 

## Syntaxe
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-synopsis"></a>

```
JSON_EXTRACT_ARRAY_ELEMENT_TEXT('json string', pos [, null_if_invalid ] )
```

## Arguments
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-arguments"></a>

 *json\$1string*  
Chaîne JSON au bon format.

*pos*  
`INTEGER` représentant l’index de l’élément de tableau à renvoyer, à l’aide d’un index de tableau de base zéro.

*null\$1if\$1invalid*  
(Facultatif) Valeur `BOOLEAN` qui spécifie s’il faut renvoyer `NULL` quand la chaîne JSON en entrée n’est pas valide au lieu de renvoyer une erreur. Pour renvoyer `NULL` si la chaîne JSON n’est pas valide, spécifiez `true` (`t`). Pour renvoyer une erreur si la chaîne JSON n’est pas valide, spécifiez `false` (`f`). La valeur par défaut est `false`.

## Type de retour
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-return"></a>

`VARCHAR`  
Chaîne `VARCHAR` représentant l’élément de tableau JSON référencé par *pos*.

## Exemples
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-examples"></a>

Pour renvoyer l’élément de tableau à la position 2, qui est le troisième élément d’un index de tableau de base zéro, utilisez l’exemple suivant. 

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('[111,112,113]', 2);
 
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
|                             113 |
+---------------------------------+
```

Pour renvoyer une erreur si la chaîne JSON n’est pas valide, utilisez l’exemple suivant.

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1);
 
ERROR: invalid json array object ["a",["b",1,["c",2,3,null,]]]
```

Pour définir *null\$1if\$1invalid* sur *true* afin que l’instruction renvoie `NULL` au lieu de renvoyer une erreur en cas de chaîne JSON non valide, utilisez l’exemple suivant.

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1,true);
 
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
| NULL                            |
+---------------------------------+
```

Considérez les exemples d’instructions suivants. Si la chaîne JSON ou l’index sont NULL, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT renvoie NULL quelle que soit la valeur des autres paramètres. 

```
--Statement where json_string is NULL.
SELECT json_extract_array_element_text(NULL, 0)

 json_extract_array_element_text
---------------------------------
                            NULL

--Statement where pos is NULL and json_string is invalid JSON.
SELECT json_extract_array_element_text('invalid_json', NULL);

 json_extract_array_element_text
---------------------------------
                            NULL

--Statement where json_string is NULL and null_if_invalid is FALSE.
SELECT json_extract_array_element_text(NULL, 0, FALSE);

 json_extract_array_element_text
---------------------------------
                            NULL
```

Considérez les exemples d’instructions suivants. Lorsque *null\$1if\$1invalid* est TRUE, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT renvoie NULL lorsque *json\$1string* est un JSON non valide. Si *null\$1if\$1invalid* est FALSE ou n’est pas défini, la fonction renvoie une erreur lorsque *json\$1string* n’est pas valide.

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_array_element_text('invalid_json', 0, TRUE);

 json_extract_array_element_text
---------------------------------
                            NULL
                            
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_array_element_text('invalid_json', 0);

ERROR:  JSON parsing error
```

Prenons l’exemple suivant, où *json\$1string* est un JSON valide et *pos* fait référence à une valeur JSON `null`. Dans ce cas, JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT renvoie NULL, quelle que soit la valeur de *null\$1if\$1invalid*.

```
--Statement selecting a null value.
SELECT json_extract_array_element_text('[null]', 0);

  json_extract_array_element_text 
----------------------------------
                             NULL
```

# Fonction JSON\$1EXTRACT\$1PATH\$1TEXT
<a name="JSON_EXTRACT_PATH_TEXT"></a>

**Note**  
JSON\$1PARSE et ses fonctions associées analysent les valeurs JSON en tant que SUPER, qu’Amazon Redshift analyse plus efficacement que VARCHAR.  
Au lieu d’utiliser JSON\$1EXTRACT\$1PATH\$1TEXT, nous vous recommandons d’analyser vos chaînes JSON en utilisant [Fonction JSON\$1PARSE](JSON_PARSE.md) pour obtenir une valeur SUPER. Ensuite, recherchez l’élément souhaité à l’aide de la syntaxe `value.attribute`. Pour plus d’informations sur l’interrogation des éléments d’un tableau dans des valeurs SUPER, consultez [Interrogation de données semi-structurées](query-super.md).

La fonction JSON\$1EXTRACT\$1PATH\$1TEXT renvoie la valeur de la paire clé-valeur référencée par une série d’éléments de chemin dans une chaîne JSON. Le chemin d’accès JSON peut s’imbriquer à une profondeur de près de cinq niveaux. Les éléments de chemin d’accès sont sensible à la casse. Si un élément de chemin n’existe pas dans la chaîne JSON, JSON\$1EXTRACT\$1PATH\$1TEXT renvoie `NULL`.

Si l’argument *null\$1if\$1invalid* a la valeur `TRUE` et que la chaîne JSON n’est pas valide, la fonction renvoie `NULL` au lieu de renvoyer une erreur.

JSON\$1EXTRACT\$1PATH\$1TEXT a une taille de données maximale de 64 Ko. Ainsi, si un enregistrement JSON est supérieur à 64 Ko, son traitement avec JSON\$1EXTRACT\$1PATH\$1TEXT entraîne une erreur. 

Pour plus d’informations sur les fonctions JSON supplémentaires, consultez [Fonctions JSON](json-functions.md). Pour plus d’informations sur l’utilisation de JSON, consultez [Exécution de la commande COPY à partir du format JSON](copy-usage_notes-copy-from-json.md).

## Syntaxe
<a name="JSON_EXTRACT_PATH_TEXT-synopsis"></a>

```
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
```

## Arguments
<a name="JSON_EXTRACT_PATH_TEXT-arguments"></a>

 *json\$1string*  
Chaîne JSON au bon format.

*path\$1elem*  
Élément de chemin d’accès dans une chaîne JSON. Un élément de chemin d’accès est obligatoire. Des éléments de chemin supplémentaires peuvent être spécifiés, jusqu’à une profondeur de cinq niveaux.

*null\$1if\$1invalid*  
(Facultatif) Valeur `BOOLEAN` qui spécifie s’il faut renvoyer `NULL` quand la chaîne JSON en entrée n’est pas valide au lieu de renvoyer une erreur. Pour renvoyer `NULL` si la chaîne JSON n’est pas valide, spécifiez `TRUE` (`t`). Pour renvoyer une erreur si la chaîne JSON n’est pas valide, spécifiez `FALSE` (`f`). La valeur par défaut est `FALSE`.

Dans une chaîne JSON, Amazon Redshift reconnaît `\n` comme un caractère de nouvelle ligne et `\t` comme un caractère de tabulation. Pour charger une barre oblique inverse, précédez-la d’une barre oblique inverse (`\\`). Pour plus d'informations, consultez [Caractères d’échappement dans JSON](copy-usage_notes-copy-from-json.md#copy-usage-json-escape-characters).

## Type de retour
<a name="JSON_EXTRACT_PATH_TEXT-return"></a>

`VARCHAR`  
Chaîne `VARCHAR` représentant la valeur JSON référencée par les éléments de chemin.

## Exemples
<a name="JSON_EXTRACT_PATH_TEXT-examples"></a>

Pour renvoyer la valeur du chemin `'f4', 'f6'`, utilisez l’exemple suivant.

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6');

+------------------------+
| json_extract_path_text |
+------------------------+
| star                   |
+------------------------+
```

Pour renvoyer une erreur si la chaîne JSON n’est pas valide, utilisez l’exemple suivant.

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6');

ERROR: invalid json object {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}
```

Pour définir *null\$1if\$1invalid* sur *TRUE* afin que l’instruction renvoie `NULL` en cas de chaîne JSON non valide au lieu de renvoyer une erreur, utilisez l’exemple suivant.

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6',true);

+------------------------+
| json_extract_path_text |
+------------------------+
| NULL                   |
+------------------------+
```

Prenons l’exemple suivant, qui sélectionne la valeur pour le chemin `'farm', 'barn', 'color'`, où la valeur récupérée se situe au troisième niveau, utilisez l’exemple suivant. Cet exemple est formaté avec un outil de validation JSON, pour le rendre plus facile à lire.

```
SELECT JSON_EXTRACT_PATH_TEXT('{
    "farm": {
        "barn": {
            "color": "red",
            "feed stocked": true
        }
    }
}', 'farm', 'barn', 'color');
+------------------------+
| json_extract_path_text |
+------------------------+
| red                    |
+------------------------+
```

Pour renvoyer `NULL` si l’élément `'color'` est manquant, utilisez l’exemple suivant. Cet exemple est formaté avec un outil de validation JSON.

```
SELECT JSON_EXTRACT_PATH_TEXT('{
    "farm": {
        "barn": {}
    }
}', 'farm', 'barn', 'color');

+------------------------+
| json_extract_path_text |
+------------------------+
| NULL                   |
+------------------------+
```

Si la chaîne JSON est valide, la tentative d’extraction d’un élément manquant renvoie `NULL`.

Pour renvoyer la valeur du chemin `'house', 'appliances', 'washing machine', 'brand'`, utilisez l’exemple suivant.

```
SELECT JSON_EXTRACT_PATH_TEXT('{
  "house": {
    "address": {
      "street": "123 Any St.",
      "city": "Any Town",
      "state": "FL",
      "zip": "32830"
    },
    "bathroom": {
      "color": "green",
      "shower": true
    },
    "appliances": {
      "washing machine": {
        "brand": "Any Brand",
        "color": "beige"
      },
      "dryer": {
        "brand": "Any Brand",
        "color": "white"
      }
    }
  }
}', 'house', 'appliances', 'washing machine', 'brand');  

+------------------------+
| json_extract_path_text |
+------------------------+
| Any Brand              |
+------------------------+
```

L’exemple suivant crée un exemple de table et le remplit avec des valeurs SUPER, puis renvoie la valeur du chemin `'f2'` pour les deux lignes.

```
CREATE TABLE json_example(id INT, json_text SUPER);

INSERT INTO json_example VALUES
(1, JSON_PARSE('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}')),
(2, JSON_PARSE('{
    "farm": {
        "barn": {
            "color": "red",
            "feed stocked": true
        }
    }
}'));

SELECT * FROM json_example;
id          | json_text
------------+--------------------------------------------
1           | {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}
2           | {"farm":{"barn":{"color":"red","feed stocked":true}}}
 

SELECT id, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(json_text), 'f2') FROM json_example;
         
id          | json_text
------------+--------------------------------------------
1           | {"f3":1}
2           |
```

Considérez les exemples d’instructions suivants. Le *path\$1elem* fourni est NULL, donc JSON\$1EXTRACT\$1PATH\$1TEXT renvoie NULL quelle que soit la valeur des autres paramètres. 

```
--Statement where path_elem is NULL and json_string is valid JSON.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}',NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where only one path_elem is NULL.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4',NULL);

 json_extract_path_text
------------------------
                   NULL
                   
--Statement where path_elem is NULL and json_string is invalid JSON.
SELECT json_extract_path_text('invalid_json', NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where path_elem is NULL and null_if_invalid is FALSE.
SELECT json_extract_path_text(NULL, 0, FALSE);

 json_extract_path_text
------------------------
                   NULL
```

Considérez les exemples d’instructions suivants. Lorsque *null\$1if\$1invalid* est TRUE, JSON\$1EXTRACT\$1PATH\$1TEXT renvoie NULL lorsque *json\$1string* est un JSON non valide. Si *null\$1if\$1invalid* est FALSE ou n’est pas défini, la fonction renvoie une erreur lorsque *json\$1string* n’est pas valide.

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_path_text('invalid_json', 0, TRUE);

 json_extract_path_text
------------------------
                   NULL
                                                    
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_path_text('invalid_json', 0, FALSE);

ERROR:  JSON parsing error
```

Prenons les exemples suivants, où *json\$1string* est un JSON valide et *path\$1elem* fait référence à une valeur JSON `null`. Dans ce cas, JSON\$1EXTRACT\$1PATH\$1TEXT renvoie NULL. De même, lorsque *path\$1elem* fait référence à une valeur inexistante, JSON\$1EXTRACT\$1PATH\$1TEXT renvoie NULL, quelle que soit la valeur de *null\$1if\$1invalid*.

```
--Statement selecting a null value.
SELECT json_extract_path_text('[null]', 0);

  json_extract_path_text  
-------------------------
                    NULL   
                             
--Statement selecting a non-existing value.               
SELECT json_extract_path_text('{}', 'a');
       
  json_extract_path_text  
-------------------------
                    NULL
```

# Solutions de machine learning
<a name="ml-function"></a>

En utilisant le machine learning (ML) d’Amazon Redshift, vous pouvez entraîner des modèles de machine learning en utilisant des instructions SQL et les invoquer dans des requêtes SQL pour la prédiction. L’explicabilité du modèle Amazon Redshift inclut des valeurs d’importance des fonctions pour vous aider à comprendre comment chaque attribut de vos données d’entraînement contribue au résultat prédit.

Vous trouverez ci-dessous les descriptions des fonctions de machine learning pour SQL prises en charge par Amazon Redshift.

**Topics**
+ [Fonction EXPLAIN\$1MODEL](r_explain_model_function.md)

# Fonction EXPLAIN\$1MODEL
<a name="r_explain_model_function"></a>

La fonction EXPLAIN\$1MODEL renvoie un type de données SUPER qui contient un rapport d’explicabilité du modèle au format JSON. Le rapport d’explicabilité contient des informations sur la valeur Shapley pour toutes les fonctions du modèle.

La fonction EXPLAIN\$1MODEL ne prend actuellement en charge que les modèles AUTO ON ou AUTO OFF. XGBoost

Lorsque le rapport d’explicabilité n’est pas disponible, la fonction renvoie les statuts affichant la progression du modèle. Cela inclut `Waiting for training job to complete`, `Waiting for processing job to complete` et `Processing job failed`. 

Lorsque vous exécutez l’instruction CREATE MODEL, l’état de l’explication devient `Waiting for training job to complete`. Lorsque le modèle a été formé et qu’une demande d’explication est envoyée, l’état de l’explication devient `Waiting for processing job to complete`. Lorsque l’explication du modèle est terminée avec succès, le rapport d’explicabilité complet est disponible. Sinon, l’état devient `Processing job failed`.

Lorsque vous exécutez l’instruction CREATE MODEL, vous pouvez utiliser le paramètre facultatif `MAX_RUNTIME` afin de spécifier la durée maximale de l’entraînement. Une fois ce délai de création de modèle atteint, Amazon Redshift arrête la création du modèle. Si vous atteignez ce délai pendant que vous créez un modèle Autopilot, Amazon Redshift renvoie le meilleur modèle obtenu jusque-là. Sachant que l’explicabilité du modèle devient disponible une fois l’entraînement du modèle terminé, si la valeur de durée définie pour `MAX_RUNTIME` est basse, il est possible que le rapport d’explicabilité ne soit pas disponible. La durée d’entraînement varie en fonction de la complexité du modèle, de la taille des données et d’autres facteurs.

## Syntaxe
<a name="r_explain_model_function-synopsis"></a>

```
EXPLAIN_MODEL ('schema_name.model_name')
```

## Argument
<a name="r_explain_model_function-argument"></a>

 *nom\$1schéma*   
Nom du schéma. Si aucun nom de schéma n’est spécifié, le schéma actuel est sélectionné.

 *model\$1name*   
Nom du modèle. Le nom du modèle d’un schéma doit être unique.

## Type de retour
<a name="r_explain_model_function-return-type"></a>

La fonction EXPLAIN\$1MODEL renvoie un type de données SUPER, comme indiqué ci-dessous.

```
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05,"x1":0.10,"x2":0.30,"x3":0.15},"expected_value":0.50}}}}
```

## Exemples
<a name="r_explain_model_function-examples"></a>

L’exemple suivant renvoie l’état de l’explication `waiting for training job to complete`.

```
select explain_model('customer_churn_auto_model');
                 explain_model
--------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```

Lorsque l’explication du modèle est terminée avec succès, le rapport d’explicabilité complet est disponible comme suit.

```
select explain_model('customer_churn_auto_model');
                                       explain_model
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05386043365892927,"x1":0.10801289723274592,"x2":0.23227865827017378,"x3":0.0676685133940455,"x4":0.0897097667672375,"x5":0.08502141653270926,"x6":0.07581993936077065,"x7":0.16462880604578135},"expected_value":0.8492974042892456}}}}
(1 row)
```

Étant donné que la fonction EXPLAIN\$1MODEL renvoie le type de données SUPER, vous pouvez interroger le rapport d’explicabilité. En faisant cela, vous pouvez extraire des valeurs `global_shap_values`, `expected_value` ou des valeurs Shapley spécifiques aux fonctions.

L’exemple suivant montre comment extraire `global_shap_values` pour le modèle.

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values from (select explain_model('customer_churn_auto_model') as report) as json_table;
                                                       global_shap_values
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"state":0.10983770427197151,"account_length":0.1772441398408543,"area_code":0.08626823968639591,"phone":0.0736669595282712,"intl_plan":3.344907436910987,"vmail_plan":0.09646600597854467,"vmail_message":0.2064922655089351,"day_mins":2.015038015251777,"day_calls":0.13179511076780168,"day_charge":0.4941091720480879,"eve_mins":0.46081379198626105,"eve_calls":0.16913440417758477,"eve_charge":0.09651014369401761,"night_mins":0.44218153640050845,"night_calls":0.15311640089218997,"night_charge":0.13850366104495426,"intl_mins":0.7583662464883899,"intl_calls":0.47144468610485685,"intl_charge":0.10945894673611875,"cust_serv_calls":0.31822051038387733}
(1 row)
```

L’exemple suivant montre comment extraire `global_shap_values` pour la fonction x0.

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values.x0 from (select explain_model('customer_churn_auto_model') as report) as json_table;
          x0
------------------------
  0.05386043365892927
(1 row)
```

Si le modèle est créé dans un schéma spécifique et que vous avez accès au modèle créé, vous pouvez interroger l’explication du modèle comme indiqué ci-dessous.

```
-- Check the current schema
SHOW search_path;
   search_path
------------------
  $user, public
(1 row)         
-- If you have the privilege to access the model explanation
-- in `test_schema`
SELECT explain_model('test_schema.test_model_name');
                       explain_model
---------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```

# Fonctions mathématiques
<a name="Math_functions"></a>

**Topics**
+ [Symboles d’opérateurs mathématiques](r_OPERATOR_SYMBOLS.md)
+ [Fonction ABS](r_ABS.md)
+ [Fonction ACOS](r_ACOS.md)
+ [Fonction ASIN](r_ASIN.md)
+ [Fonction ATAN](r_ATAN.md)
+ [ATAN2 fonction](r_ATAN2.md)
+ [Fonction CBRT](r_CBRT.md)
+ [Fonction CEILING (ou CEIL)](r_CEILING_FLOOR.md)
+ [Fonction COS](r_COS.md)
+ [Fonction COT](r_COT.md)
+ [Fonction DEGREES](r_DEGREES.md)
+ [Fonction DEXP](r_DEXP.md)
+ [DLOG1 fonction](r_DLOG1.md)
+ [DLOG10 fonction](r_DLOG10.md)
+ [Fonction EXP](r_EXP.md)
+ [Fonction FLOOR](r_FLOOR.md)
+ [Fonction LN](r_LN.md)
+ [Fonction LOG](r_LOG.md)
+ [Fonction MOD](r_MOD.md)
+ [Fonction PI](r_PI.md)
+ [Fonction POWER](r_POWER.md)
+ [Fonction RADIANS](r_RADIANS.md)
+ [Fonction RANDOM](r_RANDOM.md)
+ [Fonction ROUND](r_ROUND.md)
+ [Fonction SIN](r_SIN.md)
+ [Fonction SIGN](r_SIGN.md)
+ [Fonction SQRT](r_SQRT.md)
+ [Fonction TAN](r_TAN.md)
+ [Fonction TRUNC](r_TRUNC.md)

Cette section décrit les fonctions et opérateurs mathématiques pris en charge par Amazon Redshift. 

# Symboles d’opérateurs mathématiques
<a name="r_OPERATOR_SYMBOLS"></a>

 Le tableau suivant répertorie les opérateurs mathématiques pris en charge. 

## Opérateurs pris en charge
<a name="r_OPERATOR_SYMBOLS-supported-operators"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_OPERATOR_SYMBOLS.html)

## Exemples
<a name="r_OPERATOR_SYMBOLS-examples"></a>

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour calculer la commission payée plus 2,00 USD de traitement pour une transaction donnée, utilisez l’exemple suivant. 

```
SELECT
    commission,
    (commission + 2.00) AS comm
FROM
    sales
WHERE
    salesid = 10000;

+------------+-------+
| commission | comm  |
+------------+-------+
|      28.05 | 30.05 |
+------------+-------+
```

Pour calculer 20 % du prix de vente pour une transaction donnée, utilisez l’exemple suivant. 

```
SELECT pricepaid, (pricepaid * .20) as twentypct 
FROM sales 
WHERE salesid=10000;

+-----------+-----------+
| pricepaid | twentypct |
+-----------+-----------+
|       187 |      37.4 |
+-----------+-----------+
```

Pour prévoir les ventes de billets selon un modèle de croissance continue, utilisez l’exemple suivant. Dans cet exemple, la sous-requête renvoie le nombre de billets vendus en 2008. Ce résultat est multiplié de manière exponentielle par un taux de croissance continue de 5 % sur 10 ans. 

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid AND year=2008)^((5::float/100)*10) AS qty10years;

+------------------+
|    qty10years    |
+------------------+
| 587.664019657491 |
+------------------+
```

Pour rechercher le prix total payé et la commission sur les ventes avec un ID de date supérieur ou égal à 2 000, utilisez l’exemple suivant. Puis soustrayez la commission totale du prix total payé. 

```
SELECT SUM(pricepaid) AS sum_price, dateid,
SUM(commission) AS sum_comm, (SUM(pricepaid) - SUM(commission)) AS value
FROM sales 
WHERE dateid >= 2000
GROUP BY dateid 
ORDER BY dateid 
LIMIT 10;

+-----------+--------+----------+-----------+
| sum_price | dateid | sum_comm |   value   |
+-----------+--------+----------+-----------+
|    305885 |   2000 | 45882.75 | 260002.25 |
|    316037 |   2001 | 47405.55 | 268631.45 |
|    358571 |   2002 | 53785.65 | 304785.35 |
|    366033 |   2003 | 54904.95 | 311128.05 |
|    307592 |   2004 |  46138.8 |  261453.2 |
|    333484 |   2005 |  50022.6 |  283461.4 |
|    317670 |   2006 |  47650.5 |  270019.5 |
|    351031 |   2007 | 52654.65 | 298376.35 |
|    313359 |   2008 | 47003.85 | 266355.15 |
|    323675 |   2009 | 48551.25 | 275123.75 |
+-----------+--------+----------+-----------+
```

# Fonction ABS
<a name="r_ABS"></a>

 ABS calcule la valeur absolue d’un nombre, où ce nombre peut être littéral ou une expression qui a pour valeur un nombre. 

## Syntaxe
<a name="r_ABS-synopsis"></a>

```
ABS(number)
```

## Arguments
<a name="r_ABS-arguments"></a>

 *number*   
Nombre ou expression ayant pour valeur un nombre. Il peut être de type `SMALLINT`, `INTEGER`, `BIGINT`, `DECIMAL`, `FLOAT4`, `FLOAT8` ou `SUPER`.

## Type de retour
<a name="r_ABS-return-type"></a>

ABS renvoie le même type de données que sont argument. 

## Exemples
<a name="r_ABS-examples"></a>

Pour calculer la valeur absolue de `-38`, utilisez l’exemple suivant. 

```
SELECT ABS(-38);

+-----+
| abs |
+-----+
|  38 |
+-----+
```

Pour calculer la valeur absolue de `(14-76)`, utilisez l’exemple suivant. 

```
SELECT ABS(14-76);

+-----+
| abs |
+-----+
|  62 |
+-----+
```

# Fonction ACOS
<a name="r_ACOS"></a>

ACOS est une fonction trigonométrique qui renvoie l’arc cosinus d’un nombre. La valeur de retour est exprimée en radians et se situe entre `0` et `PI`.

## Syntaxe
<a name="r_ACOS-synopsis"></a>

```
ACOS(number)
```

## Arguments
<a name="r_ACOS-arguments"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_ACOS-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_ACOS-examples"></a>

Pour renvoyer l’arc cosinus de `-1`, utilisez l’exemple suivant. 

```
SELECT ACOS(-1);

+-------------------+
|       acos        |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

Pour convertir l’arc cosinus de `.5` en nombre de degrés équivalent, utilisez l’exemple suivant. 

```
SELECT (ACOS(.5) * 180/(SELECT PI())) AS degrees;

+-------------------+
|      degrees      |
+-------------------+
| 60.00000000000001 |
+-------------------+
```

# Fonction ASIN
<a name="r_ASIN"></a>

ASIN est une fonction trigonométrique qui renvoie l’arc sinus d’un nombre. La valeur de retour est exprimée en radians et se situe entre `PI/2` et `-PI/2`. 

## Syntaxe
<a name="r_ASIN-synopsis"></a>

```
ASIN(number)
```

## Arguments
<a name="r_ASIN-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_ASIN-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_ASIN-examples"></a>

Pour renvoyer l’arc sinus de `1`, utilisez l’exemple suivant. 

```
SELECT ASIN(1) AS halfpi;

+--------------------+
|       halfpi       |
+--------------------+
| 1.5707963267948966 |
+--------------------+
```

Pour convertir l’arc sinus de `.5` en nombre de degrés équivalent, utilisez l’exemple suivant. 

```
SELECT (ASIN(.5) * 180/(SELECT PI())) AS degrees;

+--------------------+
|      degrees       |
+--------------------+
| 30.000000000000004 |
+--------------------+
```

# Fonction ATAN
<a name="r_ATAN"></a>

ATAN est une fonction trigonométrique qui renvoie l’arc tangente d’un nombre. La valeur de retour est exprimée en radians et se situe entre `-PI` et `PI`.

## Syntaxe
<a name="r_ATAN-synopsis"></a>

```
ATAN(number)
```

## Arguments
<a name="r_ATAN-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_ATAN-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_ATAN-examples"></a>

Pour renvoyer l’arc tangente de `1` et le multiplier par 4, utilisez l’exemple suivant.

```
SELECT ATAN(1) * 4 AS pi;
            
+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

Pour convertir l’arc tangente de `1` en nombre de degrés équivalent, utilisez l’exemple suivant. 

```
SELECT (ATAN(1) * 180/(SELECT PI())) AS degrees;

+---------+
| degrees |
+---------+
|      45 |
+---------+
```

# ATAN2 fonction
<a name="r_ATAN2"></a>

ATAN2 est une fonction trigonométrique qui renvoie l'arc tangente d'un nombre divisé par un autre nombre. La valeur de retour est exprimée en radians et se situe entre `PI/2` et `-PI/2`. 

## Syntaxe
<a name="r_ATAN2-synopsis"></a>

```
ATAN2(number1, number2)
```

## Arguments
<a name="r_ATAN2-arguments"></a>

 *number1*   
Nombre `DOUBLE PRECISION`. 

 *number2*   
Nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_ATAN2-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_ATAN2-examples"></a>

Pour renvoyer l’arc tangente de `2/2` et le multiplier par 4, utilisez l’exemple suivant. 

```
SELECT ATAN2(2,2) * 4 AS PI;

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

Pour convertir l’arc tangente de `1/0` (qui équivaut à 0) en nombre de degrés équivalent, utilisez l’exemple suivant. 

```
SELECT (ATAN2(1,0) * 180/(SELECT PI())) AS degrees;

+---------+
| degrees |
+---------+
|      90 |
+---------+
```

# Fonction CBRT
<a name="r_CBRT"></a>

 La fonction CBRT est une fonction mathématique qui calcule la racine cubique d’un nombre donné. 

## Syntaxe
<a name="r_CBRT-synopsis"></a>

```
CBRT(number)
```

## Arguments
<a name="r_CBRT-argument"></a>

CBRT accepte un nombre `DOUBLE PRECISION` comme argument. 

## Type de retour
<a name="r_CBRT-return-type"></a>

`DOUBLE PRECISION` 

## Exemples
<a name="r_CBRT-examples"></a>

L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour calculer la racine cubique de la commission payée pour une transaction donnée, utilisez l’exemple suivant. 

```
SELECT CBRT(commission) FROM sales WHERE salesid=10000;

+--------------------+
|        cbrt        |
+--------------------+
| 3.0383953904884344 |
+--------------------+
```

# Fonction CEILING (ou CEIL)
<a name="r_CEILING_FLOOR"></a>

La fonction CEILING (ou CEIL) permet d’arrondir un nombre jusqu’au nombre entier supérieur suivant. (Le [Fonction FLOOR](r_FLOOR.md) arrondit un nombre au nombre entier inférieur suivant.) 

## Syntaxe
<a name="r_CEILING_FLOOR-synopsis"></a>

```
{CEIL | CEILING}(number)
```

## Arguments
<a name="r_CEILING_FLOOR-arguments"></a>

 *number*   
Nombre ou expression ayant pour valeur un nombre. Il peut être de type `SMALLINT`, `INTEGER`, `BIGINT`, `DECIMAL`, `FLOAT4`, `FLOAT8` ou `SUPER`.

## Type de retour
<a name="r_CEILING_FLOOR-return-type"></a>

CEILING et CEIL renvoient le même type de données que leur argument. 

Quand l’entrée est de type `SUPER`, la sortie conserve le même type dynamique que l’entrée, tandis que le type statique reste le type SUPER. Quand le type dynamique de `SUPER` n’est pas un nombre, Amazon Redshift renvoie une valeur null.

## Exemples
<a name="r_CEILING_FLOOR-example"></a>

L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour calculer le plafond de la commission payée pour une transaction de vente donnée, utilisez l’exemple suivant. 

```
SELECT CEILING(commission) FROM sales
WHERE salesid=10000;

+---------+
| ceiling |
+---------+
|      29 |
+---------+
```

# Fonction COS
<a name="r_COS"></a>

COS est une fonction trigonométrique qui renvoie le cosinus d’un nombre. La valeur de retour est exprimée en radians et se situe entre `-1` et `1`, inclus. 

## Syntaxe
<a name="r_COS-synopsis"></a>

```
COS(double_precision)
```

## Arguments
<a name="r_COS-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_COS-return-type"></a>

La fonction COS renvoie un nombre `DOUBLE PRECISION`. 

## Exemples
<a name="r_COS-examples"></a>

Pour renvoyer le cosinus de `0`, utilisez l’exemple suivant. 

```
SELECT COS(0);

+-----+
| cos |
+-----+
|   1 |
+-----+
```

Pour renvoyer le cosinus de `pi`, utilisez l’exemple suivant. 

```
SELECT COS(PI());

+-----+
| cos |
+-----+
|  -1 |
+-----+
```

# Fonction COT
<a name="r_COT"></a>

COT est une fonction trigonométrique qui renvoie la cotangente d’un nombre. Le paramètre d’entrée doit être différent de zéro. 

## Syntaxe
<a name="r_COT-synopsis"></a>

```
COT(number)
```

## Argument
<a name="r_COT-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_COT-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_COT-examples"></a>

Pour renvoyer la cotangente de 1, utilisez l’exemple suivant. 

```
SELECT COT(1);

+--------------------+
|        cot         |
+--------------------+
| 0.6420926159343306 |
+--------------------+
```

# Fonction DEGREES
<a name="r_DEGREES"></a>

Convertit un angle en radians en son équivalent en degrés. 

## Syntaxe
<a name="r_DEGREES-synopsis"></a>

```
DEGREES(number)
```

## Argument
<a name="r_DEGREES-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_DEGREES-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_DEGREES-examples"></a>

Pour renvoyer l’équivalent en degrés de 0,5 radian, utilisez l’exemple suivant. 

```
SELECT DEGREES(.5);

+-------------------+
|      degrees      |
+-------------------+
| 28.64788975654116 |
+-------------------+
```

Pour convertir PI radians en degrés, utilisez l’exemple suivant. 

```
SELECT DEGREES(pi());

+---------+
| degrees |
+---------+
|     180 |
+---------+
```

# Fonction DEXP
<a name="r_DEXP"></a>

La fonction DEXP renvoie la valeur exponentielle en notation scientifique d’un nombre double précision. La seule différence entre les fonctions DEXP et EXP est que le paramètre de DEXP doit être un nombre `DOUBLE PRECISION`. 

## Syntaxe
<a name="r_DEXP-synopsis"></a>

```
DEXP(number)
```

## Argument
<a name="r_DEXP-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_DEXP-return-type"></a>

`DOUBLE PRECISION`

## Exemple
<a name="r_DEXP-example"></a>

L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Utilisez la fonction DEXP de planifier des ventes de billets selon un modèle de croissance continue. Dans cet exemple, la sous-requête renvoie le nombre de billets vendus en 2008. Ce résultat est multiplié par le résultat de la fonction DEXP, qui spécifie une croissance continue de 7 % sur 10 ans. 

```
SELECT (SELECT SUM(qtysold) 
FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * DEXP((7::FLOAT/100)*10) qty2010;

+-------------------+
|      qty2010      |
+-------------------+
| 695447.4837722216 |
+-------------------+
```

# DLOG1 fonction
<a name="r_DLOG1"></a>

La DLOG1 fonction renvoie le logarithme naturel du paramètre d'entrée. Synonyme de [Fonction LN](r_LN.md). 

# DLOG10 fonction
<a name="r_DLOG10"></a>

 DLOG10 Renvoie le logarithme en base 10 du paramètre d'entrée.

Synonyme de [Fonction LOG](r_LOG.md). 

## Syntaxe
<a name="r_DLOG10-synopsis"></a>

```
DLOG10(number)
```

## Argument
<a name="r_DLOG10-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_DLOG10-return-type"></a>

`DOUBLE PRECISION`

## Exemple
<a name="r_DLOG10-example"></a>

Pour renvoyer le logarithme de base 10 du nombre 100, utilisez l’exemple suivant. 

```
SELECT DLOG10(100);

+--------+
| dlog10 |
+--------+
|      2 |
+--------+
```

# Fonction EXP
<a name="r_EXP"></a>

La fonction EXP implémente la fonction exponentielle pour une expression numérique, ou la base du logarithme naturel, `e`, élevée à la puissance de l’expression. La fonction EXP est l’inverse de [Fonction LN](r_LN.md). 

## Syntaxe
<a name="r_EXP-synopsis"></a>

```
EXP(expression)
```

## Argument
<a name="r_EXP-argument"></a>

 *expression*   
L’expression doit être un type de données `INTEGER`, `DECIMAL` ou `DOUBLE PRECISION`. 

## Type de retour
<a name="r_EXP-return-type"></a>

`DOUBLE PRECISION`

## Exemple
<a name="r_EXP-example"></a>

L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Utilisez la fonction EXP de planifier des ventes de billets selon un modèle de croissance continue. Dans cet exemple, la sous-requête renvoie le nombre de billets vendus en 2008. Ce résultat est multiplié par le résultat de la fonction EXP, qui spécifie une croissance continue de 7 % sur 10 ans. 

```
SELECT (SELECT SUM(qtysold) 
FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * EXP((7::FLOAT/100)*10) qty2018;

+-------------------+
|      qty2018      |
+-------------------+
| 695447.4837722216 |
+-------------------+
```

# Fonction FLOOR
<a name="r_FLOOR"></a>

La fonction FLOOR arrondit un nombre au nombre entier inférieur suivant. 

## Syntaxe
<a name="r_FLOOR-synopsis"></a>

```
FLOOR(number)
```

## Argument
<a name="r_FLOOR-argument"></a>

 *number*   
Nombre ou expression ayant pour valeur un nombre. Il peut être de type `SMALLINT`, `INTEGER`, `BIGINT`, `DECIMAL`, `FLOAT4`, `FLOAT8` ou `SUPER`. 

## Type de retour
<a name="r_FLOOR-return-type"></a>

FLOOR renvoie le même type de données que sont argument. 

Quand l’entrée est de type `SUPER`, la sortie conserve le même type dynamique que l’entrée, tandis que le type statique reste le type `SUPER`. Quand le type dynamique de `SUPER` n’est pas un nombre, Amazon Redshift renvoie `NULL`.

## Exemples
<a name="r_FLOOR-example"></a>

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour montrer la valeur de la commission payée pour une transaction de vente donnée avant et après l’utilisation de la fonction FLOOR, utilisez l’exemple suivant. 

```
SELECT commission 
FROM sales 
WHERE salesid=10000;

+------------+
| commission |
+------------+
|      28.05 |
+------------+

SELECT FLOOR(commission) 
FROM sales 
WHERE salesid=10000;

+-------+
| floor |
+-------+
|    28 |
+-------+
```

# Fonction LN
<a name="r_LN"></a>

Renvoie le logarithme naturel du paramètre d’entrée.

Synonyme de [DLOG1 fonction](r_DLOG1.md). 

## Syntaxe
<a name="r_LN-synopsis"></a>

```
LN(expression)
```

## Argument
<a name="r_LN-argument"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère.   
Cette fonction renvoie une erreur pour certains types de données, si l’expression fait référence à une table créée par l’utilisateur Amazon Redshift ou à une table système STL ou STV Amazon Redshift. 
Les expressions régulières avec les types de données suivants génèrent une erreur si elles font référence à une table créée par l’utilisateur ou à une table système. Les expressions régulières avec ces types de données s’exécutent exclusivement sur le nœud principal :   
+ `BOOLEAN` 
+ `CHAR` 
+ `DATE` 
+ `DECIMAL` ou `NUMERIC` 
+ `TIMESTAMP` 
+ `VARCHAR` 
Les expressions régulières avec les types de données suivants s’exécutent avec succès sur des tables créées par l’utilisateur ou des tables système STL ou STV :   
+ `BIGINT` 
+ `DOUBLE PRECISION` 
+ `INTEGER` 
+ `REAL` 
+ `SMALLINT` 

## Type de retour
<a name="r_LN-return-type"></a>

La fonction LN renvoie le même type que celui de l’*expression* en entrée. 

## Exemples
<a name="r_LN-example"></a>

Pour renvoyer le logarithme naturel, ou logarithme de base `e`, du nombre 2,718281828, utilisez l’exemple suivant. 

```
SELECT LN(2.718281828);

+--------------------+
|         ln         |
+--------------------+
| 0.9999999998311267 |
+--------------------+
```

Notez que la réponse est presque égale à 1. 

L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour renvoyer le logarithme naturel des valeurs de la colonne userid de la table USERS, utilisez l’exemple suivant. 

```
SELECT username, LN(userid) FROM users ORDER BY userid LIMIT 10;

+----------+--------------------+
| username |         ln         |
+----------+--------------------+
| JSG99FHE |                  0 |
| PGL08LJI | 0.6931471805599453 |
| IFT66TXU | 1.0986122886681098 |
| XDZ38RDD | 1.3862943611198906 |
| AEB55QTM | 1.6094379124341003 |
| NDQ15VBM |  1.791759469228055 |
| OWY35QYB | 1.9459101490553132 |
| AZG78YIP | 2.0794415416798357 |
| MSD36KVR | 2.1972245773362196 |
| WKW41AIW |  2.302585092994046 |
+----------+--------------------+
```

# Fonction LOG
<a name="r_LOG"></a>

Renvoie le logarithme d’un nombre.

Si vous utilisez cette fonction pour calculer le logarithme de base 10, vous pouvez également utiliser [DLOG10 fonction](r_DLOG10.md). 

## Syntaxe
<a name="r_LOG-synopsis"></a>

```
LOG([base, ]argument)
```

## Parameters
<a name="r_LOG-argument"></a>

 *base*   
(Facultatif) Base de la fonction logarithmique. Ce nombre doit être positif et ne peut pas être égal à `1`. Si ce paramètre est omis, Amazon Redshift calcule le logarithme de base 10 de l’*argument*.

 *argument*   
Argument de la fonction logarithmique. Ce nombre doit être positif. Si la valeur *argument* est `1`, la fonction retourne `0`.

## Type de retour
<a name="r_LOG-return-type"></a>

La fonction LOG renvoie un nombre `DOUBLE PRECISION`. 

## Exemples
<a name="r_LOG-example"></a>

Pour déterminer le logarithme de base 2 du nombre 100, utilisez l’exemple suivant. 

```
SELECT LOG(2, 100);
+-------------------+
|        log        |
+-------------------+
| 6.643856189774725 |
+-------------------+
```

Pour déterminer le logarithme de base 10 du nombre 100, utilisez l’exemple suivant. Notez que si vous omettez le paramètre base, Amazon Redshift suppose une base de 10.

```
SELECT LOG(100);
            
+-----+
| log |
+-----+
|   2 |
+-----+
```

# Fonction MOD
<a name="r_MOD"></a>

Renvoie le reste de deux nombres, autrement dit une opération *modulo*. Pour calculer le résultat, le premier paramètre est divisé par le second.

## Syntaxe
<a name="r_MOD-synopsis"></a>

```
MOD(number1, number2)
```

## Arguments
<a name="r_MOD-arguments"></a>

 *number1*   
Le premier paramètre d’entrée est un nombre `INTEGER`, `SMALLINT`, `BIGINT` ou `DECIMAL`. Si un paramètre est de type `DECIMAL`, l’autre paramètre doit également être de type `DECIMAL`. Si un paramètre est de type `INTEGER`, l’autre paramètre peut être de type `INTEGER`, `SMALLINT` ou `BIGINT`. Les deux paramètres peuvent également être de type `SMALLINT` ou `BIGINT`, mais un paramètre ne peut pas être de type `SMALLINT` si l’autre est de type `BIGINT`. 

 *number2*   
Le deuxième paramètre est un nombre `INTEGER`, `SMALLINT`, `BIGINT` ou `DECIMAL`. Les mêmes règles de type de données s’appliquent à *number2* en ce qui concerne *number1*. 

## Type de retour
<a name="r_MOD-return-type"></a>

Le type de retour de la fonction MOD est le même type numérique que les paramètres d’entrée, si les deux paramètres d’entrée sont de même type. Toutefois, si un paramètre d’entrée est de type `INTEGER`, le type renvoyé est également `INTEGER`. Les types renvoyés valides sont `DECIMAL`, `INT`, `SMALLINT` et `BIGINT`.

## Notes d’utilisation
<a name="r_MOD-usage-notes"></a>

Vous pouvez utiliser `%` comme opérateur modulo.

## Exemples
<a name="r_MOD-example"></a>

Pour renvoyer le reste de la division d’un nombre par un autre, utilisez l’exemple suivant.

```
SELECT MOD(10, 4);
               
+-----+
| mod |
+-----+
|   2 |
+-----+
```

Pour renvoyer un résultat `DECIMAL` lorsque vous utilisez la fonction MOD, utilisez l’exemple suivant.

```
SELECT MOD(10.5, 4);
               
+-----+
| mod |
+-----+
| 2.5 |
+-----+
```

Pour convertir un nombre avant d’exécuter la fonction MOD, utilisez l’exemple suivant. Pour plus d’informations, consultez [Fonction CAST](r_CAST_function.md).

```
SELECT MOD(CAST(16.4 AS INTEGER), 5);
               
+-----+
| mod |
+-----+
|   1 |
+-----+
```

Pour vérifier si le premier paramètre est pair en le divisant par 2, utilisez l’exemple suivant.

```
SELECT mod(5,2) = 0 AS is_even;
               
+---------+
| is_even |
+---------+
| false   |
+---------+
```

Pour utiliser *%* comme opérateur modulo, utilisez l’exemple suivant.

```
SELECT 11 % 4 as remainder;
               
 +-----------+
| remainder |
+-----------+
|         3 |
+-----------+
```

L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour renvoyer des informations pour les catégories impaires dans la table CATEGORY, utilisez l’exemple suivant. 

```
SELECT catid, catname
FROM category
WHERE MOD(catid,2)=1
ORDER BY 1,2;

+-------+-----------+
| catid |  catname  |
+-------+-----------+
|     1 | MLB       |
|     3 | NFL       |
|     5 | MLS       |
|     7 | Plays     |
|     9 | Pop       |
|    11 | Classical |
+-------+-----------+
```

# Fonction PI
<a name="r_PI"></a>

La fonction PI renvoie la valeur de pi à 14 décimales. 

## Syntaxe
<a name="r_PI-synopsis"></a>

```
PI()
```

## Type de retour
<a name="r_PI-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_PI-examples"></a>

Pour renvoyer la valeur de pi, utilisez l’exemple suivant.

```
SELECT PI();

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# Fonction POWER
<a name="r_POWER"></a>

 La fonction POWER est une fonction exponentielle qui élève une expression numérique à la puissance d’une seconde expression numérique. Par exemple, 2 à la puissance 3 est calculé sous la forme `POWER(2,3)`, avec un résultat de `8`. 

## Syntaxe
<a name="r_POWER-synopsis"></a>

```
{POW | POWER}(expression1, expression2)
```

## Arguments
<a name="r_POWER-arguments"></a>

 *expression1*   
Expression numérique à élever. Doit avoir le type de données `INTEGER`, `DECIMAL` ou `FLOAT`. 

 *expression2*   
Puissance à laquelle élever *expression1*. Doit avoir le type de données `INTEGER`, `DECIMAL` ou `FLOAT`. 

## Type de retour
<a name="r_POWER-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_POWER-examples"></a>

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Dans l’exemple suivant, la fonction POWER est utilisée pour prévoir la vente des billets des 10 prochaines années, basée sur le nombre de billets vendus en 2008 (résultat de la sous-requête). Le taux de croissance est défini sur 7 % par an dans cet exemple. 

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * POW((1+7::FLOAT/100),10) qty2010;

+-------------------+
|      qty2010      |
+-------------------+
| 679353.7540885945 |
+-------------------+
```

L’exemple suivant est une variante de l’exemple précédent, avec le taux de croissance à 7 % par an, mais l’intervalle est défini sur les mois (120 mois sur 10 ans). 

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * POW((1+7::FLOAT/100/12),120) qty2010;

+-----------------+
|     qty2010     |
+-----------------+
| 694034.54678046 |
+-----------------+
```

# Fonction RADIANS
<a name="r_RADIANS"></a>

La fonction RADIANS convertit un angle en degrés en son équivalent en radians. 

## Syntaxe
<a name="r_RADIANS-synopsis"></a>

```
RADIANS(number)
```

## Argument
<a name="r_RADIANS-argument"></a>

 *number*   
Le paramètre d’entrée est un nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_RADIANS-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_RADIANS-examples"></a>

Pour renvoyer l’équivalent en radians de 180 degrés, utilisez l’exemple suivant. 

```
SELECT RADIANS(180);

+-------------------+
|      radians      |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# Fonction RANDOM
<a name="r_RANDOM"></a>

La fonction RANDOM génère une valeur aléatoire compris entre 0,0 (inclus) et 1,0 (exclusif). 

## Syntaxe
<a name="r_RANDOM-synopsis"></a>

```
RANDOM()
```

## Type de retour
<a name="r_RANDOM-return-type"></a>

`DOUBLE PRECISION`

## Notes d’utilisation
<a name="r_RANDOM_usage_notes"></a>

Appelez RANDOM après avoir défini une valeur initiale avec la commande [SET](r_SET.md) afin que RANDOM génère des nombres dans une séquence prévisible. 

## Exemples
<a name="r_RANDOM-examples"></a>

Pour calculer une valeur aléatoire comprise entre 0 et 99, utilisez l’exemple suivant. Si le nombre aléatoire est compris entre 0 et 1, cette requête génère un nombre aléatoire compris entre 0 et 100. 

```
SELECT CAST(RANDOM() * 100 AS INT);

+------+
| int4 |
+------+
|   59 |
+------+
```

Cet exemple utilise la commande [SET](r_SET.md) pour définir une valeur SEED afin que RANDOM génère une séquence prévisible de nombres. 

Pour renvoyer trois entiers RANDOM sans définir la valeur SEED, utilisez l’exemple suivant. 

```
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|    6 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   68 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   56 |
+------+
```

Pour définir la valeur SEED sur `.25` et renvoyer trois nombres RANDOM supplémentaires, utilisez l’exemple suivant. 

```
SET SEED TO .25;
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   21 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   79 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   12 |
+------+
```

Pour réinitialiser la valeur SEED sur `.25` et vérifier que RANDOM renvoie les mêmes résultats que les trois appels précédents, utilisez l’exemple suivant. 

```
SET SEED TO .25;
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   21 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   79 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   12 |
+------+
```

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour extraire un échantillon aléatoire uniforme de 10 éléments de la table SALES, utilisez l’exemple suivant.

```
SELECT * 
FROM sales
ORDER BY RANDOM()
LIMIT 10;

+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
| salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
|   45422 |  51114 |     5983 |   24482 |    4369 |   2118 |       1 |       195 |      29.25 | 2008-10-19 05:20:07 |
|   42481 |  47638 |     4573 |    6198 |    6479 |   1987 |       4 |      1140 |        171 | 2008-06-10 09:39:19 |
|   31494 |  34759 |    18895 |    4719 |    7753 |   2090 |       4 |      1024 |      153.6 | 2008-09-21 03:44:26 |
|  119388 | 136685 |    21815 |   41905 |    2071 |   1884 |       1 |       359 |      53.85 | 2008-02-27 10:43:10 |
|  166990 | 225037 |    18529 |    7628 |     746 |   2113 |       1 |      2009 |     301.35 | 2008-10-14 10:07:44 |
|   11146 |  12096 |    42685 |    6619 |    1876 |   2123 |       1 |        29 |       4.35 | 2008-10-24 06:23:54 |
|  148537 | 172056 |    15102 |   11787 |    6122 |   1923 |       2 |       480 |         72 | 2008-04-07 03:58:23 |
|   68945 |  78387 |     7359 |   18323 |    6636 |   1910 |       1 |       457 |      68.55 | 2008-03-25 08:31:03 |
|   52796 |  59576 |     9909 |   15102 |    7958 |   1951 |       1 |       479 |      71.85 | 2008-05-05 02:25:08 |
|   90684 | 103522 |    38052 |   21549 |    7384 |   2117 |       1 |       313 |      46.95 | 2008-10-18 05:43:11 |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
```

Pour récupérer un échantillon aléatoire de 10 éléments tout en choisissant les éléments en fonction de leur prix, utilisez l’exemple suivant. Par exemple, un élément dont le prix est le double d’un autre a deux fois plus de chance d’apparaître dans les résultats de la requête.

```
SELECT * 
FROM sales
ORDER BY -LOG(RANDOM()) / pricepaid
LIMIT 10;

+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
| salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
|  158340 | 208208 |    17082 |   42018 |    1211 |   2160 |       4 |      6852 |     1027.8 | 2008-11-30 12:21:43 |
|   53250 |  60069 |    12644 |    7066 |    7942 |   1838 |       4 |      1528 |      229.2 | 2008-01-12 11:24:56 |
|   22929 |  24938 |    47314 |    6503 |     179 |   2000 |       3 |       741 |     111.15 | 2008-06-23 08:04:50 |
|  164980 | 221181 |     1949 |   19670 |    1471 |   1906 |       1 |      1330 |      199.5 | 2008-03-21 07:59:51 |
|  159641 | 211179 |    44897 |   16652 |    7458 |   2128 |       1 |      1019 |     152.85 | 2008-10-29 02:02:15 |
|   73143 |  83439 |     5716 |    5727 |    7314 |   1903 |       1 |       248 |       37.2 | 2008-03-18 11:07:42 |
|   84778 |  96749 |    46608 |   32980 |    3883 |   1999 |       2 |       958 |      143.7 | 2008-06-22 12:13:31 |
|  171096 | 232929 |    43683 |    8536 |    8353 |   1870 |       1 |       929 |     139.35 | 2008-02-13 01:36:36 |
|   74212 |  84697 |    39809 |   15569 |    5525 |   2105 |       2 |       896 |      134.4 | 2008-10-06 11:47:50 |
|  158011 | 207556 |    25399 |   16881 |     232 |   2088 |       2 |      2526 |      378.9 | 2008-09-19 06:00:26 |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
```

# Fonction ROUND
<a name="r_ROUND"></a>

La fonction ROUND arrondit des nombres à l’entier ou à la décimale la plus proche. 

La fonction ROUND peut éventuellement inclure un second argument sous forme d’`INTEGER` pour indiquer le nombre de décimales pour l’arrondi, dans les deux sens. Lorsque vous ne fournissez pas le second argument, la fonction arrondit au nombre entier le plus proche. Lorsque le second argument *integer* est spécifié, la fonction arrondit au nombre le plus proche avec une précision de *integer* décimales. 

## Syntaxe
<a name="r_ROUND-synopsis"></a>

```
ROUND(number [ , integer ] )
```

## Arguments
<a name="r_ROUND-argument"></a>

 *number*   
Nombre ou expression ayant pour valeur un nombre. Il peut être de type `DECIMAL`, `FLOAT8` ou `SUPER`. Amazon Redshift peut convertir implicitement d’autres types de données numériques. 

*integer*  
(Facultatif) `INTEGER` qui indique le nombre de décimales pour l’arrondi dans les deux sens. Le type de données `SUPER` n’est pas pris en charge pour cet argument.

## Type de retour
<a name="r_ROUND-return-type"></a>

ROUND renvoie le même type de données numérique que celui du *nombre* en entrée. 

Quand l’entrée est de type `SUPER`, la sortie conserve le même type dynamique que l’entrée, tandis que le type statique reste le type `SUPER`. Quand le type dynamique de `SUPER` n’est pas un nombre, Amazon Redshift renvoie `NULL`.

## Exemples
<a name="r_ROUND-examples"></a>

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour arrondir la commission payée pour une transaction donnée au nombre entier le plus proche, utilisez l’exemple suivant. 

```
SELECT commission, ROUND(commission)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |    28 |
+------------+-------+
```

Pour arrondir la commission payée pour une transaction donnée à la première décimale, utilisez l’exemple suivant. 

```
SELECT commission, ROUND(commission, 1)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |  28.1 |
+------------+-------+
```

Pour étendre la précision dans la direction opposée à celle de l’exemple précédent, utilisez l’exemple suivant. 

```
SELECT commission, ROUND(commission, -1)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |    30 |
+------------+-------+
```

# Fonction SIN
<a name="r_SIN"></a>

SIN est une fonction trigonométrique qui renvoie le sinus d’un nombre. La valeur renvoyée est comprise entre `-1` et `1`. 

## Syntaxe
<a name="r_SIN-synopsis"></a>

```
SIN(number)
```

## Argument
<a name="r_SIN-argument"></a>

 *number*   
Nombre `DOUBLE PRECISION` en radians. 

## Type de retour
<a name="r_SIN-return-type"></a>

`DOUBLE PRECISION` 

## Exemples
<a name="r_SIN-examples"></a>

Pour renvoyer le sinus de `-PI`, utilisez l’exemple suivant.

```
SELECT SIN(-PI());

+-------------------------+
|           sin           |
+-------------------------+
| -0.00000000000000012246 |
+-------------------------+
```

# Fonction SIGN
<a name="r_SIGN"></a>

 La fonction SIGN renvoie le signe (positif ou négatif) d’un nombre. Le résultat de la fonction SIGN est `1` si l’argument est positif, `-1` si l’argument est négatif ou `0` si l’argument est `0`. 

## Syntaxe
<a name="r_SIGN-synopsis"></a>

```
SIGN(number)
```

## Argument
<a name="r_SIGN-argument"></a>

 *number*   
Nombre ou expression ayant pour valeur un nombre. Il peut être de type `DECIMAL`, `FLOAT8` ou `SUPER`. D’autres types de données peuvent être convertis par Amazon Redshift via les règles de conversion implicites.

## Type de retour
<a name="r_SIGN-return-type"></a>

SIGN renvoie le même type de données numérique que celui de l’argument en entrée. Si l’entrée est de type `DECIMAL`, le résultat est de type `DECIMAL(1,0)`. 

Quand l’entrée est de type `SUPER`, la sortie conserve le même type dynamique que l’entrée, tandis que le type statique reste le type `SUPER`. Lorsque le type dynamique de `SUPER` n’est pas un nombre, Amazon Redshift renvoie `NULL`.

## Exemples
<a name="r_SIGN-examples"></a>

L’exemple suivant montre que la colonne `d` dans la table t2 est de type `DOUBLE PRECISION` puisque l’entrée est de type `DOUBLE PRECISION` et que la colonne `n` dans la table t2 a `NUMERIC(1,0)` comme sortie puisque l’entrée est de type `NUMERIC`. 

```
CREATE TABLE t1(d DOUBLE PRECISION, n NUMERIC(12, 2));
INSERT INTO t1 VALUES (4.25, 4.25), (-4.25, -4.25);
CREATE TABLE t2 AS SELECT SIGN(d) AS d, SIGN(n) AS n FROM t1;
SELECT table_name, column_name, data_type FROM SVV_REDSHIFT_COLUMNS WHERE table_name='t1' OR table_name='t2';
 
+------------+-------------+-----------------------+
| table_name | column_name |       data_type       |
+------------+-------------+-----------------------+
| t1         | d           | double precision      |
| t1         | n           | numeric(12,2)         |
| t2         | d           | double precision      |
| t2         | n           | numeric(1,0)          |
| t1         | col1        | character varying(20) |
+------------+-------------+-----------------------+
```

L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour déterminer le signe de la commission payée pour une transaction donnée à partir de la table SALES, utilisez l’exemple suivant. 

```
SELECT commission, SIGN(commission)
FROM sales WHERE salesid=10000;

+------------+------+
| commission | sign |
+------------+------+
|      28.05 |    1 |
+------------+------+
```

# Fonction SQRT
<a name="r_SQRT"></a>

 La fonction SQRT renvoie la racine carrée d’une valeur `NUMERIC`. La racine carrée est un nombre multiplié par lui-même pour obtenir la valeur donnée.

## Syntaxe
<a name="r_SQRT-synopsis"></a>

```
SQRT(expression)
```

## Argument
<a name="r_SQRT-argument"></a>

 *expression*   
L’expression doit avoir un type de données `INTEGER`, `DECIMAL` ou `FLOAT`, ou un type de données qui est implicitement converti vers ces types de données. L’*expression* peut inclure des fonctions. 

## Type de retour
<a name="r_SQRT-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_SQRT-examples"></a>

Pour renvoyer la racine carrée de 16, utilisez l’exemple suivant. 

```
SELECT SQRT(16);
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

Pour renvoyer la racine carrée de la chaîne `16` en utilisant une conversion de type implicite, utilisez l’exemple suivant. 

```
SELECT SQRT('16');
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

Pour renvoyer la racine carrée de 16,4 après avoir utilisé la fonction ROUND, utilisez l’exemple suivant. 

```
SELECT SQRT(ROUND(16.4));
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

Pour renvoyer le rayon lorsque l’aire du cercle est donnée, utilisez l’exemple suivant. Il calcule le rayon en pouces, par exemple, lorsque la surface est indiquée en pouces carrés. Dans l’exemple, l’aire est de 20. 

```
SELECT SQRT(20/PI()) AS radius;
               
+--------------------+
|      radius        |
+--------------------+
| 2.5231325220201604 |
+--------------------+
```

Les exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour renvoyer la racine carrée des valeurs de COMMISSION de la table SALES, utilisez l’exemple suivant. La colonne COMMISSION est une colonne `DECIMAL`. Cet exemple montre comment utiliser la fonction dans une requête ayant une logique conditionnelle plus complexe. 

```
SELECT SQRT(commission)
FROM sales WHERE salesid < 10 ORDER BY salesid;

+--------------------+
|        sqrt        |
+--------------------+
| 10.449880382090505 |
| 3.3763886032268267 |
|  7.245688373094719 |
|  5.123475382979799 |
|  4.806245936279167 |
|  7.687652437513028 |
| 10.871982339941507 |
| 5.4359911699707535 |
|   9.41541289588513 |
+--------------------+
```

Pour renvoyer la racine carré arrondie du même ensemble de valeurs COMMISSION, utilisez l’exemple suivant. 

```
SELECT ROUND(SQRT(commission))
FROM sales WHERE salesid < 10 ORDER BY salesid;

+-------+
| round |
+-------+
|    10 |
|     3 |
|     7 |
|     5 |
|     5 |
|     8 |
|    11 |
|     5 |
|     9 |
+-------+
```

# Fonction TAN
<a name="r_TAN"></a>

TAN est une fonction trigonométrique qui renvoie la tangente d’un nombre. L’argument d’entrée est un nombre (en radians). 

## Syntaxe
<a name="r_TAN-synopsis"></a>

```
TAN(number)
```

## Argument
<a name="r_TAN-argument"></a>

 *number*   
Nombre `DOUBLE PRECISION`. 

## Type de retour
<a name="r_TAN-return-type"></a>

`DOUBLE PRECISION`

## Exemples
<a name="r_TAN-examples"></a>

Pour renvoyer la tangente de zéro, utilisez l’exemple suivant. 

```
SELECT TAN(0);

+-----+
| tan |
+-----+
|   0 |
+-----+
```

# Fonction TRUNC
<a name="r_TRUNC"></a>

La fonction TRUNC tronque les nombres à l’entier ou à la décimale précédente. 

La fonction TRUNC peut éventuellement inclure un second argument sous forme d’`INTEGER` pour indiquer le nombre de décimales pour l’arrondi, dans les deux sens. Lorsque vous ne fournissez pas le second argument, la fonction arrondit au nombre entier le plus proche. Lorsque le second argument *integer* est spécifié, la fonction arrondit au nombre le plus proche avec une précision de *integer* décimales. 

 Cette fonction peut également tronquer une valeur `TIMESTAMP` et renvoyer une valeur `DATE`. Pour plus d’informations, consultez [Fonction TRUNC](r_TRUNC_date.md).

## Syntaxe
<a name="r_TRUNC-synopsis"></a>

```
TRUNC(number [ , integer ])
```

## Arguments
<a name="r_TRUNC-arguments"></a>

 *number*   
Nombre ou expression ayant pour valeur un nombre. Il peut être de type `DECIMAL`, `FLOAT8` ou `SUPER`. D’autres types de données peuvent être convertis par Amazon Redshift via les règles de conversion implicites. 

 *integer*  
(Facultatif) `INTEGER` qui indique le nombre de décimales de précision, dans les deux sens. Si aucun *nombre entier* n’est fourni, le nombre est tronqué en tant que nombre entier ; si un *nombre entier* est spécifié, le nombre est tronqué à la décimale spécifiée. Ceci n’est pas pris en charge pour le type de données `SUPER`.

## Type de retour
<a name="r_TRUNC-return-type"></a>

TRUNC renvoie le même type de données numérique que celui du *nombre* en entrée. 

Quand l’entrée est de type `SUPER`, la sortie conserve le même type dynamique que l’entrée, tandis que le type statique reste le type `SUPER`. Quand le type dynamique de `SUPER` n’est pas un nombre, Amazon Redshift renvoie `NULL`.

## Exemples
<a name="r_TRUNC-examples"></a>

Certains des exemples suivants utilisent l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour tronquer la commission payée pour une transaction de vente donnée, utilisez l’exemple suivant. 

```
SELECT commission, TRUNC(commission)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 |   111 |
+------------+-------+
```

Pour tronquer la même valeur de commission que la première décimale, utilisez l’exemple suivant. 

```
SELECT commission, TRUNC(commission,1)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 | 111.1 |
+------------+-------+
```

Pour tronquer la commission avec une valeur négative pour le deuxième argument, utilisez l’exemple suivant. Notez que `111.15` est arrondi vers le bas à `110`. 

```
SELECT commission, TRUNC(commission,-1)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 |   110 |
+------------+-------+
```

# Fonctions d’objet
<a name="Object_Functions"></a>

Voici les fonctions d'objet SQL prises en charge par Amazon Redshift pour créer et exploiter des objets de type SUPER :

**Topics**
+ [Fonction GET\$1NUMBER\$1ATTRIBUTES](get_number_attributes.md)
+ [Fonction LOWER\$1ATTRIBUTE\$1NAMES](r_lower_attribute_names.md)
+ [Fonction OBJECT](r_object_function.md)
+ [Fonction OBJECT\$1TRANSFORM](r_object_transform_function.md)
+ [Fonction UPPER\$1ATTRIBUTE\$1NAMES](r_upper_attribute_names.md)

# Fonction GET\$1NUMBER\$1ATTRIBUTES
<a name="get_number_attributes"></a>

Renvoie le nombre de paires clé-valeur existant au niveau racine d'un objet de dictionnaire.

## Syntaxe
<a name="get_number_attributes-syntax"></a>

```
GET_NUMBER_ATTRIBUTES( super_expression )
```

## Arguments
<a name="get_number_attributes-arguments"></a>

 *super\$1expression*   
Une super expression de la forme d'un dictionnaire.

## Type de retour
<a name="get_number_attributes-return-type"></a>

La fonction GET\$1NUMBER\$1ATTRIBUTES renvoie un type INT.

## Remarque
<a name="get_number_attributes-note"></a>

Cette fonction ne compte que les attributs directs et n'inclut pas les paires dans les dictionnaires imbriqués.

## Exemple
<a name="get_number_attributes-example"></a>

L'exemple suivant montre la fonction GET\$1NUMBER\$1ATTRIBUTES.

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": 2, "c": 3}'));
 get_number_attributes
-----------------------
            3
(1 row)
```

La fonction GET\$1NUMBER\$1ATTRIBUTES ne fonctionne qu'au premier niveau du dictionnaire.

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": {"c": 3}}'));
 get_number_attributes
-----------------------
            2
(1 row)
```

# Fonction LOWER\$1ATTRIBUTE\$1NAMES
<a name="r_lower_attribute_names"></a>

Convertit tous les noms d’attributs applicables dans une valeur SUPER en minuscules, en utilisant la même routine de conversion majuscules/minuscules que [Fonction LOWER](r_LOWER.md). LOWER\$1ATTRIBUTE\$1NAMES prend en charge les caractères à plusieurs octets UTF-8, à concurrence de quatre octets au maximum par caractère. 

 Pour convertir les noms d’attributs SUPER en majuscules, utilisez [Fonction UPPER\$1ATTRIBUTE\$1NAMES](r_upper_attribute_names.md). 

## Syntaxe
<a name="r_lower_attribute_names-synopsis"></a>

```
LOWER_ATTRIBUTE_NAMES( super_expression )
```

## Arguments
<a name="r_lower_attribute_names-arguments"></a>

*super\$1expression*  
Une expression SUPER.

## Type de retour
<a name="r_lower_attribute_names-return-type"></a>

`SUPER`

## Notes d’utilisation
<a name="r_lower_attribute_names-usage-notes"></a>

Dans Amazon Redshift, les identifiants de colonne ne font généralement pas la distinction entre majuscules et minuscules et sont convertis en minuscules. Si vous ingérez des données provenant de formats de données sensibles à la casse, tels que JSON, les données peuvent contenir des noms d’attributs composés de majuscules et de minuscules.

Prenez l’exemple de code suivant.

```
CREATE TABLE t1 (s) AS SELECT JSON_PARSE('{"AttributeName": "Value"}');


SELECT s.AttributeName FROM t1;  

attributename
-------------
NULL


SELECT s."AttributeName" FROM t1;

attributename
-------------
NULL
```

Amazon Redshift renvoie la valeur NULL pour les deux requêtes. Pour interroger `AttributeName`, utilisez LOWER\$1ATTRIBUTE\$1NAMES pour convertir les noms des attributs des données en minuscules. Prenez l’exemple de code suivant.

```
CREATE TABLE t2 (s) AS SELECT LOWER_ATTRIBUTE_NAMES(s) FROM t1;


SELECT s.attributename FROM t2;

attributename
-------------
"Value"


SELECT s.AttributeName FROM t2; 

attributename
-------------
"Value"


SELECT s."attributename" FROM t2;

attributename
-------------
"Value"


SELECT s."AttributeName" FROM t2;

attributename
-------------
"Value"
```

L’option de configuration `enable_case_sensitive_super_attribute` est une option connexe pour travailler avec des noms d’attributs d’objets en majuscules et minuscules. Elle permet à Amazon Redshift de reconnaître les majuscules dans les noms d’attributs SUPER. Cela peut être une solution alternative à l’utilisation de LOWER\$1ATTRIBUTE\$1NAMES. Pour plus d’informations sur `enable_case_sensitive_super_attribute`, consultez [enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md).

## Exemples
<a name="r_lower_attribute_names_examples"></a>

**Conversion des noms d’attributs SUPER en minuscules**  
L’exemple suivant utilise LOWER\$1ATTRIBUTE\$1NAMES pour convertir les noms d’attribut de toutes les valeurs SUPER d’une table.

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'A'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "B"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"C": "C"},
        "Subarray": [{"D": "D"}, "E"]
      }]'));

-- Convert all attribute names to lowercase.
UPDATE t SET s = LOWER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "A"
 3 | {"attributename":"B"}
 4 | [{"subobject":{"c":"C"},"subarray":[{"d":"D"}, "E"]}]
```

Observez le fonctionnement de LOWER\$1ATTRIBUTE\$1NAMES.
+  Les valeurs NULL et les valeurs scalaires SUPER telles que `"A"` restent inchangées. 
+  Dans un objet SUPER, tous les noms d’attributs sont remplacés par des minuscules, mais les valeurs d’attributs tels que `"B"` restent inchangés. 
+  LOWER\$1ATTRIBUTE\$1NAMES s’applique de manière récursive à tout objet SUPER imbriqué dans un tableau SUPER ou dans un autre objet. 

**Utilisation de LOWER\$1ATTRIBUTE\$1NAMES sur un objet SUPER avec des noms d’attributs dupliqués**  
Si un objet SUPER contient des attributs dont les noms ne diffèrent que dans leur cas, LOWER\$1ATTRIBUTE\$1NAMES générera une erreur. Prenez l’exemple de code suivant.

```
SELECT LOWER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```

# Fonction OBJECT
<a name="r_object_function"></a>

Crée un tableau du type de données SUPER.

## Syntaxe
<a name="r_object_function-synopsis"></a>

```
OBJECT ( [ key1, value1 ], [ key2, value2 ...] )
```

## Arguments
<a name="r_object_function-arguments"></a>

*key1, key2* (clé 1, clé 2)  
Expressions qui évaluent des chaînes de type VARCHAR.

*value1, value2*  
Expressions de n’importe quel type de données Amazon Redshift à l’exception des types datetime, car Amazon Redshift ne convertit pas les types datetime en type de données SUPER. Pour obtenir plus d’informations sur les types datetime, consultez [Types datetime](r_Datetime_types.md).  
Les expressions `value` dans un objet ne doivent pas nécessairement appartenir au même type de données.

## Type de retour
<a name="r_object_function-returns"></a>

`SUPER`

## Exemple
<a name="r_object_function_example"></a>

```
-- Creates an empty object.
select object();

object
--------
{}
(1 row)
            
-- Creates objects with different keys and values.
select object('a', 1, 'b', true, 'c', 3.14);

object
---------------------------
{"a":1,"b":true,"c":3.14}
(1 row)
               
select object('a', object('aa', 1), 'b', array(2,3), 'c', json_parse('{}'));
               
object
---------------------------------
{"a":{"aa":1},"b":[2,3],"c":{}}
(1 row)
            
-- Creates objects using columns from a table.
create table bar (k varchar, v super);
insert into bar values ('k1', json_parse('[1]')), ('k2', json_parse('{}'));
select object(k, v) from bar;

object
------------
{"k1":[1]}
{"k2":{}}
(2 rows)
            
-- Errors out because DATE type values can't be converted to SUPER type.
select object('k', '2008-12-31'::date);

ERROR:  OBJECT could not convert type date to super
```

# Fonction OBJECT\$1TRANSFORM
<a name="r_object_transform_function"></a>

Transforme un objet SUPER.

## Syntaxe
<a name="r_object_transform_function-synopsis"></a>

```
OBJECT_TRANSFORM(
  input
  [KEEP path1, ...]
  [SET
    path1, value1,
    ...,  ...
  ]
)
```

## Arguments
<a name="r_object_transform_function-arguments"></a>

*input*  
Expression qui se résout en un objet de type SUPER.

*KEEP*  
Toutes les valeurs de *chemin* spécifiées dans cette clause sont conservées et transférées vers l’objet de sortie.  
Cette clause est facultative.

*path1*, *path2*, ...  
Litéraux de chaîne constants, au format de composants de chemin entre guillemets doubles délimités par des points. Par exemple, `'"a"."b"."c"'` est une valeur de chemin valide. Ceci s’applique au paramètre path dans les clauses KEEP et SET.

*SET*  
paires *path* et *value* permettant de modifier un chemin existant ou d’ajouter un nouveau chemin, et définir la valeur de celui-ci dans l’objet de sortie.  
Cette clause est facultative.

*value1*, *value2*, ...  
Expressions qui se résolvent en valeurs de type SUPER. Notez que les types numeric, text et boolean peuvent être résolus en SUPER.

## Type de retour
<a name="r_object_transform_function-returns"></a>

`SUPER`

## Notes d’utilisation
<a name="r_object_transform_function-usage-notes"></a>

OBJECT\$1TRANSFORM renvoie un objet de type SUPER contenant les valeurs de chemin provenant de *input* spécifiées dans KEEP et les paires *path* *value* spécifiées dans SET. 

Si KEEP et SET sont vides, OBJECT\$1TRANSFORM renvoie *input*.

Si *input* n’est pas un objet (*object*) de type SUPER, OBJECT\$1TRANSFORM renvoie *input*, quelles que soient les valeurs KEEP ou SET.

## Exemple
<a name="r_object_transform_function-example"></a>

L’exemple suivant transforme un objet SUPER en un autre objet SUPER.

```
CREATE TABLE employees (
    col_person SUPER
);

INSERT INTO employees
VALUES
    (
        json_parse('
            {
                "name": {
                    "first": "John",
                    "last": "Doe"
                },
                "age": 25,
                "ssn": "111-22-3333",
                "company": "Company Inc.",
                "country": "U.S."
            }
        ')
    ),
    (
        json_parse('
            {
                "name": {
                    "first": "Jane",
                    "last": "Appleseed"
                },
                "age": 34,
                "ssn": "444-55-7777",
                "company": "Organization Org.",
                "country": "Ukraine"
            }
        ')
    )
;

SELECT
    OBJECT_TRANSFORM(
        col_person
        KEEP
            '"name"."first"',
            '"age"',
            '"company"',
            '"country"'
        SET
            '"name"."first"', UPPER(col_person.name.first::TEXT),
            '"age"', col_person.age + 5,
            '"company"', 'Amazon'
    ) AS col_person_transformed
FROM employees;
    
--This result is formatted for ease of reading.
                  col_person_transformed
-------------------------------------------------------------
{
    "name": {
        "first": "JOHN"
    },
    "age": 30,
    "company": "Amazon",
    "country": "U.S."
}
{
    "name": {
        "first": "JANE"
    },
    "age": 39,
    "company": "Amazon",
    "country": "Ukraine"
}
```

# Fonction UPPER\$1ATTRIBUTE\$1NAMES
<a name="r_upper_attribute_names"></a>

Convertit tous les noms d’attributs applicables dans une valeur SUPER en majuscules, en utilisant la même routine de conversion majuscules/minuscules que [Fonction UPPER](r_UPPER.md). UPPER\$1ATTRIBUTE\$1NAMES prend en charge les caractères à plusieurs octets UTF-8, à concurrence de quatre octets au maximum par caractère. 

 Pour convertir les noms d’attributs SUPER en minuscules, utilisez [Fonction LOWER\$1ATTRIBUTE\$1NAMES](r_lower_attribute_names.md). 

## Syntaxe
<a name="r_upper_attribute_names-synopsis"></a>

```
UPPER_ATTRIBUTE_NAMES( super_expression )
```

## Arguments
<a name="r_upper_attribute_names-arguments"></a>

*super\$1expression*  
Une expression SUPER.

## Type de retour
<a name="r_upper_attribute_names-return-type"></a>

`SUPER`

## Exemples
<a name="r_upper_attribute_names_examples"></a>

**Conversion des noms d’attributs SUPER en majuscules**  
L’exemple suivant utilise UPPER\$1ATTRIBUTE\$1NAMES pour convertir les noms d’attribut de toutes les valeurs SUPER d’une table.

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'a'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "b"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"c": "c"},
        "Subarray": [{"d": "d"}, "e"]
      }]'));

-- Convert all attribute names to uppercase.
UPDATE t SET s = UPPER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "a"
 3 | {"ATTRIBUTENAME":"B"}
 4 | [{"SUBOBJECT":{"C":"c"},"SUBARRAY":[{"D":"d"}, "e"]}]
```

Observez le fonctionnement de UPPER\$1ATTRIBUTE\$1NAMES.
+  Les valeurs NULL et les valeurs scalaires SUPER telles que `"a"` restent inchangées. 
+  Dans un objet SUPER, tous les noms d’attributs sont remplacés par des majuscules, mais les valeurs d’attributs tels que `"b"` restent inchangés. 
+  UPPER\$1ATTRIBUTE\$1NAMES s’applique de manière récursive à tout objet SUPER imbriqué dans un tableau SUPER ou dans un autre objet. 

**Utilisation de UPPER\$1ATTRIBUTE\$1NAMES sur un objet SUPER avec des noms d’attributs dupliqués**  
Si un objet SUPER contient des attributs dont les noms ne diffèrent que dans leur cas, UPPER\$1ATTRIBUTE\$1NAMES générera une erreur. Prenez l’exemple de code suivant.

```
SELECT UPPER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```

# Fonctions spatiales
<a name="geospatial-functions"></a>

Les relations entre les objets de géométrie sont basées sur le modèle DE-9IM (Dimensionally Extended nine-Intersection Model). Ce modèle définit des prédicats tels que est égal à, contient et couvre. Pour plus d’informations sur la définition des relations spatiales, consultez [DE-9IM](https://en.wikipedia.org/wiki/DE-9IM) dans Wikipedia.

Pour plus d’informations sur l’utilisation des données spatiales avec Amazon Redshift, consultez [Interrogation des données spatiales dans Amazon Redshift](geospatial-overview.md).

Amazon Redshift fournit des fonctions spatiales qui fonctionnent avec les types de données `GEOMETRY` et `GEOGRAPHY`. La liste suivante répertorie les fonctions qui prennent en charge le type de données `GEOGRAPHY` :
+ [ST\$1Area](ST_Area-function.md)
+ [ST\$1AsEWKT](ST_AsEWKT-function.md)
+ [ST\$1JSON AsGeo](ST_AsGeoJSON-function.md)
+ [ST\$1WEBB AsHex](ST_AsHexEWKB-function.md)
+ [ST\$1WKB AsHex](ST_AsHexWKB-function.md)
+ [ST\$1 AsText](ST_AsText-function.md)
+ [ST\$1Distance](ST_Distance-function.md)
+ [ST\$1 GeogFromText](ST_GeogFromText-function.md)
+ [ST\$1WKB GeogFrom](ST_GeogFromWKB-function.md)
+ [ST\$1Length](ST_Length-function.md)
+ [ST\$1 NPoints](ST_NPoints-function.md)
+ [ST\$1Perimeter](ST_Perimeter-function.md)

La liste suivante répertorie l’ensemble complet des fonctions spatiales prises en charge par Amazon Redshift. 

**Topics**
+ [Ajouter BBox](AddBBox-function.md)
+ [Lâchez BBox](DropBBox-function.md)
+ [GeometryType](GeometryType-function.md)
+ [H3\$1Boundary](H3_Boundary-function.md)
+ [H3\$1Center](H3_Center-function.md)
+ [H3\$1 FromLongLat](H3_FromLongLat-function.md)
+ [H3\$1 FromPoint](H3_FromPoint-function.md)
+ [H3\$1 IsValid](H3_IsValid-function.md)
+ [H3\$1Polyfill](H3_Polyfill-function.md)
+ [Résolution H3\$1](H3_Resolution-function.md)
+ [H3\$1 ToChildren](H3_ToChildren-function.md)
+ [H3\$1 ToParent](H3_ToParent-function.md)
+ [ST\$1 AddPoint](ST_AddPoint-function.md)
+ [ST\$1Angle](ST_Angle-function.md)
+ [ST\$1Area](ST_Area-function.md)
+ [ST\$1 AsBinary](ST_AsBinary-function.md)
+ [ST\$1AsEWKB](ST_AsEWKB-function.md)
+ [ST\$1AsEWKT](ST_AsEWKT-function.md)
+ [ST\$1JSON AsGeo](ST_AsGeoJSON-function.md)
+ [ST\$1WKB AsHex](ST_AsHexWKB-function.md)
+ [ST\$1WEBB AsHex](ST_AsHexEWKB-function.md)
+ [ST\$1 AsText](ST_AsText-function.md)
+ [ST\$1Azimuth](ST_Azimuth-function.md)
+ [ST\$1Boundary](ST_Boundary-function.md)
+ [ST\$1Buffer](ST_Buffer-function.md)
+ [ST\$1Centroid](ST_Centroid-function.md)
+ [ST\$1Collect](ST_Collect-function.md)
+ [ST\$1Contains](ST_Contains-function.md)
+ [ST\$1 ContainsProperly](ST_ContainsProperly-function.md)
+ [ST\$1 ConvexHull](ST_ConvexHull-function.md)
+ [ST\$1 CoveredBy](ST_CoveredBy-function.md)
+ [ST\$1Covers](ST_Covers-function.md)
+ [ST\$1Crosses](ST_Crosses-function.md)
+ [ST\$1Dimension](ST_Dimension-function.md)
+ [ST\$1Disjoint](ST_Disjoint-function.md)
+ [ST\$1Distance](ST_Distance-function.md)
+ [ST\$1 DistanceSphere](ST_DistanceSphere-function.md)
+ [ST\$1 DWithin](ST_DWithin-function.md)
+ [ST\$1 EndPoint](ST_EndPoint-function.md)
+ [ST\$1Enveloppe](ST_Envelope-function.md)
+ [ST\$1Equals](ST_Equals-function.md)
+ [ST\$1 ExteriorRing](ST_ExteriorRing-function.md)
+ [ST\$1Force2D](ST_Force2D-function.md)
+ [ST\$1Force3D](ST_Force3D-function.md)
+ [ST\$1Force3DM](ST_Force3DM-function.md)
+ [ST\$1Force3DZ](ST_Force3DZ-function.md)
+ [ST\$1Force4D](ST_Force4D-function.md)
+ [ST\$1 GeoHash](ST_GeoHash-function.md)
+ [ST\$1 GeogFromText](ST_GeogFromText-function.md)
+ [ST\$1WKB GeogFrom](ST_GeogFromWKB-function.md)
+ [ST\$1GeometryN](ST_GeometryN-function.md)
+ [ST\$1 GeometryType](ST_GeometryType-function.md)
+ [ST\$1WEBB GeomFrom](ST_GeomFromEWKB-function.md)
+ [ST\$1EWKT GeomFrom](ST_GeomFromEWKT-function.md)
+ [ST\$1 GeomFromGeoHash](ST_GeomFromGeoHash-function.md)
+ [ST\$1JSON GeomFromGeo](ST_GeomFromGeoJSON-function.md)
+ [ST\$1 GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md)
+ [ST\$1 GeomFromText](ST_GeomFromText-function.md)
+ [ST\$1WKB GeomFrom](ST_GeomFromWKB-function.md)
+ [ST\$1 GeoSquare](ST_GeoSquare-function.md)
+ [ST\$1N InteriorRing](ST_InteriorRingN-function.md)
+ [ST\$1Intersects](ST_Intersects-function.md)
+ [ST\$1Intersection](ST_Intersection-function.md)
+ [ST\$1CCW IsPolygon](ST_IsPolygonCCW-function.md)
+ [ST\$1CW IsPolygon](ST_IsPolygonCW-function.md)
+ [ST\$1 IsClosed](ST_IsClosed-function.md)
+ [ST\$1 IsCollection](ST_IsCollection-function.md)
+ [ST\$1 IsEmpty](ST_IsEmpty-function.md)
+ [ST\$1 IsRing](ST_IsRing-function.md)
+ [ST\$1 IsSimple](ST_IsSimple-function.md)
+ [ST\$1 IsValid](ST_IsValid-function.md)
+ [ST\$1Length](ST_Length-function.md)
+ [ST\$1 LengthSphere](ST_LengthSphere-function.md)
+ [ST\$1Length2D](ST_Length2D-function.md)
+ [ST\$1 LineFromMultiPoint](ST_LineFromMultiPoint-function.md)
+ [ST\$1 LineInterpolatePoint](ST_LineInterpolatePoint-function.md)
+ [ST\$1M](ST_M-function.md)
+ [ST\$1 MakeEnvelope](ST_MakeEnvelope-function.md)
+ [ST\$1 MakeLine](ST_MakeLine-function.md)
+ [ST\$1 MakePoint](ST_MakePoint-function.md)
+ [ST\$1 MakePolygon](ST_MakePolygon-function.md)
+ [ST\$1 MemSize](ST_MemSize-function.md)
+ [ST\$1 MMax](ST_MMax-function.md)
+ [ST\$1 MMin](ST_MMin-function.md)
+ [ST\$1Multi](ST_Multi-function.md)
+ [ST\$1 NDims](ST_NDims-function.md)
+ [ST\$1 NPoints](ST_NPoints-function.md)
+ [ST\$1 NRings](ST_NRings-function.md)
+ [ST\$1 NumGeometries](ST_NumGeometries-function.md)
+ [ST\$1 NumInteriorRings](ST_NumInteriorRings-function.md)
+ [ST\$1 NumPoints](ST_NumPoints-function.md)
+ [ST\$1Perimeter](ST_Perimeter-function.md)
+ [ST\$1Perimeter2D](ST_Perimeter2D-function.md)
+ [ST\$1Point](ST_Point-function.md)
+ [ST\$1PointN](ST_PointN-function.md)
+ [ST\$1Points](ST_Points-function.md)
+ [ST\$1Polygon](ST_Polygon-function.md)
+ [ST\$1 RemovePoint](ST_RemovePoint-function.md)
+ [ST\$1Reverse](ST_Reverse-function.md)
+ [ST\$1 SetPoint](ST_SetPoint-function.md)
+ [ST\$1SetSRID](ST_SetSRID-function.md)
+ [ST\$1Simplify](ST_Simplify-function.md)
+ [ST\$1SRID](ST_SRID-function.md)
+ [ST\$1 StartPoint](ST_StartPoint-function.md)
+ [ST\$1Touches](ST_Touches-function.md)
+ [ST\$1Transform](ST_Transform-function.md)
+ [ST\$1Union](ST_Union-function.md)
+ [ST\$1Within](ST_Within-function.md)
+ [ST\$1X](ST_X-function.md)
+ [ST\$1 XMax](ST_XMax-function.md)
+ [ST\$1 XMin](ST_XMin-function.md)
+ [ST\$1Y](ST_Y-function.md)
+ [ST\$1 YMax](ST_YMax-function.md)
+ [ST\$1 YMin](ST_YMin-function.md)
+ [ST\$1Z](ST_Z-function.md)
+ [ST\$1 ZMax](ST_ZMax-function.md)
+ [ST\$1 ZMin](ST_ZMin-function.md)
+ [Supports BBox](SupportsBBox-function.md)

# Ajouter BBox
<a name="AddBBox-function"></a>

Add BBox renvoie une copie de la géométrie d'entrée qui prend en charge le codage avec un cadre de délimitation précalculé. Pour plus d’informations sur la prise en charge des cadres de délimitation, consultez [Cadre de délimitation](spatial-terminology.md#spatial-terminology-bounding-box).

## Syntaxe
<a name="AddBBox-function-syntax"></a>

```
AddBBox(geom)
```

## Arguments
<a name="AddBBox-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="AddBBox-function-return"></a>

`GEOMETRY`

Si *geom* est null, null est renvoyé.

## Exemples
<a name="AddBBox-function-examples"></a>

Le code SQL suivant renvoie une copie d’une géométrie de polygone en entrée qui prend en charge l’encodage avec un cadre de délimitation. 

```
SELECT ST_AsText(AddBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
 st_astext
----------
 POLYGON((0 0,1 0,0 1,0 0))
```

# Lâchez BBox
<a name="DropBBox-function"></a>

Drop BBox renvoie une copie de la géométrie d'entrée qui ne prend pas en charge le codage avec un cadre de délimitation précalculé. Pour plus d’informations sur la prise en charge des cadres de délimitation, consultez [Cadre de délimitation](spatial-terminology.md#spatial-terminology-bounding-box).

## Syntaxe
<a name="DropBBox-function-syntax"></a>

```
DropBBox(geom)
```

## Arguments
<a name="DropBBox-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="DropBBox-function-return"></a>

`GEOMETRY`

Si *geom* est null, null est renvoyé.

## Exemples
<a name="DropBBox-function-examples"></a>

Le code SQL suivant renvoie une copie d’une géométrie de polygone en entrée qui ne prend pas en charge l’encodage avec un cadre de délimitation. 

```
SELECT ST_AsText(DropBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
 st_astext
----------
 POLYGON((0 0,1 0,0 1,0 0))
```

# GeometryType
<a name="GeometryType-function"></a>

GeometryType renvoie le sous-type d'une géométrie d'entrée sous forme de chaîne. 

## Syntaxe
<a name="GeometryType-function-syntax"></a>

```
GeometryType(geom)
```

## Arguments
<a name="GeometryType-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="GeometryType-function-return"></a>

`VARCHAR` représentant le sous-type de *geom*. 

Si *geom* est null, null est renvoyé. 

Les valeurs renvoyées sont comme suit :


| Valeur de chaîne renvoyée pour les géométries 2D, 3DZ, 4D | Valeur de chaîne renvoyée pour les géométries 3DM | Sous-type de géométrie | 
| --- | --- | --- | 
| `POINT` | `POINTM` | Renvoyé si *geom* est un sous-type `POINT`  | 
| `LINESTRING` | `LINESTRINGM` | Renvoyé si *geom* est un sous-type `LINESTRING`  | 
| `POLYGON` | `POLYGONM` | Renvoyé si *geom* est un sous-type `POLYGON`  | 
| `MULTIPOINT` | `MULTIPOINTM` | Renvoyé si *geom* est un sous-type `MULTIPOINT`  | 
| `MULTILINESTRING` | `MULTILINESTRINGM` | Renvoyé si *geom* est un sous-type `MULTILINESTRING`  | 
| `MULTIPOLYGON` | `MULTIPOLYGONM` | Renvoyé si *geom* est un sous-type `MULTIPOLYGON`  | 
| `GEOMETRYCOLLECTION` | `GEOMETRYCOLLECTIONM` | Renvoyé si *geom* est un sous-type `GEOMETRYCOLLECTION`  | 

## Exemples
<a name="GeometryType-function-examples"></a>

Le SQL suivant convertit une représentation WKT d’un polygone et renvoie le sous-type `GEOMETRY` sous forme de chaîne.

```
SELECT GeometryType(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
geometrytype
-------------
 POLYGON
```

# H3\$1Boundary
<a name="H3_Boundary-function"></a>

H3\$1Boundary renvoie la limite d’un ID de cellule H3 à partir d’un index d’entrée. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_Boundary-function-syntax"></a>

```
H3_Boundary(index)
```

## Arguments
<a name="H3_Boundary-function-arguments"></a>

 *index*   
Valeur de type de données `BIGINT` ou `VARCHAR` qui représente l’index d’une cellule H3. Ou une expression ayant pour valeur l’un de ces types de données.

## Type de retour
<a name="H3_Boundary-function-return"></a>

`POLYGON` – représente le polygone avec l’identifiant de système de référence spatiale (SRID) de `0`.

Si *index* n’est pas valide, une erreur est renvoyée.

## Exemples
<a name="H3_Boundary-function-examples"></a>

Le code SQL suivant saisit un `VARCHAR` qui représente l’index d’une cellule H3 et renvoie un POLYGON avec un SRID 0 qui représente la limite de la cellule H3 en entrée. La sortie de H3\$1Boundary est entrée dans ST\$1AWEWKT pour être affichée en représentation de texte connu étendu (EWKT).

```
SELECT ST_AsEWKT(H3_Boundary('8025fffffffffff'));
```

```
 st_asewkt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POLYGON((87.7729641223953 52.6542030078627,86.7082098104731 40.3127667561966,98.2285042557705 33.6210697806835,110.694610548823 37.163896485796,116.212895637138 47.3094513028131,106.40349563788 56.210610737585,87.7729641223953 52.6542030078627))
```

Le code SQL suivant saisit un `BIGINT` qui représente l’index d’une cellule H3 et renvoie un POLYGON avec un SRID 0 qui représente la limite de la cellule H3 en entrée. La sortie de H3\$1Boundary est entrée dans ST\$1AWEWKT pour être affichée en représentation de texte connu étendu (EWKT).

```
SELECT ST_AsEWKT(H3_Boundary(577129255373111295)); 
```

```
 st_asewkt
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POLYGON((87.7729641223953 52.6542030078627,86.7082098104731 40.3127667561966,98.2285042557705 33.6210697806835,110.694610548823 37.163896485796,116.212895637138 47.3094513028131,106.40349563788 56.210610737585,87.7729641223953 52.6542030078627))
```

# H3\$1Center
<a name="H3_Center-function"></a>

H3\$1Center renvoie le centroïde d’un ID de cellule H3 à partir d’un index d’entrée. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_Center-function-syntax"></a>

```
H3_Center(index)
```

## Arguments
<a name="H3_Center-function-arguments"></a>

 *index*   
Valeur de type de données `BIGINT` ou `VARCHAR` qui représente l’index d’une cellule H3. Ou une expression ayant pour valeur l’un de ces types de données.

## Type de retour
<a name="H3_Center-function-return"></a>

`POINT` – représente le centroïde de la cellule H3 avec l’identifiant de système de référence spatiale (SRID) de `0`.

Si *index* n’est pas valide, une erreur est renvoyée.

## Exemples
<a name="H3_Center-function-examples"></a>

Le code SQL suivant saisit un `VARCHAR` qui représente l’index d’une cellule H3 et renvoie un POINT avec un SRID de 0 qui représente le centroïde de la cellule H3 en entrée.

```
SELECT H3_Center('8025fffffffffff');
```

```
 h3_center
--------------------------------------------
 010100000070707A550B605940AEE9D70B327E4640
```

Le code SQL suivant saisit un `BIGINT` qui représente l’index d’une cellule H3 et renvoie un POINT avec un SRID 0 qui représente le centroïde de la cellule H3 en entrée.

```
SELECT H3_Center(577129255373111295);
```

```
 h3_center
--------------------------------------------
 010100000070707A550B605940AEE9D70B327E4640
```

Le code SQL suivant saisit un `VARCHAR` qui représente l’index d’une cellule H3 et renvoie un POINT avec un SRID 0 qui représente le centroïde de la cellule H3 en entrée. La sortie de H3\$1Center est entrée dans ST\$1AWEWKT pour être affichée en représentation de texte connu étendu (EWKT).

```
SELECT ST_AsEWKT(H3_Center('8075fffffffffff'));
```

```
 st_asewkt
-----------------------------------------
POINT(-5.24539029677733 2.30088211162675)
```

# H3\$1 FromLongLat
<a name="H3_FromLongLat-function"></a>

H3\$1 FromLongLat renvoie l'ID de cellule H3 correspondant à partir d'une longitude, d'une latitude et d'une résolution entrées. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_FromLongLat-function-syntax"></a>

```
H3_FromLongLat(longitude, latitude, resolution)
```

## Arguments
<a name="H3_FromLongLat-function-arguments"></a>

 *longitude*   
Valeur de type de données `DOUBLE PRECISION` ou expression qui est évaluée sur un type `DOUBLE PRECISION`.

 *latitude*   
Valeur de type de données `DOUBLE PRECISION` ou expression qui est évaluée sur un type `DOUBLE PRECISION`.

 *resolution*   
Valeur de type de données `INTEGER` ou expression qui est évaluée sur un type `INTEGER`. La valeur représente la résolution du système de grille H3. La valeur doit être un entier compris entre 0 et 15. `0` étant la résolution la plus grossière et `15` la plus fine. 

## Type de retour
<a name="H3_FromLongLat-function-return"></a>

`BIGINT` : représente l’identifiant de la cellule H3.

Si l’argument *resolution* est hors limites, une erreur est renvoyée.

## Exemples
<a name="H3_FromLongLat-function-examples"></a>

Le code SQL suivant renvoie l’ID de cellule H3 à partir de la longitude `0`, de la latitude `0` et de la résolution `10`. 

```
SELECT H3_FromLongLat(0, 0, 10);
```

```
 h3_fromlonglat
-------------------
 623560421467684863
```

# H3\$1 FromPoint
<a name="H3_FromPoint-function"></a>

H3\$1 FromPoint renvoie l'ID de cellule H3 correspondant à partir d'un point de géométrie et d'une résolution en entrée. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_FromPoint-function-syntax"></a>

```
H3_FromPoint(geom, resolution)
```

## Arguments
<a name="H3_FromPoint-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. L’argument *geom* doit être un `POINT`.

 *resolution*   
Valeur de type de données `INTEGER` ou expression qui est évaluée sur un type `INTEGER`. La valeur représente la résolution du système de grille H3. La valeur doit être un entier compris entre 0 et 15. `0` étant la résolution la plus grossière et `15` la plus fine. 

## Type de retour
<a name="H3_FromPoint-function-return"></a>

`BIGINT` : représente l’identifiant de la cellule H3.

Si *geom* n’est pas une `POINT`, une erreur est renvoyée.

Si l’argument *resolution* est hors limites, une erreur est renvoyée.

Si *geom* est vide, la valeur NULL est renvoyée.

## Exemples
<a name="H3_FromPoint-function-examples"></a>

Le code SQL suivant renvoie l’ID de cellule H3 à partir du point `0,0` et de la résolution `10`. 

```
SELECT H3_FromPoint(ST_GeomFromText('POINT(0 0)'), 10);
```

```
 h3_frompoint
-------------------
 623560421467684863
```

# H3\$1 IsValid
<a name="H3_IsValid-function"></a>

H3\$1 IsValid renvoie true si l'entrée représente un identifiant de cellule H3, sinon false. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_IsValid-function-syntax"></a>

```
H3_IsValid(index)
```

## Arguments
<a name="H3_IsValid-function-arguments"></a>

 *index*   
Une valeur de type de données `BIGINT` ou `VARCHAR` une expression qui correspond à l'un de ces types de données.

## Type de retour
<a name="H3_IsValid-function-return"></a>

`BOOLEAN`— vrai si l'entrée représente un identifiant de cellule H3 valide, faux dans le cas contraire.

Si *l'index* est NULL, NULL est renvoyé.

## Exemples
<a name="H3_IsValid-function-examples"></a>

Le code SQL suivant saisit un VARCHAR qui représente un ID de cellule H3 et renvoie true.

```
SELECT H3_IsValid('8025fffffffffff');
```

```
 h3_isvalid
------------
 true
```

Le code SQL suivant saisit un BIGINT qui représente un ID de cellule H3 et renvoie true.

```
SELECT H3_IsValid(577129255373111295);
```

```
 h3_isvalid
------------
 true
```

Le code SQL suivant saisit un identifiant de cellule H3 non valide et renvoie false.

```
SELECT H3_IsValid('');
```

```
 h3_isvalid
------------
 false
```

# H3\$1Polyfill
<a name="H3_Polyfill-function"></a>

H3\$1Polyfill renvoie la cellule H3 correspondante IDs qui correspond aux hexagones et aux pentagones contenus dans le polygone d'entrée de la résolution donnée. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_Polyfill-function-syntax"></a>

```
H3_Polyfill(geom, resolution)
```

## Arguments
<a name="H3_Polyfill-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. L’argument *geom* doit être un `POLYGON`.

 *resolution*   
Valeur de type de données `INTEGER` ou expression qui est évaluée sur un type `INTEGER`. La valeur représente la résolution du système de grille H3. La valeur doit être un entier compris entre 0 et 15. `0` étant la résolution la plus grossière et `15` la plus fine. 

## Type de retour
<a name="H3_Polyfill-function-return"></a>

`SUPER`— représente une liste de cellules IDs H3.

Si *geom* n’est pas une `POLYGON`, une erreur est renvoyée.

Si l’argument *resolution* est hors limites, une erreur est renvoyée.

Si *geom* est vide, la valeur NULL est renvoyée.

## Exemples
<a name="H3_Polyfill-function-examples"></a>

Le code SQL suivant renvoie un tableau de types de données SUPER composé de cellules H3 IDs à partir d'un polygone et d'une résolution. `4` 

```
SELECT H3_Polyfill(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'), 4);
```

```
 h3_polyfill
----------------------------------------------------------------------------------------------------------------------------------------------------------
 [596538848238895103,596538805289222143,596538856828829695,596538813879156735,596537920525959167,596538685030137855,596538693620072447,596538839648960511]
```

# Résolution H3\$1
<a name="H3_Resolution-function"></a>

H3\$1Resolution renvoie la résolution d'un identifiant de cellule H3 à partir d'un index d'entrée. La résolution est un entier compris entre 0 (le plus grossier) et 15 (le plus fin). Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_Resolution-function-syntax"></a>

```
H3_Resolution(index)
```

## Arguments
<a name="H3_Resolution-function-arguments"></a>

 *index*   
Une valeur de type de données `BIGINT` ou `VARCHAR` qui représente l'index d'une cellule H3, ou une expression qui correspond à l'un de ces types de données.

## Type de retour
<a name="H3_Resolution-function-return"></a>

`INTEGER`— représente la résolution de l'ID de cellule H3 en entrée.

Si *l'index* est NULL, NULL est renvoyé.

Si *index* n’est pas valide, une erreur est renvoyée.

## Exemples
<a name="H3_Resolution-function-examples"></a>

Le code SQL suivant saisit un VARCHAR qui représente l'index d'une cellule H3 et renvoie un INTEGER qui représente la résolution de la cellule H3 en entrée.

```
SELECT H3_Resolution('8025fffffffffff');
```

```
 h3_resolution
---------------
 0
```

Le code SQL suivant saisit un BIGINT qui représente l'index d'une cellule H3 et renvoie un INTEGER qui représente la résolution de la cellule H3 en entrée.

```
SELECT H3_Resolution(614553222213795839);
```

```
 h3_resolution
---------------
 8
```

# H3\$1 ToChildren
<a name="H3_ToChildren-function"></a>

H3\$1 ToChildren renvoie une liste de cellules H3 enfants IDs à une résolution spécifiée pour un index H3 donné. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_ToChildren-function-syntax"></a>

```
H3_ToChildren(index, resolution)
```

## Arguments
<a name="H3_ToChildren-function-arguments"></a>

 *index*   
Une valeur de type de données `BIGINT` ou `VARCHAR` qui représente l'index d'une cellule H3, ou une expression qui correspond à l'un de ces types de données.

 *resolution*   
Valeur de type de données `INTEGER` ou expression qui est évaluée sur un type `INTEGER`. La valeur représente la résolution de la cellule enfant IDs. La valeur doit être un entier compris entre la résolution de l'*index* d'entrée et 15 inclus.

## Type de retour
<a name="H3_ToChildren-function-return"></a>

`SUPER`— représente une liste de cellules IDs H3.

Si *l'index* ou *la résolution* est NULL, NULL est renvoyé.

Si *index* n’est pas valide, une erreur est renvoyée.

Si *la résolution* n'est pas comprise entre la résolution de *l'index* et 15 inclus, une erreur est renvoyée.

Si la taille de sortie dépasse la limite maximale de taille SUPER, une erreur est renvoyée.

## Exemples
<a name="H3_ToChildren-function-examples"></a>

Le code SQL suivant saisit un VARCHAR qui représente l'index d'une cellule H3 et un INTEGER qui représente la résolution souhaitée pour tous les enfants, et renvoie un tableau SUPER contenant les enfants à la résolution 6.

```
SELECT H3_ToChildren('85283473fffffff', 6);
```

```
 h3_tochildren                                                
--------------------------------------------------------------------------------------------------------------------------------------
 [604189641121202175,604189641255419903,604189641389637631,604189641523855359,604189641658073087,604189641792290815,604189641926508543]
```

Le code SQL suivant saisit un BIGINT qui représente l'index d'une cellule H3 et un INTEGER qui représente la résolution souhaitée pour tous les enfants, et renvoie un tableau SUPER contenant les enfants à la résolution 6.

```
SELECT H3_ToChildren(599686042433355775, 6);
```

```
 h3_tochildren                                              
--------------------------------------------------------------------------------------------------------------------------------------
 [604189641121202175,604189641255419903,604189641389637631,604189641523855359,604189641658073087,604189641792290815,604189641926508543]
```

Remarque : Une différence de 7 ou moins entre la *résolution et la résolution* de *l'index* est sûre.

L'exemple suivant illustre une solution pour les requêtes qui dépassent la limite de taille SUPER. Lorsque la différence de résolution entre l'indice H3 d'entrée et la résolution enfant souhaitée est trop importante (supérieure à 7). Cette procédure résout le problème en élargissant progressivement les enfants par petites étapes (maximum 5 niveaux de résolution à la fois) et en stockant les résultats finaux dans un tableau créé par l'utilisateur.

```
CREATE OR REPLACE PROCEDURE generate_h3_children()
LANGUAGE plpgsql
AS $$
BEGIN
    -- Drop and create h3_children table that will contain the results
    DROP TABLE IF EXISTS h3_children;
    CREATE TABLE h3_children (
        h3_index BIGINT,
        child_res INTEGER,
        children SUPER
    );

    -- Create temporary table for steps
    DROP TABLE IF EXISTS h3_steps;
    CREATE TABLE h3_steps (
        h3_index BIGINT,
        current_res INTEGER,
        target_res INTEGER,
        h3_array SUPER
    );

    -- Initial insert into h3_steps
    INSERT INTO h3_steps
    SELECT h3_index, H3_Resolution(h3_index), child_res, ARRAY(h3_index)
    FROM h3_indexes; -- Insert from your table with h3_index and child_res as columns

    -- Loop until we reach target resolution
    -- We expect at most 3 iterations considering that we can start at resolution
    -- 0 and target/child resolution equal to 15 (0 -> 5 -> 10 -> 15)
    WHILE EXISTS (
        SELECT 1
        FROM h3_steps h
        GROUP BY h3_index, target_res
        HAVING MAX(current_res) < target_res
    ) LOOP
        -- Populate the h3_steps table with the tables that need to
        -- reach closer to the target res
        INSERT INTO h3_steps
        SELECT
            h.h3_index,
            LEAST(h.current_res + 5, h.target_res), -- Do not exceed target res
            h.target_res,
            -- Take the children of the child cell at resolution current_res of the
            -- h3_index
            H3_ToChildren(c.child::BIGINT, LEAST(h.current_res + 5, h.target_res))
        FROM h3_steps h, UNNEST(h.h3_array) AS c(child)
        WHERE h.current_res < h.target_res
        AND h.current_res = (SELECT MAX(current_res)
                           FROM h3_steps
                           WHERE h3_index = h.h3_index
        );
    END LOOP;

    -- Store final results
    INSERT INTO h3_children
    SELECT h3_index AS h3_index, target_res AS child_res, h3_array AS children
    FROM h3_steps
    WHERE current_res = target_res;
END;
$$;

-- Create the source table for H3_ToChildren queries
CREATE TABLE h3_indexes (
    h3_index BIGINT,
    child_res INTEGER,
    PRIMARY KEY (h3_index, child_res)
);
INSERT INTO h3_indexes (h3_index, child_res)
VALUES (x'8001fffffffffff'::BIGINT, 11);

-- Execute the procedure
CALL generate_h3_children();

-- View results
SELECT * FROM h3_children;
```

# H3\$1 ToParent
<a name="H3_ToParent-function"></a>

H3\$1 ToParent renvoie l'identifiant de la cellule H3 parent à une résolution parent spécifiée pour un index H3 donné. Pour en savoir plus sur l’indexation H3, consultez [H3](spatial-terminology.md#spatial-terminology-h3).

## Syntaxe
<a name="H3_ToParent-function-syntax"></a>

```
H3_ToParent(index, resolution)
```

## Arguments
<a name="H3_ToParent-function-arguments"></a>

 *index*   
Une valeur de type de données `BIGINT` ou `VARCHAR` qui représente l'index d'une cellule H3, ou une expression qui correspond à l'un de ces types de données.

 *resolution*   
Valeur de type de données `INTEGER` ou expression qui est évaluée sur un type `INTEGER`. La valeur représente la résolution de l'ID de cellule parent. La valeur doit être comprise entre 0 et la résolution de *l'indice* inclus.

## Type de retour
<a name="H3_ToParent-function-return"></a>

`BIGINT`— représente l'identifiant de la cellule H3 du parent.

Si *l'index* ou *la résolution* est NULL, NULL est renvoyé.

Si *index* n’est pas valide, une erreur est renvoyée.

Si *la résolution* est inférieure à 0 ou supérieure à la résolution de *l'index*, une erreur est renvoyée.

## Exemples
<a name="H3_ToParent-function-examples"></a>

Le code SQL suivant saisit un VARCHAR qui représente l'index d'une cellule H3 et un INTEGER qui représente la résolution souhaitée du parent souhaité, et renvoie un BIGINT qui représente le parent à la résolution 0 de la cellule H3 en entrée.

```
SELECT H3_ToParent('85283473fffffff', 0);
```

```
 h3_toparent
--------------------
 577199624117288959
```

Le code SQL suivant saisit un BIGINT qui représente l'index d'une cellule H3 et un INTEGER qui représente la résolution souhaitée du parent souhaité, et renvoie un BIGINT qui représente le parent à la résolution 0 de la cellule H3 en entrée.

```
SELECT H3_ToParent(646078419604526808, 8);
```

```
 h3_toparent
--------------------
 614553222213795839
```

# ST\$1 AddPoint
<a name="ST_AddPoint-function"></a>

ST\$1 AddPoint renvoie une géométrie de chaîne de lignes identique à la géométrie d'entrée avec un point ajouté. Si un index est fourni, le point est ajouté à la position de l’index. Si l’index est -1 ou non fourni, le point est ajouté à linestring. 

L’index est basé sur zéro. L’identificateur du système de référence spatiale (SRID) du résultat est identique à celui de la géométrie en entrée. 

La dimension de la géométrie renvoyée est identique à celle de la valeur *geom1*. Si *geom1* et *geom2* ont des dimensions différentes, *geom2* est projeté à la dimension de *geom1*.

## Syntaxe
<a name="ST_AddPoint-function-syntax"></a>

```
ST_AddPoint(geom1, geom2)
```

```
ST_AddPoint(geom1, geom2, index)
```

## Arguments
<a name="ST_AddPoint-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`. Le point peut être le point vide.

 *index*   
Valeur de type de données `INTEGER` qui représente la position d’un index de base zéro. 

## Type de retour
<a name="ST_AddPoint-function-return"></a>

`GEOMETRY` 

Si *geom1*, *geom2*, ou *index* est null, alors null est renvoyé. 

Si *geom2* est le point vide, une copie de *geom1* est renvoyée. 

Si *geom1* n’est pas un `LINESTRING`, une erreur est renvoyée. 

Si *geom2* n’est pas un `POINT`, une erreur est renvoyée. 

Si *l’index* est hors de portée, une erreur est renvoyée. Les valeurs valides pour la position d’index sont -1 ou une valeur comprise entre 0 et `ST_NumPoints(geom1)`. 

## Exemples
<a name="ST_AddPoint-function-examples"></a>

Le code SQL suivant ajoute un point à un linestring pour en faire une linestring fermée. 

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_AddPoint(g, ST_StartPoint(g))) FROM tmp;
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5,0 5,0 0)
```

Le code SQL suivant ajoute un point à une position spécifique dans une linestring. 

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_AddPoint(g, ST_SetSRID(ST_Point(5, 10), 4326), 3)) FROM tmp;
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 10,5 5,0 5)
```

# ST\$1Angle
<a name="ST_Angle-function"></a>

ST\$1Angle renvoie l’angle en radians entre les points mesurés dans le sens des aiguilles d’une montre comme suit :
+ Si trois points sont entrés, l’angle P1-P2-P3 renvoyé est mesuré comme si l’angle était obtenu en tournant de P1 à P3 autour de P2 dans le sens des aiguilles d’une montre. 
+ Si quatre points sont entrés, l’angle dans le sens des aiguilles d’une montre renvoyé et formé par les lignes orientées P1-P2 et P3-P4 est renvoyé. Si l’entrée est un cas dégénéré (c’est-à-dire que P1 est égal à P2 ou que P3 égal à P4), la valeur null est renvoyée. 

La valeur de renvoi est en radians et dans la plage [0, 2π). 

ST\$1Angle fonctionne sur des projections 2D des géométries en entrée.

## Syntaxe
<a name="ST_Angle-function-syntax"></a>

```
ST_Angle(geom1, geom2, geom3)
```

```
ST_Angle(geom1, geom2, geom3, geom4)
```

## Arguments
<a name="ST_Angle-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`. 

 *geom3*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`. 

 *geom4*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`. 

## Type de retour
<a name="ST_Angle-function-return"></a>

`DOUBLE PRECISION`. 

Si *geom1* est égal à *geom2* ou *geom2* est égal à *geom3*, alors une valeur null est renvoyée. 

Si *geom1*, *geom2*, *geom3*, ou *geom4* est null, alors une valeur null est renvoyée. 

Si *geom1*, *geom2*, *geom3* ou *geom4* est le point vide, une erreur est renvoyée. 

Si *geom1*, *geom2*, *geom3* et *geom4* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

## Exemples
<a name="ST_Angle-function-examples"></a>

Le SQL suivant renvoie l’angle converti en degrés de trois points d’entrée. 

```
SELECT ST_Angle(ST_Point(1,1), ST_Point(0,0), ST_Point(1,0)) / Pi() * 180.0 AS angle;
```

```
 angle
---------------
    45
```

Le SQL suivant renvoie l’angle converti en degrés de quatre points d’entrée. 

```
SELECT ST_Angle(ST_Point(1,1), ST_Point(0,0), ST_Point(1,0), ST_Point(2,0)) / Pi() * 180.0 AS angle;
```

```
 angle
---------------
   225
```

# ST\$1Area
<a name="ST_Area-function"></a>

Pour une géographie d’entrée, ST\$1Area renvoie la zone cartésienne de la projection 2D. Les unités de surface sont les mêmes que les unités dans lesquelles les coordonnées de la géométrie en entrée sont exprimées. Pour les points, les linestrings, les multipoints et les multilinestrings, la fonction renvoie 0. Pour les collections de géométrie, elle renvoie la somme des zones des géométries de la collection. 

Pour une géographie d’entrée, ST\$1Area renvoie la zone géodésique de la projection 2D d’une géographie surfacique en entrée calculée sur le sphéroïde déterminé par le SRID. L’unité de longueur est en mètres carrés. La fonction renvoie zéro (0) pour les points, les multipoints et les géomgraphies linéaires. Lorsque l’entrée est une collection de géométries, la fonction renvoie la somme des zones des géographies surfaciques de la collection.

## Syntaxe
<a name="ST_Area-function-syntax"></a>

```
ST_Area(geo)
```

## Arguments
<a name="ST_Area-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

## Type de retour
<a name="ST_Area-function-return"></a>

`DOUBLE PRECISION`

Si *geo* est null, null est renvoyé.

## Exemples
<a name="ST_Area-function-examples"></a>

Le SQL suivant renvoie la zone cartésienne d’un multipolygone. 

```
SELECT ST_Area(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_area
---------
     100
```

Le code SQL suivant renvoie la zone d’un polygone point dans une géographie. 

```
SELECT ST_Area(ST_GeogFromText('polygon((34 35, 28 30, 25 34, 34 35))'));
```

```
     st_area
------------------
 201824655743.383
```

Le code SQL suivant renvoie zéro pour une géographie linéaire. 

```
SELECT ST_Area(ST_GeogFromText('multipoint(0 0, 1 1, -21.32 121.2)'));
```

```
 st_area
---------
       0
```

# ST\$1 AsBinary
<a name="ST_AsBinary-function"></a>

ST\$1 AsBinary renvoie la représentation binaire hexadécimale connue (WKB) d'une géométrie d'entrée. Pour les géométries 3DZ, 3DM et 4D, ST\$1 AsBinary utilise la valeur standard de l'Open Geospatial Consortium (OGC) pour le type de géométrie. 

## Syntaxe
<a name="ST_AsBinary-function-syntax"></a>

```
ST_AsBinary(geom)
```

## Arguments
<a name="ST_AsBinary-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="ST_AsBinary-function-return"></a>

`VARBYTE`

Si *geom* est null, null est renvoyé.

## Exemples
<a name="ST_AsBinary-function-examples"></a>

Le SQL suivant renvoie la représentation WKB hexadécimale d’un polygone. 

```
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_asbinary
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1AsEWKB
<a name="ST_AsEWKB-function"></a>

ST\$1AsEWKT renvoie la représentation EWKT étendue d’une géométrie en entrée. Pour les géométries 3DZ, 3DM et 4D, ST\$1AsEWKB utilise la valeur standard OGC (Open Geospatial Consortium) pour le type de géométrie.

## Syntaxe
<a name="ST_AsEWKB-function-syntax"></a>

```
ST_AsEWKB(geom)
```

## Arguments
<a name="ST_AsEWKB-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="ST_AsEWKB-function-return"></a>

`VARBYTE`

Si *geom* est null, null est renvoyé.

## Exemples
<a name="ST_AsEWKB-function-examples"></a>

Le SQL suivant renvoie la représentation EWKB hexadécimale d’un polygone. 

```
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_asewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1AsEWKT
<a name="ST_AsEWKT-function"></a>

ST\$1AsEWKT renvoie la représentation (EWKT) d’une géométrie ou d’une géographie d’entrée. Pour les géométries 3DZ, 3DM et 4D, ST\$1AsEWKT ajoute Z, M ou ZM à la valeur WKT du type de géométrie.

## Syntaxe
<a name="ST_AsEWKT-function-syntax"></a>

```
ST_AsEWKT(geo)
```

```
ST_AsEWKT(geo, precision)
```

## Arguments
<a name="ST_AsEWKT-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

 *precision*   
Valeur du type de données `INTEGER`. Pour les géométries, les coordonnées de *geo* sont affichées à l’aide de la précision spécifiée 1-20. Si la *précision* n’est pas spécifiée, la valeur est 15. Pour les géométries, les coordonnées de *geo* sont affichées à l’aide de la précision spécifiée. Si la *précision* n’est pas spécifiée, la valeur est 15.

## Type de retour
<a name="ST_AsEWKT-function-return"></a>

`VARCHAR`

Si *geo* est null, null est renvoyé. 

Si *precision* est null, null est renvoyé. 

Si le résultat est supérieur à 64 Ko `VARCHAR`, une erreur est renvoyée. 

## Exemples
<a name="ST_AsEWKT-function-examples"></a>

Le SQL suivant renvoie la représentation EWKT d’une linestring. 

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326));
```

```
st_asewkt
--------------------------------
 SRID=4326;LINESTRING(3.14159265358979 -6.28318530717959,2.71828182845905 -1.41421356237309)
```

Le SQL suivant renvoie la représentation EWKT d’une linestring. Les coordonnées des géométries sont affichées avec six chiffres de précision. 

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326), 6);
```

```
st_asewkt
--------------------------------
 SRID=4326;LINESTRING(3.14159 -6.28319,2.71828 -1.41421)
```

Le code SQL suivant renvoie la représentation EWKT d’une géographie. 

```
SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
                  st_asewkt
----------------------------------------------
 SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
```

# ST\$1JSON AsGeo
<a name="ST_AsGeoJSON-function"></a>

ST\$1 AsGeo JSON renvoie la représentation GeoJSON d'une géométrie ou d'une géographie en entrée. Pour plus d’informations sur GeoJSON, consultez [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) dans Wikipedia.

Pour les géométries 3DZ et 4D, la géométrie en sortie est une projection 3DZ de la géométrie 3DZ ou 4D en entrée. Autrement dit, les coordonnées `x`, `y` et `z` sont présentes dans la sortie. Pour les géométries 3DM, la géométrie en sortie est une projection 2D de la géométrie 3DM en entrée. Cela signifie que seules les coordonnées `x` et `y` sont présentes dans la sortie.

Pour les géographies en entrée, ST\$1 AsGeo JSON renvoie la représentation GeoJSON d'une géographie en entrée. Les coordonnées de la géographie sont affichées à l’aide de la précision spécifiée. 

## Syntaxe
<a name="ST_AsGeoJSON-function-syntax"></a>

```
ST_AsGeoJSON(geo)
```

```
ST_AsGeoJSON(geo, precision)
```

## Arguments
<a name="ST_AsGeoJSON-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

 *precision*   
Valeur du type de données `INTEGER`. Pour les géométries, les coordonnées de *geo* sont affichées à l’aide de la précision spécifiée 1-20. Si la *précision* n’est pas spécifiée, la valeur est 15. Pour les géométries, les coordonnées de *geo* sont affichées à l’aide de la précision spécifiée. Si la *précision* n’est pas spécifiée, la valeur est 15.

## Type de retour
<a name="ST_AsGeoJSON-function-return"></a>

`VARCHAR`

Si *geo* est null, null est renvoyé. 

Si *precision* est null, null est renvoyé. 

Si le résultat est supérieur à 64 Ko `VARCHAR`, une erreur est renvoyée. 

## Exemples
<a name="ST_AsGeoJSON-function-examples"></a>

Le SQL suivant renvoie la représentation GeoJSON d’une linestring. 

```
SELECT ST_AsGeoJSON(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)'));
```

```
st_asgeojson
----------------------------------------------------------------------------------------------------------------
 {"type":"LineString","coordinates":[[3.14159265358979,-6.28318530717959],[2.71828182845905,-1.41421356237309]]}
```

Le SQL suivant renvoie la représentation GeoJSON d’une linestring. Les coordonnées des géométries sont affichées avec six chiffres de précision. 

```
SELECT ST_AsGeoJSON(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)'), 6);
```

```
st_asgeojson
-----------------------------------------------------------------------------
  {"type":"LineString","coordinates":[[3.14159,-6.28319],[2.71828,-1.41421]]}
```

Le code SQL suivant renvoie la représentation GeoJSON d’une géographie. 

```
SELECT ST_AsGeoJSON(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
                             st_asgeojson
----------------------------------------------------------------------
 {"type":"LineString","coordinates":[[110,40],[2,3],[-10,80],[-7,9]]}
```

# ST\$1WKB AsHex
<a name="ST_AsHexWKB-function"></a>

ST\$1 AsHex WKB renvoie la représentation binaire hexadécimale connue (WKB) d'une géométrie ou d'une géographie en entrée à l'aide de caractères hexadécimaux ASCII (0—9, A—F). Pour les géométries ou les géographies 3DZ, 3DM et 4D, ST\$1 AsHex WKB utilise la valeur standard de l'Open Geospatial Consortium (OGC) pour le type de géométrie ou de géographie. 

## Syntaxe
<a name="ST_AsHexWKB-function-syntax"></a>

```
ST_AsHexWKB(geo)
```

## Arguments
<a name="ST_AsHexWKB-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

## Type de retour
<a name="ST_AsHexWKB-function-return"></a>

`VARCHAR`

Si *geo* est null, null est renvoyé.

Si le résultat est supérieur à 64 Ko `VARCHAR`, une erreur est renvoyée. 

## Exemples
<a name="ST_AsHexWKB-function-examples"></a>

Le code SQL suivant renvoie la représentation WKB hexadécimale d’un polygone dans une géométrie. 

```
SELECT ST_AsHexWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_ashexwkb
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

Le code SQL suivant renvoie la représentation WKB hexadécimale d’un polygone dans une géographie. 

```
SELECT ST_AsHexWKB(ST_GeogFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))'));
```

```
st_ashexwkb
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1WEBB AsHex
<a name="ST_AsHexEWKB-function"></a>

ST\$1 AsHex EWKB renvoie la représentation binaire connue étendue (EWKB) d'une géométrie ou d'une géographie en entrée à l'aide de caractères hexadécimaux ASCII (0—9, A—F). Pour les géométries ou les géographies 3DZ, 3DM et 4D, ST\$1 EWKB AsHex utilise la valeur WKB étendue de PostGIS pour le type de géométrie ou de géographie.

## Syntaxe
<a name="ST_AsHexEWKB-function-syntax"></a>

```
ST_AsHexEWKB(geo)
```

## Arguments
<a name="ST_AsHexEWKB-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

## Type de retour
<a name="ST_AsHexEWKB-function-return"></a>

`VARCHAR`

Si *geo* est null, null est renvoyé. 

Si le résultat est supérieur à 64 Ko `VARCHAR`, une erreur est renvoyée. 

## Exemples
<a name="ST_AsHexEWKB-function-examples"></a>

Le code SQL suivant renvoie la représentation EWKB hexadécimale d’un polygone dans une géométrie. 

```
SELECT ST_AsHexEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_ashexewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

Le code SQL suivant renvoie la représentation EWKB hexadécimale d’un polygone dans une géographie. 

```
SELECT ST_AsHexEWKB(ST_GeogFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))'));
```

```
st_ashexewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1 AsText
<a name="ST_AsText-function"></a>

ST\$1 AsText renvoie la représentation textuelle connue (WKT) d'une géométrie ou d'une géographie en entrée. Pour les géométries ou les géographies 3DZ, 3DM et 4D, ST\$1AsEWKT ajoute Z, M ou ZM à la valeur WKT du type de géométrie ou de géographie.

## Syntaxe
<a name="ST_AsText-function-syntax"></a>

```
ST_AsText(geo)
```

```
ST_AsText(geo, precision)
```

## Arguments
<a name="ST_AsText-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

 *precision*   
Valeur du type de données `INTEGER`. Pour les géométries, les coordonnées de *geo* sont affichées à l’aide de la précision spécifiée 1-20. Si la *précision* n’est pas spécifiée, la valeur est 15. Pour les géographies, les coordonnées de *geo* sont affichées à l’aide de la précision spécifiée. Si la *précision* n’est pas spécifiée, la valeur est 15.

## Type de retour
<a name="ST_AsText-function-return"></a>

`VARCHAR`

Si *geo* est null, null est renvoyé.

Si *precision* est null, null est renvoyé.

Si le résultat est supérieur à 64 Ko `VARCHAR`, une erreur est renvoyée. 

## Exemples
<a name="ST_AsText-function-examples"></a>

Le SQL suivant renvoie la représentation WKT d’une linestring. 

```
SELECT ST_AsText(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326));
```

```
st_astext
--------------------------------
LINESTRING(3.14159265358979 -6.28318530717959,2.71828182845905 -1.41421356237309)
```

Le SQL suivant renvoie la représentation WKT d’une linestring. Les coordonnées des géométries sont affichées avec six chiffres de précision. 

```
SELECT ST_AsText(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326), 6);
```

```
st_astext
----------------------------------------------
 LINESTRING(3.14159 -6.28319,2.71828 -1.41421)
```

Le code SQL suivant renvoie la représentation WKT d’une géographie. 

```
SELECT ST_AsText(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
             st_astext
------------------------------------
 LINESTRING(110 40,2 3,-10 80,-7 9)
```

# ST\$1Azimuth
<a name="ST_Azimuth-function"></a>

ST\$1Azimuth renvoie l’azimuth cartésien basé au nord à l’aide des projections 2D des deux points d’entrée. 

## Syntaxe
<a name="ST_Azimuth-function-syntax"></a>

```
ST_Azimuth(point1, point2)
```

## Arguments
<a name="ST_Azimuth-function-arguments"></a>

 *point1*   
Valeur `POINT` du type de données `GEOMETRY`. L’identifiant système de référence spatiale (SRID) du *point1* doit correspondre au SRID du *point2*. 

 *point2*   
Valeur `POINT` du type de données `GEOMETRY`. Le SRID du *point2* doit correspondre au SRID du *point1*. 

## Type de retour
<a name="ST_Azimuth-function-return"></a>

Nombre qui est un angle en radians du type de données `DOUBLE PRECISION`. Les valeurs vont de 0 (inclus) à 2 pi (exclus). 

Si *point1* ou *point2* n’est pas un point vide, une erreur est renvoyée. 

Si *point1* ou *point2* est null, null est renvoyé. 

Si *point1* et *point2* sont égaux, null est renvoyé. 

Si *point1* ou *point2* n’est pas un point, une erreur est renvoyée. 

Si *point1* et *point2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

## Exemples
<a name="ST_Azimuth-function-examples"></a>

Le SQL suivant renvoie l’azimuth des points d’entrée. 

```
SELECT ST_Azimuth(ST_Point(1,2), ST_Point(5,6));
```

```
st_azimuth
-------------------
 0.7853981633974483
```

# ST\$1Boundary
<a name="ST_Boundary-function"></a>

ST\$1Boundary renvoie la limite d’une géométrie d’entrée comme suit : 
+ Si la géométrie en entrée est vide (c’est-à-dire qu’elle ne contient aucun point), elle est renvoyée telle quelle. 
+ Si la géométrie en entrée est un point ou un multipoint non vide, une collection de géométries vide est renvoyée.
+ Si l’entrée est une linestring ou une multilinestring, un multipoint contenant tous les points de la limite est renvoyé. Le multipoint peut être vide.
+ Si l’entrée est un polygone qui n’a pas d’anneaux intérieurs, une linestring fermée représentant sa limite est renvoyée.
+ Si l’entrée est un polygone qui a des anneaux intérieurs ou un multipolygone, une multilinestring est renvoyée. La valeur multilinestring contient toutes les limites de tous les anneaux de la géométrie de surface sous forme de linestrings fermées.

Pour déterminer l’égalité des points, ST\$1Boundary opère sur la projection 2D de la géométrie en entrée. Si la géométrie en entrée est vide, une copie de celle-ci est renvoyée dans la même dimension que l’entrée. Pour les géométries 3DM et 4D non vides, leurs coordonnées `m` sont supprimées. Dans le cas particulier des multilinestrings 3DZ et 4D, les coordonnées `z` des points limites de la multilinestring sont calculés comme les moyennes des valeurs z distinctes des points limites linéaires avec la même projection 2D.

## Syntaxe
<a name="ST_Boundary-function-syntax"></a>

```
ST_Boundary(geom)
```

## Arguments
<a name="ST_Boundary-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="ST_Boundary-function-return"></a>

`GEOMETRY`

Si *geom* est null, null est renvoyé.

Si *geom* n’est pas un `GEOMETRYCOLLECTION`, une erreur est renvoyée.

## Exemples
<a name="ST_Boundary-function-examples"></a>

Le code SQL suivant renvoie la limite du polygone en entrée en tant que multilinestring. 

```
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1))')));
```

```
st_asewkt
--------------------
 MULTILINESTRING((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1))
```

# ST\$1Buffer
<a name="ST_Buffer-function"></a>

ST\$1Buffer renvoie une géométrie 2D qui représente tous les points dont la distance par rapport à la géométrie d’entrée projetée sur le plan cartésien XY est inférieure ou égale à la distance d’entrée. 

## Syntaxe
<a name="ST_Buffer-function-syntax"></a>

```
ST_Buffer(geom, distance)
```

```
ST_Buffer(geom, distance, number_of_segments_per_quarter_circle)
```

## Arguments
<a name="ST_Buffer-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

 *distance*   
Valeur du type de données `DOUBLE PRECISION` qui représente la distance (ou le rayon) du tampon. 

 *number\$1of\$1segments\$1per\$1quarter\$1circle*   
Valeur du type de données `INTEGER`. Cette valeur détermine le nombre de points à approcher d’un quart de cercle autour de chaque sommet de la géométrie d’entrée. Les valeurs négatives ont pour valeur par défaut zéro. La valeur par défaut est de 8.

## Type de retour
<a name="ST_Buffer-function-return"></a>

`GEOMETRY`

La fonction ST\$1Buffer renvoie une géométrie bidimensionnelle (2D) dans le plan cartésien XY.

Si *geom* n’est pas un `GEOMETRYCOLLECTION`, une erreur est renvoyée.

## Exemples
<a name="ST_Buffer-function-examples"></a>

Le SQL suivant renvoie le sous-type de la géométrie de linestring d’entrée. 

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('LINESTRING(1 2,5 2,5 8)'), 2));
```

```
               st_asewkt  
POLYGON((-1 2,-0.96157056080646 2.39018064403226,-0.847759065022573 2.76536686473018,-0.662939224605089 3.11114046603921,-0.414213562373093 3.4142135623731,-0.111140466039201 3.66293922460509,0.234633135269824 3.84775906502257,0.609819355967748 3.96157056080646,1 4,3 4,3 8,3.03842943919354 8.39018064403226,3.15224093497743 8.76536686473018,3.33706077539491 9.11114046603921,3.58578643762691 9.4142135623731,3.8888595339608 9.66293922460509,4.23463313526982 9.84775906502257,4.60981935596775 9.96157056080646,5 10,5.39018064403226 9.96157056080646,5.76536686473018 9.84775906502257,6.11114046603921 9.66293922460509,6.4142135623731 9.41421356237309,6.66293922460509 9.1111404660392,6.84775906502258 8.76536686473017,6.96157056080646 8.39018064403225,7 8,7 2,6.96157056080646 1.60981935596774,6.84775906502257 1.23463313526982,6.66293922460509 0.888859533960796,6.41421356237309 0.585786437626905,6.1111404660392 0.33706077539491,5.76536686473018 0.152240934977427,5.39018064403226 0.0384294391935391,5 0,1 0,0.609819355967744 0.0384294391935391,0.234633135269821 0.152240934977427,-0.111140466039204 0.337060775394909,-0.414213562373095 0.585786437626905,-0.662939224605091 0.888859533960796,-0.847759065022574 1.23463313526982,-0.961570560806461 1.60981935596774,-1 2))
```

Le SQL suivant renvoie le tampon de la géométrie du point d’entrée qui se rapproche d’un cercle. Étant donné que la commande ne spécifie pas le nombre de segments par quart de cercle, la fonction utilise la valeur par défaut de huit segments pour approcher le quart de cercle.

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('POINT(3 4)'), 2));
```

```
               st_asewkt
POLYGON((1 4,1.03842943919354 4.39018064403226,1.15224093497743 4.76536686473018,1.33706077539491 5.11114046603921,1.58578643762691 5.4142135623731,1.8888595339608 5.66293922460509,2.23463313526982 5.84775906502257,2.60981935596775 5.96157056080646,3 6,3.39018064403226 5.96157056080646,3.76536686473019 5.84775906502257,4.11114046603921 5.66293922460509,4.4142135623731 5.41421356237309,4.66293922460509 5.1111404660392,4.84775906502258 4.76536686473017,4.96157056080646 4.39018064403225,5 4,4.96157056080646 3.60981935596774,4.84775906502257 3.23463313526982,4.66293922460509 2.8888595339608,4.41421356237309 2.58578643762691,4.1111404660392 2.33706077539491,3.76536686473018 2.15224093497743,3.39018064403226 2.03842943919354,3 2,2.60981935596774 2.03842943919354,2.23463313526982 2.15224093497743,1.8888595339608 2.33706077539491,1.58578643762691 2.58578643762691,1.33706077539491 2.8888595339608,1.15224093497743 3.23463313526982,1.03842943919354 3.60981935596774,1 4))
```

Le SQL suivant renvoie le tampon de la géométrie du point d’entrée qui se rapproche d’un cercle. Étant donné que la commande spécifie 3 comme nombre de segments par quart de cercle, la fonction utilise trois segments pour approcher le quart de cercle.

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('POINT(3 4)'), 2, 3));
```

```
               st_asewkt
POLYGON((1 4,1.26794919243112 5,2 5.73205080756888,3 6,4 5.73205080756888,4.73205080756888 5,5 4,4.73205080756888 3,4 2.26794919243112,3 2,2 2.26794919243112,1.26794919243112 3,1 4))
```

# ST\$1Centroid
<a name="ST_Centroid-function"></a>

ST\$1CentroID renvoie un point qui représente un centroïde d’une géométrie comme suit :
+ Pour les géométries `POINT`, il renvoie le point dont les coordonnées sont la moyenne des coordonnées des points de la géométrie. 
+ Pour les géométries `LINESTRING`, il renvoie le point dont les coordonnées sont la moyenne pondérée des points médians des segments de la géométrie, où les poids sont les longueurs des segments de la géométrie.
+ Pour les géométries `POLYGON`, il renvoie le point dont les coordonnées sont la moyenne pondérée des centroïdes d’une triangulation de la géométrie surfacique où les poids sont les zones des triangles dans la triangulation.
+ Pour les collections de géométrie, elle renvoie la moyenne pondérée des centroïdes des géométries de dimension topologique maximale de la collection de géométries.

## Syntaxe
<a name="ST_Centroid-function-syntax"></a>

```
ST_Centroid(geom)
```

## Arguments
<a name="ST_Centroid-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Centroid-function-return"></a>

`GEOMETRY` 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, null est renvoyé. 

## Exemples
<a name="ST_Centroid-function-examples"></a>

Le code SQL suivant renvoie un point central d’une linestring d’entrée. 

```
SELECT ST_AsEWKT(ST_Centroid(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9, -22 -33)', 4326)))
```

```
                     st_asewkt
----------------------------------------------------
 SRID=4326;POINT(15.6965103455214 27.0206782881905)
```

# ST\$1Collect
<a name="ST_Collect-function"></a>

ST\$1Collect a deux variantes. L’une accepte deux géométries et l’autre accepte une expression agrégée. 

La première variante de ST\$1Collect crée une géométrie à partir des géométries en entrée. L’ordre des géométries en entrée est conservé. Cette variante fonctionne comme suit : 
+ Si les deux géométries en entrée sont des valeurs point, alors une valeur `MULTIPOINT` avec deux valeurs point est renvoyée. 
+ Si les deux géométries en entrée sont des valeurs linestring, alors une valeur `MULTILINESTRING` avec deux valeurs linestrings est renvoyée. 
+ Si les deux géométries en entrée sont des polygones, alors un `MULTIPOLYGON` avec deux polygones est renvoyé. 
+ Sinon, une valeur `GEOMETRYCOLLECTION` avec deux géométries en entrée est renvoyée. 

La deuxième variante de ST\$1Collect crée une géométrie à partir de géométries dans une colonne de géométrie. Il n’y a pas d’ordre de renvoi déterminé des géométries. Spécifiez la clause WITHIN GROUP (ORDER BY...) pour spécifier l’ordre des géométries renvoyées. Cette variante fonctionne comme suit : 
+ Si toutes les lignes non NULL de l’expression d’agrégation en entrée sont des points, un multipoint contenant tous les points de l’expression d’agrégation est renvoyé. 
+ Si toutes les lignes non NULL de l’expression agrégée sont des linestrings, une multilinestring contenant toutes les linestrings de l’expression agrégée est renvoyée. 
+ Si toutes les lignes non NULL de l’expression agrégée sont des polygones, un multipolygone contenant tous les polygones de l’expression agrégée est renvoyé. 
+ Sinon, une `GEOMETRYCOLLECTION` contenant toutes les géométries de l’expression agrégée est renvoyée. 

ST\$1Collect renvoie la géométrie de la même dimension que les géométries en entrée. Toutes les géométries en entrée doivent être de la même dimension.

## Syntaxe
<a name="ST_Collect-function-syntax"></a>

```
ST_Collect(geom1, geom2)
```

```
ST_Collect(aggregate_expression)  [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]
```

## Arguments
<a name="ST_Collect-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *aggregate\$1expression*   
Colonne de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 [WITHIN GROUP (ORDER BY *sort\$1expression1* [ASC \$1 DESC] [, *sort\$1expression2* [ASC \$1 DESC] ...])]   
Clause facultative qui spécifie l’ordre de tri des valeurs regroupées. La clause ORDER BY contient une liste d’expressions de tri. Les expressions de tri sont des expressions similaires aux expressions de tri valides dans une liste de sélection de requête, telles qu’un nom de colonne. Vous pouvez spécifier un ordre de tri croissant (`ASC`) ou décroissant (`DESC`). La valeur par défaut est `ASC`. 

## Type de retour
<a name="ST_Collect-function-return"></a>

`GEOMETRY` de sous-type `MULTIPOINT`, `MULTILINESTRING`, `MULTIPOLYGON` ou `GEOMETRYCOLLECTION`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée. 

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si toutes les lignes de *aggregate\$1expression* sont null, null est renvoyé. 

Si *geom1* est null, une copie de *geom2* est renvoyée. De même, si *geom2* est null, une copie de *geom1* est renvoyée.

Si *geom1* et *geom2* ont des valeurs SRID différentes, une erreur est renvoyée. 

Si deux géométries dans *aggregate\$1expression* ont des valeurs SRID différentes, une erreur est renvoyée. 

Si la géométrie renvoyée est supérieure à la taille maximale d’une `GEOMETRY`, une erreur est renvoyée. 

Si *geom1* et *geom2* ont des dimensions différentes, une erreur est renvoyée. 

Si deux géométries dans *aggregate\$1expression* ont des dimensions différentes, une erreur est renvoyée. 

## Exemples
<a name="ST_Collect-function-examples"></a>

Le code SQL suivant renvoie une collection de géométries qui contient les deux géométries d’entrée. 

```
SELECT ST_AsText(ST_Collect(ST_GeomFromText('LINESTRING(0 0,1 1)'), ST_GeomFromText('POLYGON((10 10,20 10,10 20,10 10))')));
```

```
st_astext
-----------
 GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),POLYGON((10 10,20 10,10 20,10 10)))
```

Le code SQL suivant collecte toutes les géométries d’une table dans une collection de géométries. 

```
WITH tbl(g) AS (SELECT ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT NULL::geometry UNION ALL
SELECT ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326))
SELECT ST_AsEWKT(ST_Collect(g)) FROM tbl;
```

```
st_astext
-----------
 SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,10 0),MULTIPOINT((13 4),(8 5),(4 4)),POLYGON((0 0,10 0,0 10,0 0)))
```

Le code SQL suivant collecte toutes les géométries de la table regroupées par la colonne id et classées par cet ID. Dans cet exemple, les géométries résultantes sont regroupées par ID comme suit : 
+ id 1 — points dans un multipoint.
+ id 2 : linestrings dans une multilinestring.
+ id 3 — sous-types mixtes d’une collection de géométries.
+ id 4 — polygones dans un multipolygone.
+ id 5 — null et le résultat est null.

```
WITH tbl(id, g) AS (SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL
SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL
SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry)
SELECT id, ST_AsEWKT(ST_Collect(g)) FROM tbl GROUP BY id ORDER BY id;
```

```
 id |                                                 st_asewkt                                                 
----+-----------------------------------------------------------------------------------------------------------
  1 | SRID=4326;MULTIPOINT((1 2),(4 5))
  2 | SRID=4326;MULTILINESTRING((0 0,10 0),(10 0,20 -5))
  3 | SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT((13 4),(8 5),(4 4)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)))
  4 | SRID=4326;MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((20 20,20 30,30 20,20 20)))
  5 |
```

Le SQL suivant collecte toutes les géométries d’une table d’une collection de géométries. Les résultats sont classés par ordre décroissant par `id`, puis classés de manière lexicographique en fonction de leurs coordonnées x minimales et maximales. 

```
WITH tbl(id, g) AS (
SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL
SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL
SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL
SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry)
SELECT ST_AsEWKT(ST_Collect(g) WITHIN GROUP (ORDER BY id DESC, ST_XMin(g), ST_XMax(g))) FROM tbl;
```

```
                                                                                                                  st_asewkt                                                                                                                  
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=4326;GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),POLYGON((20 20,20 30,30 20,20 20)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)),MULTIPOINT((13 4),(8 5),(4 4)),LINESTRING(0 0,10 0),LINESTRING(10 0,20 -5),POINT(1 2),POINT(4 5)
```

# ST\$1Contains
<a name="ST_Contains-function"></a>

ST\$1Contains renvoie true si la projection 2D de la première géométrie en entrée contient la projection 2D de la deuxième géométrie en entrée. La géométrie `A` contient la géométrie `B` si chaque point dans `B` est un point dans `A`, et leur intérieur comporte une intersection non vide. 

ST\$1Contains(`A`, `B`) équivaut à ST\$1Within(`B`, `A`). 

## Syntaxe
<a name="ST_Contains-function-syntax"></a>

```
ST_Contains(geom1, geom2)
```

## Arguments
<a name="ST_Contains-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Cette valeur est comparée à *geom1* afin de déterminer si elle est contenue dans *geom1*. 

## Type de retour
<a name="ST_Contains-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Contains-function-examples"></a>

Le SQL suivant vérifie si le premier polygone contient le deuxième polygone. 

```
SELECT ST_Contains(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_contains
-----------
 false
```

# ST\$1 ContainsProperly
<a name="ST_ContainsProperly-function"></a>

ST\$1 ContainsProperly renvoie la valeur true si les deux géométries en entrée ne sont pas vides et que tous les points de la projection 2D de la deuxième géométrie sont des points intérieurs de la projection 2D de la première géométrie. 

## Syntaxe
<a name="ST_ContainsProperly-function-syntax"></a>

```
ST_ContainsProperly(geom1, geom2)
```

## Arguments
<a name="ST_ContainsProperly-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type ne peut pas être `GEOMETRYCOLLECTION`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type ne peut pas être `GEOMETRYCOLLECTION`. Cette valeur est comparée à *geom1* pour déterminer si tous ses points sont des points intérieurs de *geom1*. 

## Type de retour
<a name="ST_ContainsProperly-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_ContainsProperly-function-examples"></a>

Le code SQL suivant renvoie les valeurs de ST\$1Contains et ST\$1 ContainsProperly lorsque la chaîne de ligne d'entrée croise l'intérieur et la limite du polygone en entrée (mais pas son extérieur). Le polygone contient la linestring, mais ne contient pas correctement la linestring. 

```
WITH tmp(g1, g2) 
AS (SELECT ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('LINESTRING(5 5,10 5,10 6,5 5)')) SELECT ST_Contains(g1, g2), ST_ContainsProperly(g1, g2) 
FROM tmp;
```

```
 st_contains | st_containsproperly 
-------------+---------------------
 t           | f
```

# ST\$1 ConvexHull
<a name="ST_ConvexHull-function"></a>

ST\$1 ConvexHull renvoie une géométrie qui représente l'enveloppe convexe des points non vides contenus dans la géométrie d'entrée. 

Pour une entrée vide, la géométrie résultante est identique à la géométrie en entrée. Pour toutes les entrées non vides, la fonction fonctionne sur la projection 2D de la géométrie en entrée. Toutefois, la dimension de la géométrie en sortie dépend de la dimension de la géométrie en entrée. Plus précisément, lorsque la géométrie en entrée est une géométrie 3DM ou 3D non vide, les coordonnées `m` sont supprimées. Autrement dit, la dimension de la géométrie renvoyée est 2D ou 3DZ, respectivement. Si l’entrée est une géométrie 2D ou 3DZ non vide, la géométrie résultante a la même dimension.

## Syntaxe
<a name="ST_ConvexHull-function-syntax"></a>

```
ST_ConvexHull(geom)
```

## Arguments
<a name="ST_ConvexHull-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_ConvexHull-function-return"></a>

`GEOMETRY`

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *geom* est null, null est renvoyé. 

Les valeurs renvoyées sont comme suit :


| Nombre de points sur l’enveloppe convexe | Sous-type de géométrie | 
| --- | --- | 
| 0 | Une copie de *geom* est renvoyée.  | 
| 1 | Un sous-type `POINT` est renvoyé.  | 
| 2 | Un sous-type `LINESTRING` est renvoyé. Les deux points de la linestring renvoyée sont classés de manière lexicographique. | 
| 3 ou plus | Un sous-type `POLYGON` sans anneaux intérieurs est renvoyé. Le polygone est orienté dans le sens des aiguilles d’une montre, et le premier point de l’anneau extérieur est le point lexicographique le plus petit de l’anneau. | 

## Exemples
<a name="ST_ConvexHull-function-examples"></a>

Le code SQL suivant renvoie la représentation de texte connu étendu (EWKT) d’une linestring. Dans ce cas, l’enveloppe convexe renvoyée est un polygone.

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('LINESTRING(0 0,1 0,0 1,1 1,0.5 0.5)'))) as output;
```

```
output
-------------
POLYGON((0 0,0 1,1 1,1 0,0 0))
```

Le SQL suivant renvoie la représentation EWKT d’une linestring. Dans ce cas, l’enveloppe convexe renvoyée est une linestring.

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('LINESTRING(0 0,1 1,0.2 0.2,0.6 0.6,0.5 0.5)'))) as output;
```

```
output
-------------
LINESTRING(0 0,1 1)
```

Le code SQL suivant renvoie la représentation EWKT d’un multipoint. Dans ce cas, l’enveloppe convexe renvoyée est un point.

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('MULTIPOINT(0 0,0 0,0 0)'))) as output;
```

```
output
-------------
POINT(0 0)
```

# ST\$1 CoveredBy
<a name="ST_CoveredBy-function"></a>

ST\$1 CoveredBy renvoie true si la projection 2D de la première géométrie en entrée est couverte par la projection 2D de la deuxième géométrie en entrée. La géométrie `A` est couverte par la géométrie `B` si les deux sont non vides et si chaque point dans `A` est un point dans `B`. 

ST\$1 CoveredBy (`A`,`B`) est équivalent à ST\$1Covers (`B`,). `A` 

## Syntaxe
<a name="ST_CoveredBy-function-syntax"></a>

```
ST_CoveredBy(geom1, geom2)
```

## Arguments
<a name="ST_CoveredBy-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Cette valeur est comparée à *geom2* afin de déterminer si elle est couverte par *geom2*. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_CoveredBy-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_CoveredBy-function-examples"></a>

Le SQL suivant vérifie si le premier polygone est couvert par le deuxième polygone. 

```
SELECT ST_CoveredBy(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_coveredby
-----------
 true
```

# ST\$1Covers
<a name="ST_Covers-function"></a>

ST\$1Covers renvoie true si la projection 2D de la première géométrie en entrée couvre la projection 2D de la deuxième géométrie en entrée. La géométrie `A` couvre la géométrie `B` si les deux sont non vides et si chaque point dans `B` est un point dans `A`. 

ST\$1Covers (`A`,`B`) est équivalent à ST\$1 CoveredBy (`B`,). `A` 

## Syntaxe
<a name="ST_Covers-function-syntax"></a>

```
ST_Covers(geom1, geom2)
```

## Arguments
<a name="ST_Covers-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Cette valeur est comparée à *geom1* afin de déterminer si elle couvre *geom1*. 

## Type de retour
<a name="ST_Covers-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Covers-function-examples"></a>

Le SQL suivant vérifie si le premier polygone couvre le deuxième polygone. 

```
SELECT ST_Covers(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_covers
-----------
 false
```

# ST\$1Crosses
<a name="ST_Crosses-function"></a>

ST\$1Crosses renvoie true si les projections 2D des deux géométries en entrée se croisent. 

## Syntaxe
<a name="ST_Crosses-function-syntax"></a>

```
ST_Crosses(geom1, geom2)
```

## Arguments
<a name="ST_Crosses-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Crosses-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

## Exemples
<a name="ST_Crosses-function-examples"></a>

Le code SQL suivant vérifie si le premier polygone croise le deuxième multipoint. Dans cet exemple, le multipoint croise à la fois l’intérieur et l’extérieur du polygone, c’est pourquoi ST\$1Crosses renvoie true.

```
SELECT ST_Crosses (ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('multipoint(5 5,0 0,-1 -1)'));
```

```
st_crosses              
-------------
 true
```

Le code SQL suivant vérifie si le premier polygone croise le deuxième multipoint. Dans cet exemple, le multipoint croise l’extérieur du polygone mais pas son intérieur, c’est pourquoi ST\$1Crosses renvoie false.

```
SELECT ST_Crosses (ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('multipoint(0 0,-1 -1)'));
```

```
st_crosses              
-------------
 false
```

# ST\$1Dimension
<a name="ST_Dimension-function"></a>

ST\$1Dimension renvoie la dimension inhérente d’une géométrie d’entrée. La *dimension inhérente* est la valeur de la dimension du sous-type défini dans la géométrie. 

Pour les entrées de géométrie 3DM, 3DZ et 4D, ST\$1Dimension renvoie le même résultat que pour les entrées de géométrie 2D.

## Syntaxe
<a name="ST_Dimension-function-syntax"></a>

```
ST_Dimension(geom)
```

## Arguments
<a name="ST_Dimension-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Dimension-function-return"></a>

`INTEGER` représentant la dimension inhérente de *geom*. 

Si *geom* est null, null est renvoyé. 

Les valeurs renvoyées sont comme suit :


| Valeur renvoyée | Sous-type de géométrie | 
| --- | --- | 
| 0 | Renvoyé si *geom* est un sous-type `POINT` ou `MULTIPOINT`. | 
| 1 | Renvoyé si *geom* est un sous-type `LINESTRING` ou `MULTILINESTRING`. | 
| 2 | Renvoyé si *geom* est un sous-type `POLYGON` ou `MULTIPOLYGON`. | 
| 0 | Renvoyé si *geom* est un sous-type `GEOMETRYCOLLECTION` vide. | 
| Dimension la plus importantes des composants de la collection. | Renvoyé si *geom* est un sous-type `GEOMETRYCOLLECTION` | 

## Exemples
<a name="ST_Dimension-function-examples"></a>

Le SQL suivant convertit une représentation WKT (well-known text) d’une LINESTRING à quatre points en objet GEOMETRY et renvoie la dimension de la linestring. 

```
SELECT ST_Dimension(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_dimension
-------------
1
```

# ST\$1Disjoint
<a name="ST_Disjoint-function"></a>

ST\$1Disjoint renvoie true si les projections 2D des deux géométries d’entrée n’ont aucun point commun. 

## Syntaxe
<a name="ST_Disjoint-function-syntax"></a>

```
ST_Disjoint(geom1, geom2)
```

## Arguments
<a name="ST_Disjoint-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Disjoint-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Disjoint-function-examples"></a>

Le SQL suivant vérifie si le premier polygone est séparé du deuxième polygone. 

```
SELECT ST_Disjoint(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'), ST_Point(4, 4));
```

```
st_disjoint               
-----------
 true
```

# ST\$1Distance
<a name="ST_Distance-function"></a>

Pour les géométries d’entrée, ST\$1Distance renvoie la distance euclidienne minimale entre les projections 2D des deux valeurs géométriques d’entrée. 

Pour les géométries 3DM, 3DZ, 4D, ST\$1Distance renvoie la distance euclidienne entre les projections 2D de deux valeurs géométriques en entrée.

Pour les géographies d’entrée, ST\$1Distance renvoie la distance géodésique des deux points 2D. L’unité de distance est exprimée en mètres. Pour les zones géographiques autres que les points et les points vides, une erreur est renvoyée.

## Syntaxe
<a name="ST_Distance-function-syntax"></a>

```
ST_Distance(geo1, geo2)
```

## Arguments
<a name="ST_Distance-function-arguments"></a>

 *geo1*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`. Le type de données de *geo1* doit être identique à *geo2*.

 *geo2*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`. Le type de données de *geo2* doit être identique à *geo1*.

## Type de retour
<a name="ST_Distance-function-return"></a>

`DOUBLE PRECISION` dans les mêmes unités que les géométries ou les géographies d’entrée.

Si *geo1* ou *geo2* est null ou vide, null est renvoyé. 

Si *geo1* et *geo2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geo1* ou *geo2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Distance-function-examples"></a>

Le SQL suivant renvoie la distance entre deux polygones. 

```
SELECT ST_Distance(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 -3,-2 -1,0 -3,-1 -3))'));
```

```
  st_distance
-----------
1.4142135623731
```

Le SQL suivant renvoie la distance (en mètres) entre la porte de Brandebourg et le bâtiment du Reichstag à Berlin à l’aide d’un type de données GEOGRAPHY. 

```
SELECT ST_Distance(ST_GeogFromText('POINT(13.37761826722198 52.516411678282445)'), ST_GeogFromText('POINT(13.377950831464005 52.51705102546893)'));
```

```
   st_distance
------------------
 74.64129172609631
```

# ST\$1 DistanceSphere
<a name="ST_DistanceSphere-function"></a>

ST\$1 DistanceSphere renvoie la distance entre deux géométries ponctuelles situées sur une sphère. 

## Syntaxe
<a name="ST_DistanceSphere-function-syntax"></a>

```
ST_DistanceSphere(geom1, geom2)
```

```
ST_DistanceSphere(geom1, geom2, radius)
```

## Arguments
<a name="ST_DistanceSphere-function-arguments"></a>

 *geom1*   
Valeur de point en degrés d’un type de données `GEOMETRY` se trouvant sur une sphère. La première coordonnée du point est la valeur de la longitude. La deuxième coordonnée du point est la valeur de la latitude. Pour les géométries 3DZ, 3DM ou 4D, seules les deux premières coordonnées sont utilisées.

 *geom2*   
Valeur de point en degrés d’un type de données `GEOMETRY` se trouvant sur une sphère. La première coordonnée du point est la valeur de la longitude. La deuxième coordonnée du point est la valeur de la latitude. Pour les géométries 3DZ, 3DM ou 4D, seules les deux premières coordonnées sont utilisées.

 *rayon*   
Rayon d’une sphère du type de données `DOUBLE PRECISION`. Si aucun *rayon* n’est fourni, la sphère utilisée par défaut est la Terre et le rayon est calculé à partir de la représentation World Geodetic System (WGS) 84 de l’ellipsoïde. 

## Type de retour
<a name="ST_DistanceSphere-function-return"></a>

`DOUBLE PRECISION` dans les mêmes unités que le rayon. Si aucun rayon n’est indiqué, la distance est exprimée en mètres.

Si *geom1* ou *geom2* est null ou vide, null est renvoyé. 

Si aucun *rayon* n’est fourni, le résultat est en mètres le long de la surface de la Terre. 

Si le *rayon* est un nombre négatif, une erreur est renvoyée. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* n’est pas un point, une erreur est renvoyée. 

## Exemples
<a name="ST_DistanceSphere-function-examples"></a>

L’exemple SQL suivant calcule la distance en kilomètres entre deux points sur Terre. 

```
SELECT ROUND(ST_DistanceSphere(ST_Point(-122, 47), ST_Point(-122.1, 47.1))/ 1000, 0);
```

```
  round
-----------
 13
```

L’exemple de SQL suivant calcule les distances en kilomètres entre trois sites d’aéroport en Allemagne : Berlin Tegel (TXL), Munich International (MUC) et Frankfurt International (FRA). 

```
WITH airports_raw(code,lon,lat) AS (
(SELECT 'MUC', 11.786111, 48.353889) UNION
(SELECT 'FRA', 8.570556, 50.033333) UNION
(SELECT 'TXL', 13.287778, 52.559722)),
airports1(code,location) AS (SELECT code, ST_Point(lon, lat) FROM airports_raw),
airports2(code,location) AS (SELECT * from airports1)
SELECT (airports1.code || ' <-> ' || airports2.code) AS airports,
round(ST_DistanceSphere(airports1.location, airports2.location) / 1000, 0) AS distance_in_km
FROM airports1, airports2 WHERE airports1.code < airports2.code ORDER BY 1;
```

```
  airports   | distance_in_km 
-------------+----------------
 FRA <-> MUC |            299
 FRA <-> TXL |            432
 MUC <-> TXL |            480
```

# ST\$1 DWithin
<a name="ST_DWithin-function"></a>

ST\$1 DWithin renvoie la valeur true si la distance euclidienne entre les projections 2D des deux valeurs de géométrie en entrée n'est pas supérieure à une valeur seuil. 

## Syntaxe
<a name="ST_DWithin-function-syntax"></a>

```
ST_DWithin(geom1, geom2, threshold)
```

## Arguments
<a name="ST_DWithin-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *seuil*   
Valeur du type de données `DOUBLE PRECISION`. Cette valeur est dans les unités des arguments d’entrée. 

## Type de retour
<a name="ST_DWithin-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si le *seuil* est négatif, une erreur est renvoyée. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_DWithin-function-examples"></a>

Le SQL suivant vérifie si la distance entre deux polygones est comprise dans cinq unités. 

```
SELECT ST_DWithin(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'),5);
```

```
st_dwithin
-----------
 true
```

# ST\$1 EndPoint
<a name="ST_EndPoint-function"></a>

ST\$1 EndPoint renvoie le dernier point d'une chaîne de ligne d'entrée. La valeur SRID (Spatial Reference System Identifier) du résultat est identique à celle de la géométrie en entrée. La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_EndPoint-function-syntax"></a>

```
ST_EndPoint(geom)
```

## Arguments
<a name="ST_EndPoint-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING`. 

## Type de retour
<a name="ST_EndPoint-function-return"></a>

`GEOMETRY` 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, null est renvoyé. 

Si *geom* n’est pas un `LINESTRING`, null est renvoyé. 

## Exemples
<a name="ST_EndPoint-function-examples"></a>

Le SQL suivant renvoie une représentation de texte connu étendu (EWKT) d’un `LINESTRING` à quatre points à un objet `GEOMETRY`, et renvoie le point de fin de la linestring. 

```
SELECT ST_AsEWKT(ST_EndPoint(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 5)
```

# ST\$1Enveloppe
<a name="ST_Envelope-function"></a>

ST\$1Envelope renvoie le cadre de délimitation minimal de la géométrie en entrée, comme suit :
+ Si la géométrie en entrée est vide, la géométrie renvoyée est une copie de la géométrie en entrée. 
+ Si le cadre de délimitation minimal de la géométrie en entrée dégénère en un point, la géométrie renvoyée est un point. 
+ Si le cadre de délimitation minimal de la géométrie en entrée est unidimensionnel, une linéarité à deux points est renvoyée.
+ Si aucun des éléments précédents n’est vrai, la fonction renvoie un polygone orienté dans le sens horaire dont les sommets sont les coins de la zone de délimitation minimale.

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée. 

Pour toutes les entrées non vides, la fonction fonctionne sur la projection 2D de la géométrie en entrée. 

## Syntaxe
<a name="ST_Envelope-function-syntax"></a>

```
ST_Envelope(geom)
```

## Arguments
<a name="ST_Envelope-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Envelope-function-return"></a>

`GEOMETRY` 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_Envelope-function-examples"></a>

Le code SQL suivant convertit une représentation de texte connu (WKT) d’un `LINESTRING` à quatre points en un objet `GEOMETRY`, et renvoie un polygone dont les sommets sont les coins de la zone de délimitation minimale. 

```
SELECT ST_AsText(ST_Envelope(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))')));
```

```
    st_astext
------------------------------------
  POLYGON((0 0,0 10,20 10,20 0,0 0))
```

# ST\$1Equals
<a name="ST_Equals-function"></a>

ST\$1Equals renvoie true si les projections 2D des géométries d’entrée sont géométriquement égales. Les géométries sont considérées comme géométriquement égales si elles ont des ensembles de points égaux et si leur intérieur a une intersection non vide. 

## Syntaxe
<a name="ST_Equals-function-syntax"></a>

```
ST_Equals(geom1, geom2)
```

## Arguments
<a name="ST_Equals-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Cette valeur est comparée à *geom1* afin de déterminer si elle est égale à *geom1*. 

## Type de retour
<a name="ST_Equals-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, une erreur est renvoyée. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Equals-function-examples"></a>

Le SQL suivant vérifie si les deux polygones sont géométriquement égaux. 

```
SELECT ST_Equals(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_equals
-----------
 false
```

Le SQL suivant vérifie si les deux linestrings sont géométriquement égales. 

```
SELECT ST_Equals(ST_GeomFromText('LINESTRING(1 0,10 0)'), ST_GeomFromText('LINESTRING(1 0,5 0,10 0)'));
```

```
st_equals
-----------
 true
```

# ST\$1 ExteriorRing
<a name="ST_ExteriorRing-function"></a>

ST\$1 ExteriorRing renvoie une chaîne de ligne fermée qui représente l'anneau extérieur d'un polygone en entrée. La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_ExteriorRing-function-syntax"></a>

```
ST_ExteriorRing(geom)
```

## Arguments
<a name="ST_ExteriorRing-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_ExteriorRing-function-return"></a>

`GEOMETRY` du sous-type `LINESTRING`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *geom* est null, null est renvoyé. 

Si *geom* n’est pas un polygone, null est renvoyé. 

Si *geom* est vide, un polygone vide est renvoyé. 

## Exemples
<a name="ST_ExteriorRing-function-examples"></a>

Le SQL suivant renvoie l’anneau extérieur d’un polygone en tant que linestring fermée. 

```
SELECT ST_AsEWKT(ST_ExteriorRing(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))')));
```

```
st_asewkt
-----------
 LINESTRING(7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9)
```

# ST\$1Force2D
<a name="ST_Force2D-function"></a>

ST\$1Force2D renvoie une géométrie 2D de la géométrie en entrée. Pour les géométries 2D, une copie de l’entrée est renvoyée. Pour les géométries 3DZ, 3DM et 4D, ST\$1Force2D projette la géométrie sur le plan XY cartésien. Les points vides de la géométrie en entrée restent des points vides dans la géométrie en sortie.

## Syntaxe
<a name="ST_Force2D-function-syntax"></a>

```
ST_Force2D(geom)
```

## Arguments
<a name="ST_Force2D-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Force2D-function-return"></a>

`GEOMETRY`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, une géométrie vide est renvoyée. 

## Exemples
<a name="ST_Force2D-function-examples"></a>

Le code SQL suivant renvoie une géométrie 2D à partir d’une géométrie 3DZ. 

```
SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromText('MULTIPOINT Z(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT((0 1),EMPTY,(2 3),(5 6))
```

# ST\$1Force3D
<a name="ST_Force3D-function"></a>

ST\$1Force3D est un alias pour ST\$1Force3DZ. Pour plus d'informations, consultez [ST\$1Force3DZ](ST_Force3DZ-function.md). 

# ST\$1Force3DM
<a name="ST_Force3DM-function"></a>

ST\$1Force3DM renvoie une géométrie 3DM de la géométrie en entrée. Pour les géométries 2D, les coordonnées `m` des points non vides de la géométrie en sortie sont toutes définies sur `0`. Pour les géométries 3DM, une copie de la géométrie en entrée est renvoyée. Pour les géométries 3DZ, la géométrie est projetée sur le plan XY cartésien, et les coordonnées `m` des points non vides de la géométrie en sortie sont toutes définies sur `0`. Pour les géométries 4D, la géométrie est projetée dans l’espace XYM cartésien. Les points vides de la géométrie en entrée restent des points vides dans la géométrie en sortie.

## Syntaxe
<a name="ST_Force3DM-function-syntax"></a>

```
ST_Force3DM(geom)
```

## Arguments
<a name="ST_Force3DM-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Force3DM-function-return"></a>

`GEOMETRY`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, une géométrie vide est renvoyée. 

## Exemples
<a name="ST_Force3DM-function-examples"></a>

Le code SQL suivant renvoie une géométrie 3DM à partir d’une géométrie 3DZ. 

```
SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromText('MULTIPOINT Z(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT M ((0 1 0),EMPTY,(2 3 0),(5 6 0))
```

# ST\$1Force3DZ
<a name="ST_Force3DZ-function"></a>

ST\$1Force3DZ renvoie une géométrie 3DZ à partir de la géométrie en entrée. Pour les géométries 2D, les coordonnées `z` des points non vides de la géométrie en sortie sont toutes définies sur `0`. Pour les géométries 3DM, la géométrie est projetée sur le plan XY cartésien, et les coordonnées `z` des points non vides de la géométrie en sortie sont toutes définies sur `0`. Pour les géométries 3DZ, une copie de la géométrie en entrée est renvoyée. Pour les géométries 4D, la géométrie est projetée dans l’espace XYZ cartésien. Les points vides de la géométrie en entrée restent des points vides dans la géométrie en sortie.

## Syntaxe
<a name="ST_Force3DZ-function-syntax"></a>

```
ST_Force3DZ(geom)
```

## Arguments
<a name="ST_Force3DZ-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Force3DZ-function-return"></a>

`GEOMETRY`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, une géométrie vide est renvoyée. 

## Exemples
<a name="ST_Force3DZ-function-examples"></a>

Le code SQL suivant renvoie une géométrie 3DZ à partir d’une géométrie 3DM. 

```
SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromText('MULTIPOINT M(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT Z ((0 1 0),EMPTY,(2 3 0),(5 6 0))
```

# ST\$1Force4D
<a name="ST_Force4D-function"></a>

ST\$1Force4D renvoie une géométrie 4D de la géométrie en entrée. Pour les géométries 2D, les coordonnées `z` et `m` des points non vides de la géométrie en sortie sont toutes définies sur `0`. Pour les géométries 3DM, les coordonnées `z` des points non vides de la géométrie en sortie sont toutes définies sur `0`. Pour les géométries 3DZ, les coordonnées `m` des points non vides de la géométrie en sortie sont toutes définies sur `0`. Pour les géométries 4D, une copie de la géométrie en entrée est renvoyée. Les points vides de la géométrie en entrée restent des points vides dans la géométrie en sortie.

## Syntaxe
<a name="ST_Force4D-function-syntax"></a>

```
ST_Force4D(geom)
```

## Arguments
<a name="ST_Force4D-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Force4D-function-return"></a>

`GEOMETRY`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, une géométrie vide est renvoyée. 

## Exemples
<a name="ST_Force4D-function-examples"></a>

Le code SQL suivant renvoie une géométrie 4D à partir d’une géométrie 3DM. 

```
SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromText('MULTIPOINT M(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT ZM ((0 1 0 2),EMPTY,(2 3 0 4),(5 6 0 7))
```

# ST\$1 GeoHash
<a name="ST_GeoHash-function"></a>

ST\$1 GeoHash renvoie la `geohash` représentation du point d'entrée avec la précision spécifiée. La valeur de précision par défaut est de 20. Pour plus d’informations sur la définition de geohash, consultez [Geohash](https://en.wikipedia.org/wiki/Geohash) dans Wikipédia.

## Syntaxe
<a name="ST_GeoHash-function-syntax"></a>

```
ST_GeoHash(geom)
```

```
ST_GeoHash(geom, precision)
```

## Arguments
<a name="ST_GeoHash-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *precision*   
Valeur du type de données `INTEGER`. La valeur par défaut est de 20.

## Type de retour
<a name="ST_GeoHash-function-return"></a>

`GEOMETRY`

La fonction renvoie la représentation `geohash` du point d’entrée. 

Si le point d’entrée est vide, la fonction renvoie null. 

Si la géométrie d’entrée n’est pas un point, la fonction renvoie une erreur. 

## Exemples
<a name="ST_GeoHash-function-examples"></a>

Le SQL suivant renvoie la représentation geohash d’un point d’entrée. 

```
SELECT ST_GeoHash(ST_GeomFromText('POINT(45 -45)'), 25) AS geohash;
```

```
          geohash
---------------------------
 m000000000000000000000gzz
```

Le SQL suivant renvoie null parce que le point d’entrée est vide. 

```
SELECT ST_GeoHash(ST_GeomFromText('POINT EMPTY'), 10) IS NULL AS result;
```

```
 result
---------
 true
```

# ST\$1 GeogFromText
<a name="ST_GeogFromText-function"></a>

ST\$1 GeogFromText construit un objet géographique à partir d'une représentation en texte connu (WKT) ou en texte connu étendu (EWKT) d'une géographie en entrée. 

## Syntaxe
<a name="ST_GeogFromText-function-syntax"></a>

```
ST_GeogFromText(wkt_string)
```

## Arguments
<a name="ST_GeogFromText-function-arguments"></a>

 *wkt\$1string*   
Valeur d’un type de données `VARCHAR` qui est une représentation WKT ou EWKT d’une géographie.

## Type de retour
<a name="ST_GeogFromText-function-return"></a>

`GEOGRAPHY`

Si la valeur SRID est définie sur la valeur fournie dans l’entrée. Si la valeur SRID n’est pas fournie, elle est définie sur `4326`. 

Si *wkt\$1string* est null, null est renvoyé. 

Si *wkt\$1string* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeogFromText-function-examples"></a>

Le code SQL suivant construit un polygone à partir d’un objet géographique avec une valeur SRID. 

```
SELECT ST_AsEWKT(ST_GeogFromText('SRID=4324;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))'));
```

```
  st_asewkt
------------------------------------------------
 SRID=4324;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))
```

Le code SQL suivant construit un polygone à partir d’un objet géographique. La valeur SRID est définie sur `4326`.

```
SELECT ST_AsEWKT(ST_GeogFromText('POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))'));
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))
```

# ST\$1WKB GeogFrom
<a name="ST_GeogFromWKB-function"></a>

ST\$1 GeogFrom WKB construit un objet de géographie à partir d'une représentation binaire hexadécimale connue (WKB) d'une géographie en entrée. 

## Syntaxe
<a name="ST_GeogFromWKB-function-syntax"></a>

```
ST_GeogFromWKB(wkb_string)
```

## Arguments
<a name="ST_GeogFromWKB-function-arguments"></a>

 *wkb\$1string*   
Valeur d’un type de données `VARCHAR` qui est une représentation WKB hexadécimale d’une géographie.

## Type de retour
<a name="ST_GeogFromWKB-function-return"></a>

`GEOGRAPHY`

Si la valeur SRID est fournie, elle est définie sur la valeur fournie. Si la valeur SRID n’est pas fournie, elle est définie sur `4326`. 

Si *wkb\$1string* est null, null est renvoyé. 

Si *wkb\$1string* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeogFromWKB-function-examples"></a>

Le code SQL suivant construit une géographie à partir d’une valeur WKB hexadécimale. 

```
SELECT ST_AsEWKT(ST_GeogFromWKB('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));
```

```
 st_asewkt
------------------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1GeometryN
<a name="ST_GeometryN-function"></a>

ST\$1GeometryN renvoie une géométrie pointée par l’index en entrée de la géométrie en entrée, comme suit : 
+ Si l’entrée est un point, une linestring ou un polygone, une géométrie est renvoyée telle qu’elle est si l’index est égal à un (1), et null si l’index est différent d’un (1).
+ Si l’entrée est une collection multipoint, multilinestring, multipolygone ou de géométries, une collection de points, linestrings, polygones ou géométries est renvoyée telle que pointée par un index en entrée. 

L’index est basé sur un. L’identificateur du système de référence spatiale (SRID) du résultat est identique à celui de la géométrie en entrée. La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_GeometryN-function-syntax"></a>

```
ST_GeometryN(geom, index)
```

## Arguments
<a name="ST_GeometryN-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *index*   
Valeur de type de données `INTEGER` qui représente la position d’un index basé sur un. 

## Type de retour
<a name="ST_GeometryN-function-return"></a>

`GEOMETRY` 

Si *geom* ou *index* est null, null est renvoyé. 

Si *l’index* est hors de portée, une erreur est renvoyée. 

## Exemples
<a name="ST_GeometryN-function-examples"></a>

Le SQL suivant renvoie les géométries d’une collection de géométries. 

```
WITH tmp1(idx) AS (SELECT 1 UNION SELECT 2),
tmp2(g) AS (SELECT ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))'))
SELECT idx, ST_AsEWKT(ST_GeometryN(g, idx)) FROM tmp1, tmp2 ORDER BY idx;
```

```
 idx |          st_asewkt           
-----+------------------------------
   1 | POLYGON((0 0,10 0,0 10,0 0))
   2 | LINESTRING(20 10,20 0,10 0)
```

# ST\$1 GeometryType
<a name="ST_GeometryType-function"></a>

ST\$1 GeometryType renvoie le sous-type d'une géométrie d'entrée sous forme de chaîne. 

Pour les entrées de géométrie 3DM, 3DZ et 4D, ST\$1 GeometryType renvoie le même résultat que pour les entrées de géométrie 2D.

## Syntaxe
<a name="ST_GeometryType-function-syntax"></a>

```
ST_GeometryType(geom)
```

## Arguments
<a name="ST_GeometryType-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_GeometryType-function-return"></a>

`VARCHAR` représentant le sous-type de *geom*. 

Si *geom* est null, null est renvoyé. 

Les valeurs renvoyées sont comme suit :


| Valeur de chaîne renvoyée | Sous-type de géométrie | 
| --- | --- | 
| `ST_Point` | Renvoyé si *geom* est un sous-type `POINT`  | 
| `ST_LineString` | Renvoyé si *geom* est un sous-type `LINESTRING`  | 
| `ST_Polygon` | Renvoyé si *geom* est un sous-type `POLYGON`  | 
| `ST_MultiPoint` | Renvoyé si *geom* est un sous-type `MULTIPOINT`  | 
| `ST_MultiLineString` | Renvoyé si *geom* est un sous-type `MULTILINESTRING`  | 
| `ST_MultiPolygon` | Renvoyé si *geom* est un sous-type `MULTIPOLYGON`  | 
| `ST_GeometryCollection` | Renvoyé si *geom* est un sous-type `GEOMETRYCOLLECTION`  | 

## Exemples
<a name="ST_GeometryType-function-examples"></a>

Le SQL suivant renvoie le sous-type de la géométrie de linestring d’entrée. 

```
SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_geometrytype
-------------
 ST_LineString
```

# ST\$1WEBB GeomFrom
<a name="ST_GeomFromEWKB-function"></a>

ST\$1 GeomFrom EWKB construit un objet géométrique à partir de la représentation binaire étendue connue (EWKB) d'une géométrie d'entrée. 

ST\$1 GeomFrom EWKB accepte les géométries 3DZ, 3DM et 4D écrites au format hexadécimal WKB et EWKB.

## Syntaxe
<a name="ST_GeomFromEWKB-function-syntax"></a>

```
ST_GeomFromEWKB(ewkb_string)
```

## Arguments
<a name="ST_GeomFromEWKB-function-arguments"></a>

 *ewkb\$1string*   
Valeur d’un type de données `VARCHAR` qui est une représentation EWKB hexadécimale d’une géométrie.

## Type de retour
<a name="ST_GeomFromEWKB-function-return"></a>

`GEOMETRY`

Si *ewkb\$1string* est null, null est renvoyé. 

Si *ewkb\$1string* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeomFromEWKB-function-examples"></a>

Le SQL suivant construit un polygone à partir d’une valeur EWKB et renvoie la représentation EWKT d’un polygone. 

```
SELECT ST_AsEWKT(ST_GeomFromEWKB('0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));
```

```
 st_asewkt
--------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1EWKT GeomFrom
<a name="ST_GeomFromEWKT-function"></a>

ST\$1 GeomFrom EWKT construit un objet géométrique à partir de la représentation étendue en texte connu (EWKT) d'une géométrie d'entrée. 

ST\$1 GeomFrom EWKT accepte les formats 3DZ, 3DM et 4D où le type de géométrie est préfixé par Z, M ou ZM, respectivement.

## Syntaxe
<a name="ST_GeomFromEWKT-function-syntax"></a>

```
ST_GeomFromEWKT(ewkt_string)
```

## Arguments
<a name="ST_GeomFromEWKT-function-arguments"></a>

 *ewkt\$1string*   
Valeur du type de données `VARCHAR` ou expression qui correspond à un `VARCHAR`, c’est-à-dire une représentation EWKT d’une géométrie.  
Vous pouvez utiliser le mot-clé WKT `EMPTY` pour désigner un point vide, un multipoint avec un point vide ou une collection de géométries avec un point vide. Dans l’exemple suivant, un point vide est créé.   

```
ST_GeomFromEWKT('SRID=4326;POINT EMPTY');
```

## Type de retour
<a name="ST_GeomFromEWKT-function-return"></a>

`GEOMETRY`

Si *ewkt\$1string* est null, null est renvoyé. 

Si *ewkt\$1string* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeomFromEWKT-function-examples"></a>

Le code SQL suivant construit une multilinestring à partir d’une valeur EWKT et renvoie une géométrie. Il renvoie également le résultat ST\$1AsEWKT de la géométrie. 

```
SELECT ST_GeomFromEWKT('SRID=4326;MULTILINESTRING((1 0,1 0),(2 0,3 0),(4 0,5 0,6 0))') as geom, ST_AsEWKT(geom);
```

```
                                                                                                                                                       geom                                                                                                                                                       |                          st_asewkt                           
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------
 0105000020E610000003000000010200000002000000000000000000F03F0000000000000000000000000000F03F00000000000000000102000000020000000000000000000040000000000000000000000000000008400000000000000000010200000003000000000000000000104000000000000000000000000000001440000000000000000000000000000018400000000000000000 | SRID=4326;MULTILINESTRING((1 0,1 0),(2 0,3 0),(4 0,5 0,6 0))
```

# ST\$1 GeomFromGeoHash
<a name="ST_GeomFromGeoHash-function"></a>

ST\$1 GeomFromGeoHash construit un objet géométrique à partir de la représentation géohasée d'une géométrie d'entrée. ST\$1 GeomFromGeoHash renvoie une géométrie bidimensionnelle (2D) dont l'identifiant de référence spatiale (SRID) est égal à zéro (0). Pour plus d’informations sur le format geohash, consultez [Geohash](https://en.wikipedia.org/wiki/Geohash) dans Wikipédia. 

## Syntaxe
<a name="ST_GeomFromGeoHash-function-syntax"></a>

```
ST_GeomFromGeoHash(geohash_string)
```

```
ST_GeomFromGeoHash(geohash_string, precision)
```

## Arguments
<a name="ST_GeomFromGeoHash-function-arguments"></a>

 *geohash\$1string*   
Valeur de type de données `VARCHAR` ou expression qui correspond à un type `VARCHAR`, qui est une représentation geohash d’une géométrie.

 *precision*   
Valeur du type de données `INTEGER` qui représente la précision du geohash. La valeur est le nombre de caractères du geohash à utiliser à des fins de précision. Si la valeur n’est pas spécifiée, inférieure à zéro ou supérieure à la longueur de *geohash\$1string*, alors la longueur *geohash\$1string* est utilisée.

## Type de retour
<a name="ST_GeomFromGeoHash-function-return"></a>

`GEOMETRY`

Si *geohash\$1string* est null, null est renvoyé. 

Si *geohash\$1string* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeomFromGeoHash-function-examples"></a>

Le code SQL suivant renvoie un polygone de haute précision. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646))
```

Le code SQL suivant renvoie un point de haute précision. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz00'));
```

```
 st_asewkt       
-----------------------
 POINT(-115.172816 36.114646)
```

Le code SQL suivant renvoie un polygone de faible précision. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qq'));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.3125 35.15625,-115.3125 36.5625,-113.90625 36.5625,-113.90625 35.15625,-115.3125 35.15625))
```

Le code SQL suivant renvoie un polygone de précision 3. 

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 3));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.3125 35.15625,-115.3125 36.5625,-113.90625 36.5625,-113.90625 35.15625,-115.3125 35.15625))
```

# ST\$1JSON GeomFromGeo
<a name="ST_GeomFromGeoJSON-function"></a>

ST\$1 GeomFromGeo JSON construit un objet de géométrie à partir de la représentation GeoJSON d'une géométrie en entrée. Pour plus d’informations sur le format GeoJSON, consultez [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) dans Wikipédia. 

S’il y a au moins un point avec trois coordonnées ou plus, la géométrie résultante est 3DZ, où la composante Z est nulle pour les points qui n’ont que deux coordonnées. Si tous les points du fichier GeoJSON en entrée contiennent deux coordonnées ou sont vides, ST\$1 GeomFromGeo JSON renvoie une géométrie 2D. La géométrie renvoyée est toujours dotée de l’identifiant de référence spatiale (SRID) 4326.

## Syntaxe
<a name="ST_GeomFromGeoJSON-function-syntax"></a>

```
ST_GeomFromGeoJSON(geojson_string)
```

## Arguments
<a name="ST_GeomFromGeoJSON-function-arguments"></a>

 *geojson\$1string*   
Valeur de type de données `VARCHAR` ou `SUPER`, ou expression qui correspond à un type `VARCHAR`, qui est une représentation GeoJSON d’une géométrie.

## Type de retour
<a name="ST_GeomFromGeoJSON-function-return"></a>

`GEOMETRY`

Si *geojson\$1string* est null, null est renvoyé. 

Si *geojson\$1string* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeomFromGeoJSON-function-examples"></a>

Le code SQL suivant renvoie une géométrie 2D représentée dans la représentation GeoJSON en entrée. 

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[1,2]}'));
```

```
 st_asewkt       
-----------------------
 SRID=4326;POINT(1 2)
```

Le code SQL suivant renvoie une géométrie 3DZ représentée dans la représentation GeoJSON en entrée. 

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}'));
```

```
 st_asewkt  
------------------------------------------
 SRID=4326;LINESTRING Z (1 2 3,4 5 6,7 8 9)
```

Le code SQL suivant renvoie la géométrie 3DZ quand un seul point possède trois coordonnées alors que tous les autres points ont deux coordonnées dans la représentation GeoJSON en entrée. 

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[0, 0],[0, 1, 8],[1, 0],[0, 0]]]}'));
```

```
 st_asewkt  
------------------------------------------------
 SRID=4326;POLYGON Z ((0 0 0,0 1 8,1 0 0,0 0 0))
```

# ST\$1 GeomFromGeoSquare
<a name="ST_GeomFromGeoSquare-function"></a>

ST\$1 GeomFromGeoSquare renvoie une géométrie qui couvre la zone représentée par une valeur géosquare en entrée. La géométrie renvoyée est toujours bidimensionnelle. Pour calculer une valeur de geosquare, consultez [ST\$1 GeoSquare](ST_GeoSquare-function.md).

## Syntaxe
<a name="ST_GeomFromGeoSquare-function-syntax"></a>

```
ST_GeomFromGeoSquare(geosquare)
```

```
ST_GeomFromGeoSquare(geosquare, max_depth)
```

## Arguments
<a name="ST_GeomFromGeoSquare-function-arguments"></a>

 *geosquare*   
Valeur de type de données `BIGINT` ou expression ayant pour résultat un type `BIGINT` qui est une valeur de geosquare qui décrit la séquence de subdivisions effectuées sur le domaine initial pour atteindre le carré souhaité. Cette valeur est calculée par [ST\$1 GeoSquare](ST_GeoSquare-function.md).

 *max\$1depth*   
Valeur du type de données `INTEGER` qui représente le nombre maximal de subdivisions de domaine effectuées sur le domaine initial. Cette valeur doit être supérieure ou égale à `1`.

## Type de retour
<a name="ST_GeomFromGeoSquare-function-return"></a>

`GEOMETRY`

Si *geosquare* n’est pas valide, la fonction renvoie une erreur. 

Si l’entrée *max\$1depth* n’est pas comprise dans la plage, la fonction renvoie une erreur. 

## Exemples
<a name="ST_GeomFromGeoSquare-function-examples"></a>

Le code SQL suivant renvoie une géométrie à partir d’une valeur de geosquare.

```
SELECT ST_AsText(ST_GeomFromGeoSquare(797852));
```

```
 st_astext       
--------------------------------------------------------------------------------------------------------------------
 POLYGON((13.359375 52.3828125,13.359375 52.734375,13.7109375 52.734375,13.7109375 52.3828125,13.359375 52.3828125))
```

Le code SQL suivant renvoie une géométrie à partir d’une valeur de geosquare et d’une profondeur maximale de `3`. 

```
SELECT ST_AsText(ST_GeomFromGeoSquare(797852, 3));
```

```
 st_astext       
--------------------------------------
 POLYGON((0 45,0 90,45 90,45 45,0 45))
```

Le code SQL suivant calcule d’abord la valeur de geosquare pour Seattle en spécifiant la coordonnée X comme longitude et la coordonnée Y comme latitude (-122,3, 47,6). Il renvoie ensuite le polygone du geosquare. Bien que la sortie soit une géométrie bidimensionnelle, elle peut être utilisée pour calculer des données spatiales en termes de longitude et de latitude.

```
SELECT ST_AsText(ST_GeomFromGeoSquare(ST_GeoSquare(ST_Point(-122.3, 47.6))));
```

```
 st_astext
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POLYGON((-122.335167014971 47.6080129947513,-122.335167014971 47.6080130785704,-122.335166931152 47.6080130785704,-122.335166931152 47.6080129947513,-122.335167014971 47.6080129947513))
```

# ST\$1 GeomFromText
<a name="ST_GeomFromText-function"></a>

ST\$1 GeomFromText construit un objet géométrique à partir d'une représentation textuelle connue (WKT) d'une géométrie d'entrée. 

ST\$1 GeomFromText accepte 3DZ, 3DM et 4D où le type de géométrie est préfixé par Z, M ou ZM, respectivement.

## Syntaxe
<a name="ST_GeomFromText-function-syntax"></a>

```
ST_GeomFromText(wkt_string)
```

```
ST_GeomFromText(wkt_string, srid)
```

## Arguments
<a name="ST_GeomFromText-function-arguments"></a>

 *wkt\$1string*   
Valeur d’un type de données `VARCHAR` qui est une représentation WKT d’une géométrie.  
Vous pouvez utiliser le mot-clé WKT `EMPTY` pour désigner un point vide, un multipoint avec un point vide ou une collection de géométries avec un point vide. L’exemple suivant crée un multipoint avec un point vide et un point non vide.   

```
ST_GeomFromEWKT('MULTIPOINT(1 0,EMPTY)');
```

 *srid*   
Valeur du type de données `INTEGER` qui est un identifiant de référence spatiale (SRID). Si une valeur SRID est fournie, la géométrie renvoyée a cette valeur de SRID. Sinon, la valeur de SRID de la géométrie renvoyée est définie sur 0.

## Type de retour
<a name="ST_GeomFromText-function-return"></a>

`GEOMETRY`

Si *wkt\$1string* ou *srid* est null, null est renvoyé. 

Si *srid* est négatif, null est renvoyé. 

Si *wkt\$1string* n’est pas valide, une erreur est renvoyée. 

Si *srid* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeomFromText-function-examples"></a>

Le SQL suivant construit un objet géométrique à partir de la représentation WKT et de la valeur SRID. 

```
SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326);
```

```
st_geomfromtext
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1WKB GeomFrom
<a name="ST_GeomFromWKB-function"></a>

ST\$1 GeomFrom WKB construit un objet de géométrie à partir d'une représentation binaire hexadécimale connue (WKB) d'une géométrie d'entrée. 

ST\$1 GeomFrom WKB accepte les géométries 3DZ, 3DM et 4D écrites au format hexadécimal WKB.

## Syntaxe
<a name="ST_GeomFromWKB-function-syntax"></a>

```
ST_GeomFromWKB(wkb_string)
```

```
ST_GeomFromWKB(wkb_string, srid)
```

## Arguments
<a name="ST_GeomFromWKB-function-arguments"></a>

 *wkb\$1string*   
Valeur d’un type de données `VARCHAR` qui est une représentation WKB hexadécimale d’une géométrie.

 *srid*   
Valeur du type de données `INTEGER` qui est un identifiant de référence spatiale (SRID). Si une valeur SRID est fournie, la géométrie renvoyée a cette valeur de SRID. Sinon, la valeur de SRID de la géométrie renvoyée est définie sur 0.

## Type de retour
<a name="ST_GeomFromWKB-function-return"></a>

`GEOMETRY`

Si *wkb\$1string* ou *srid* est null, null est renvoyé. 

Si *srid* est négatif, null est renvoyé. 

Si *wkb\$1string* n’est pas valide, une erreur est renvoyée. 

Si *srid* n’est pas valide, une erreur est renvoyée. 

## Exemples
<a name="ST_GeomFromWKB-function-examples"></a>

Le SQL suivant construit un polygone à partir d’une valeur WKB et renvoie la représentation WKT d’un polygone. 

```
SELECT ST_AsText(ST_GeomFromWKB('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));            
```

```
 st_astext
--------------------------------
 POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1 GeoSquare
<a name="ST_GeoSquare-function"></a>

ST\$1 subdivise GeoSquare récursivement le domaine ([-180, 180], [-90, 90]) en régions carrées égales appelées *géoscarrés* d'une profondeur spécifiée. La subdivision est basée sur l’emplacement d’un point donné. L’un des geosquares contenant le point est subdivisé à chaque étape jusqu’à atteindre la profondeur maximale. La sélection de ce geosquare est stable, c’est-à-dire que le résultat de la fonction dépend uniquement des arguments saisis. La fonction renvoie une valeur unique qui identifie le geosquare final dans lequel se trouve le point.

Le ST\$1 GeoSquare accepte un POINT où la coordonnée x représente la longitude et la coordonnée y représente la latitude. La longitude et la latitude sont limitées à [-180, 180] et [-90, 90], respectivement. La sortie de ST\$1 GeoSquare peut être utilisée comme entrée de la [ST\$1 GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md) fonction.

Il y a 360° autour de l’arc de la circonférence équatoriale de la Terre qui sont divisés en deux hémisphères (est et ouest), chacun ayant 180° de lignes longitudinales (méridiens) à partir du méridien 0°. Par convention, les longitudes orientales sont des coordonnées « \$1 » (positives) lorsqu’elles sont projetées sur l’axe des X sur un plan cartésien et les longitudes occidentales sont des coordonnées « - » (négatives) lorsqu’elles sont projetées sur l’axe des X sur un plan cartésien. Il existe des lignes latitudinales de 90° au nord et au sud de la circonférence équatoriale 0° de la Terre, chacune étant parallèle à la circonférence équatoriale 0° de la Terre. Par convention, les lignes latitudinales nord coupent l’axe Y « \$1 » (positif) lorsqu’elles sont projetées sur un plan cartésien et les lignes latitudinales sud coupent l’axe Y « - » (négatif) lorsqu’elles sont projetées sur un plan cartésien. La grille sphérique formée par l’intersection de lignes longitudinales et de lignes latitudinales est convertie en une grille projetée sur un plan cartésien avec des coordonnées X positives et négatives standard et des coordonnées Y positives et négatives sur le plan cartésien.

Le but de ST\$1 GeoSquare est de marquer ou de marquer des points proches avec des valeurs de code égales. Les points situés dans le même geosquare reçoivent la même valeur de code. Un geosquare est utilisé pour coder les coordonnées géographiques (latitude et longitude) en entier. Une région plus vaste est divisée en grilles pour délimiter une zone sur une carte avec différentes résolutions. Un geosquare peut être utilisé pour l’indexation spatiale, la discrétisation spatiale, les recherches de proximité, la recherche de lieux et la création d’identifiants de lieux uniques. La fonction [ST\$1 GeoHash](ST_GeoHash-function.md) suit un processus similaire consistant à diviser une région en grilles, mais son codage est différent.

## Syntaxe
<a name="ST_GeoSquare-function-syntax"></a>

```
ST_GeoSquare(geom)
```

```
ST_GeoSquare(geom, max_depth)
```

## Arguments
<a name="ST_ST_GeoSquare-function-arguments"></a>

 *geom*   
Valeur POINT de type de données `GEOMETRY` ou expression ayant pour résultat un sous-type POINT. La coordonnée X (longitude) du point doit se situer dans la plage suivante : `-180` à `180`. La coordonnée Y (latitude) du point doit se situer dans la plage suivante : `-90` à `90`. 

 *max\$1depth*   
Valeur du type de données `INTEGER`. Nombre maximal de fois où le domaine contenant le point est subdivisé de manière récursive. La valeur doit être un entier compris entre 1 et 32. La valeur par défaut est 32. Le nombre final réel de subdivisions est inférieur ou égal à la valeur *max\$1depth* spécifiée. 

## Type de retour
<a name="ST_GeoSquare-function-return"></a>

`BIGINT`

La fonction renvoie une valeur unique qui identifie le geosquare final dans lequel se trouve le point d’entrée. 

Si la valeur saisie pour *geom* n’est pas un point, la fonction renvoie une erreur. 

Si la valeur saisie pour le point est vide, la valeur renvoyée n’est pas une entrée valide pour la fonction [ST\$1 GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md). Utilisez cette [ST\$1 IsEmpty](ST_IsEmpty-function.md) fonction pour empêcher les appels à ST\$1 GeoSquare avec un point vide. 

Si la valeur saisie pour le point n’est pas comprise dans la plage, la fonction renvoie une erreur. 

Si la valeur saisie pour *max\$1depth* n’est pas comprise dans la plage, la fonction renvoie une erreur. 

## Exemples
<a name="ST_ST_GeoSquare-function-examples"></a>

Le code SQL suivant renvoie un geosquare depuis un point d’entrée. 

```
SELECT ST_GeoSquare(ST_Point(13.5, 52.5));
```

```
  st_geosquare
-----------------------
 -4410772491521635895
```

Le code SQL suivant renvoie un geosquare depuis un point d’entrée avec une profondeur maximale de `10`. 

```
SELECT ST_GeoSquare(ST_Point(13.5, 52.5), 10);
```

```
 st_geosquare
--------------
 797852
```

# ST\$1N InteriorRing
<a name="ST_InteriorRingN-function"></a>

ST\$1 InteriorRing N renvoie une chaîne de ligne fermée correspondant à l'anneau intérieur d'un polygone d'entrée à la position d'index. La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_InteriorRingN-function-syntax"></a>

```
ST_InteriorRingN(geom, index)
```

## Arguments
<a name="ST_InteriorRingN-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *index*   
Valeur de type de données `INTEGER` qui représente la position d’un anneau d’index à basé sur un. 

## Type de retour
<a name="ST_InteriorRingN-function-return"></a>

`GEOMETRY` du sous-type `LINESTRING`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *geom* ou *index* est null, null est renvoyé. 

Si *l’index* est hors de portée, null est renvoyé. 

Si *geom* n’est pas un polygone, null est renvoyé. 

Si *geom* est un polygone vide, null est renvoyé. 

## Exemples
<a name="ST_InteriorRingN-function-examples"></a>

Le code SQL suivant renvoie le deuxième anneau du polygone en tant que linestring fermée. 

```
SELECT ST_AsEWKT(ST_InteriorRingN(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'),2));
```

```
st_asewkt
-----------
 LINESTRING(12 14,15 14,13 11,12 14)
```

# ST\$1Intersects
<a name="ST_Intersects-function"></a>

ST\$1Intersects renvoie true si les projections 2D des deux géométries d’entrée ont au moins un point en commun. 

## Syntaxe
<a name="ST_Intersects-function-syntax"></a>

```
ST_Intersects(geom1, geom2)
```

## Arguments
<a name="ST_Intersects-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Intersects-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Intersects-function-examples"></a>

Le SQL suivant vérifie si le premier polygone coupe le deuxième polygone. 

```
SELECT ST_Intersects(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'), ST_GeomFromText('MULTIPOINT((4 4),(6 6))'));
```

```
st_intersects              
-------------
 true
```

# ST\$1Intersection
<a name="ST_Intersection-function"></a>

ST\$1Intersection renvoie une géométrie représentant l’intersection de deux géométries définie par des points. En d’autres termes, il renvoie la partie des deux géométries d’entrée partagées entre elles. 

## Syntaxe
<a name="ST_Intersection-function-syntax"></a>

```
ST_Intersection(geom1, geom2)
```

## Arguments
<a name="ST_Intersection-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Intersection-function-return"></a>

`GEOMETRY`

Si *geom1* et *geom2* ne partagent aucun espace (ils sont disjoints), une géométrie vide est alors renvoyée. 

Si *geom1* ou *geom2* est vide, une géométrie vide est renvoyée. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

Si *geom1* ou *geom2* n’est pas une géométrie bidimensionnelle (2D), une erreur est renvoyée. 

## Exemples
<a name="ST_Intersection-function-examples"></a>

Le code SQL suivant renvoie la géométrie non vide représentant l’intersection de deux géométries d’entrée. 

```
SELECT ST_AsEWKT(ST_Intersection(ST_GeomFromText('polygon((0 0,100 100,0 200,0 0))'), ST_GeomFromText('polygon((0 0,10 0,0 10,0 0))')));
```

```
        st_asewkt        
-------------------------
 POLYGON((0 0,0 10,5 5,0 0))
```

Le code SQL suivant renvoie une géométrie vide lorsque des géométries d’entrée disjointes (non croisées) sont transmises. 

```
SELECT ST_AsEWKT(ST_Intersection(ST_GeomFromText('linestring(0 100,0 0)'), ST_GeomFromText('polygon((1 0,10 0,1 10,1 0))')));
```

```
    st_asewkt     
------------------
 LINESTRING EMPTY
```

# ST\$1CCW IsPolygon
<a name="ST_IsPolygonCCW-function"></a>

ST\$1 IsPolygon CCW renvoie true si la projection 2D du polygone ou du multipolygone en entrée est dans le sens antihoraire. Si la géométrie en entrée est un point, une linestring, un multipoint ou une multilinestring, alors la valeur true est renvoyée. Pour les collections de géométries, ST\$1 IsPolygon CCW renvoie la valeur true si toutes les géométries de la collection sont dans le sens antihoraire. 

## Syntaxe
<a name="ST_IsPolygonCCW-function-syntax"></a>

```
ST_IsPolygonCCW(geom)
```

## Arguments
<a name="ST_IsPolygonCCW-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_IsPolygonCCW-function-return"></a>

`BOOLEAN`

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_IsPolygonCCW-function-examples"></a>

Le code SQL suivant vérifie si le polygone est dans le sens inverse des aiguilles d’une montre. 

```
SELECT ST_IsPolygonCCW(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'));
```

```
 st_ispolygonccw
----------
 true
```

# ST\$1CW IsPolygon
<a name="ST_IsPolygonCW-function"></a>

ST\$1 IsPolygon CW renvoie true si la projection 2D du polygone ou du multipolygone en entrée est dans le sens des aiguilles d'une montre. Si la géométrie en entrée est un point, une linestring, un multipoint ou une multilinestring, alors la valeur true est renvoyée. Pour les collections de géométries, ST\$1 IsPolygon CW renvoie true si toutes les géométries de la collection sont dans le sens des aiguilles d'une montre. 

## Syntaxe
<a name="ST_IsPolygonCW-function-syntax"></a>

```
ST_IsPolygonCW(geom)
```

## Arguments
<a name="ST_IsPolygonCW-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_IsPolygonCW-function-return"></a>

`BOOLEAN`

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_IsPolygonCW-function-examples"></a>

Le code SQL suivant vérifie si le polygone est dans le sens des aiguilles d’une montre. 

```
SELECT ST_IsPolygonCW(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'));
```

```
 st_ispolygonccw
----------
 true
```

# ST\$1 IsClosed
<a name="ST_IsClosed-function"></a>

ST\$1 IsClosed renvoie la valeur true si la projection 2D de la géométrie d'entrée est fermée. Les règles suivantes définissent une géométrie fermée : 
+ La géométrie d’entrée est un point ou un multipoint. 
+ La géométrie d’entrée est une linestring, et les points de début et de fin de la linestring coïncident. 
+ La géométrie d’entrée est une multilinestring non vide et toutes ses linestrings sont vides. 
+ La géométrie d’entrée est un polygone non vide, tous les anneaux du polygones sont non vides, et les points de début et de fin de tous ses anneaux coïncident. 
+ La géométrie d’entrée est un multipolygone non vide et tous ses polygones sont vides.
+ La géométrie d’entrée est une collection géométrique non vide et tous ses composants sont fermés. 

## Syntaxe
<a name="ST_IsClosed-function-syntax"></a>

```
ST_IsClosed(geom)
```

## Arguments
<a name="ST_IsClosed-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_IsClosed-function-return"></a>

`BOOLEAN`

Si *geom* est un point vide, false est renvoyé. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_IsClosed-function-examples"></a>

Le SQL suivant vérifie si le polygone est fermé. 

```
SELECT ST_IsClosed(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_isclosed
-----------
 true
```

# ST\$1 IsCollection
<a name="ST_IsCollection-function"></a>

ST\$1 IsCollection renvoie true si la géométrie d'entrée est l'un des sous-types suivants :`GEOMETRYCOLLECTION`,`MULTIPOINT`, `MULTILINESTRING` ou. `MULTIPOLYGON` 

## Syntaxe
<a name="ST_IsCollection-function-syntax"></a>

```
ST_IsCollection(geom)
```

## Arguments
<a name="ST_IsCollection-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_IsCollection-function-return"></a>

`BOOLEAN`

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_IsCollection-function-examples"></a>

Le SQL suivant vérifie si le polygone est une collection. 

```
SELECT ST_IsCollection(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_iscollection
-----------
 false
```

# ST\$1 IsEmpty
<a name="ST_IsEmpty-function"></a>

ST\$1 IsEmpty renvoie true si la géométrie d'entrée est vide. Une géométrie n’est pas vide si elle contient au moins un point non vide. 

ST\$1 IsEmpty renvoie true si la géométrie en entrée comporte au moins un point non vide. 

## Syntaxe
<a name="ST_IsEmpty-function-syntax"></a>

```
ST_IsEmpty(geom)
```

## Arguments
<a name="ST_IsEmpty-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_IsEmpty-function-return"></a>

`BOOLEAN`

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_IsEmpty-function-examples"></a>

Le SQL suivant vérifie si le polygone spécifié est vide. 

```
SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_isempty
-----------
 false
```

# ST\$1 IsRing
<a name="ST_IsRing-function"></a>

ST\$1 IsRing renvoie true si la chaîne de ligne d'entrée est un anneau. Un linestring est un anneau s’il est fermé et simple. 

## Syntaxe
<a name="ST_IsRing-function-syntax"></a>

```
ST_IsRing(geom)
```

## Arguments
<a name="ST_IsRing-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. La géométrie doit être une `LINESTRING`.

## Type de retour
<a name="ST_IsRing-function-return"></a>

`BOOLEAN`

Si *geom* n’est pas une `LINESTRING`, une erreur est renvoyée. 

## Exemples
<a name="ST_IsRing-function-examples"></a>

Le code SQL suivant vérifie si la linestring spécifiée est un anneau. 

```
SELECT ST_IsRing(ST_GeomFromText('linestring(0 0, 1 1, 1 2, 0 0)'));
```

```
st_isring
-----------
 true
```

# ST\$1 IsSimple
<a name="ST_IsSimple-function"></a>

ST\$1 IsSimple renvoie la valeur true si la projection 2D de la géométrie d'entrée est simple. Pour plus d’informations sur la définition d’une géométrie simple, consultez [Simplicité géométrique](spatial-terminology.md#spatial-terminology-simplicity). 

## Syntaxe
<a name="ST_IsSimple-function-syntax"></a>

```
ST_IsSimple(geom)
```

## Arguments
<a name="ST_IsSimple-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_IsSimple-function-return"></a>

`BOOLEAN`

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_IsSimple-function-examples"></a>

Le code SQL suivant vérifie si la linestring spécifiée est simple. Dans cet exemple, elle n’est pas simple car elle a une auto-intersection. 

```
SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(0 0,10 0,5 5,5 -5)'));
```

```
 st_issimple
-----------
 false
```

# ST\$1 IsValid
<a name="ST_IsValid-function"></a>

ST\$1 IsValid renvoie true si la projection 2D de la géométrie d'entrée est valide. Pour plus d’informations sur la définition d’une géométrie valide, consultez [Validité géométrique](spatial-terminology.md#spatial-terminology-validity). 

## Syntaxe
<a name="ST_IsValid-function-syntax"></a>

```
ST_IsValid(geom)
```

## Arguments
<a name="ST_IsValid-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_IsValid-function-return"></a>

`BOOLEAN`

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_IsValid-function-examples"></a>

Le code SQL suivant vérifie si le polygone spécifié est valide. Dans cet exemple, le polygone n’est pas valide car l’intérieur du polygone n’est pas simplement connecté. 

```
SELECT ST_IsValid(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 0,10 5,5 10,0 5,5 0))'));
```

```
 st_isvalid
-----------
 false
```

# ST\$1Length
<a name="ST_Length-function"></a>

Pour une géométrie linéaire, ST\$1Length renvoie la longueur cartésienne d’une projection 2D. Les unités de longueur sont les mêmes que les unités dans lesquelles les coordonnées de la géométrie en entrée sont exprimées. La fonction renvoie zéro (0) pour les points, les multipoints et les géométries surfaciques. Lorsque l’entrée est une collection de géométries, la fonction renvoie la somme des longueurs des géométries de la collection. 

Pour une géographie, ST\$1Length renvoie la longueur géodésique de la projection 2D d’une géographie linéaire d’entrée calculée sur le sphéroïde déterminé par le SRID. L’unité de longueur est exprimée en mètres. La fonction renvoie zéro (0) pour les points, les multipoints et les géographies surfaciques. Lorsque l’entrée est une collection de géométries, la fonction renvoie la somme des longueurs des géographies de la collection.

## Syntaxe
<a name="ST_Length-function-syntax"></a>

```
ST_Length(geo)
```

## Arguments
<a name="ST_Length-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

## Type de retour
<a name="ST_Length-function-return"></a>

`DOUBLE PRECISION`

Si *geo* est null, null est renvoyé.

Si la valeur SRID est introuvable, une erreur est renvoyée.

## Exemples
<a name="ST_Length-function-examples"></a>

Le code SQL suivant renvoie la longueur cartésienne d’une multilinestring. 

```
SELECT ST_Length(ST_GeomFromText('MULTILINESTRING((0 0,10 0,0 10),(10 0,20 0,20 10))'));
```

```
st_length
--------------------------------
  44.142135623731
```

Le code SQL suivant renvoie la longueur d’une linestring dans une géographie. 

```
SELECT ST_Length(ST_GeogFromText('SRID=4326;LINESTRING(5 0,6 0,4 0)'));
```

```
 st_length 
------------------
 333958.472379804
```

Le code SQL suivant renvoie la longueur d’un point dans une géographie. 

```
SELECT ST_Length(ST_GeogFromText('SRID=4326;POINT(4 5)'));
```

```
 st_length 
-----------
 0
```

# ST\$1 LengthSphere
<a name="ST_LengthSphere-function"></a>

ST\$1 LengthSphere renvoie la longueur d'une géométrie linéaire en mètres. Pour les géométries ponctuelles, multipoints et surfaciques, LengthSphere ST\$1 renvoie 0. Pour les collections de géométries, ST\$1 LengthSphere renvoie la longueur totale des géométries linéaires de la collection en mètres. 

ST\$1 LengthSphere interprète les coordonnées de chaque point de la géométrie en entrée sous forme de longitude et de latitude en degrés. Pour les géométries 3DZ, 3DM ou 4D, seules les deux premières coordonnées sont utilisées.

## Syntaxe
<a name="ST_LengthSphere-function-syntax"></a>

```
ST_LengthSphere(geom)
```

## Arguments
<a name="ST_LengthSphere-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_LengthSphere-function-return"></a>

Longueur `DOUBLE PRECISION` en mètres. Le calcul de la longueur est basé sur le modèle sphérique de la Terre dont le rayon est le rayon moyen de la Terre du modèle ellipsoïdal World Geodetic System (WGS) 84 de la Terre. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_LengthSphere-function-examples"></a>

L’exemple de code SQL suivant calcule la longueur d’une linestring en mètres. 

```
SELECT ST_LengthSphere(ST_GeomFromText('LINESTRING(10 10,45 45)'));
```

```
 st_lengthsphere  
------------------
 5127736.08292556
```

# ST\$1Length2D
<a name="ST_Length2D-function"></a>

ST\$1Length2D est un alias pour ST\$1Length. Pour de plus amples informations, veuillez consulter [ST\$1Length](ST_Length-function.md). 

# ST\$1 LineFromMultiPoint
<a name="ST_LineFromMultiPoint-function"></a>

ST\$1 LineFromMultiPoint renvoie une chaîne linéaire à partir d'une géométrie multipoint en entrée. L’ordre des points est préservé. La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée. La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_LineFromMultiPoint-function-syntax"></a>

```
ST_LineFromMultiPoint(geom)
```

## Arguments
<a name="ST_LineFromMultiPoint-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `MULTIPOINT`. 

## Type de retour
<a name="ST_LineFromMultiPoint-function-return"></a>

`GEOMETRY`

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, un `LINESTRING` vide est renvoyé. 

Si *geom* contient des points vides, ceux-ci sont ignorés. 

Si *geom* n’est pas un `MULTIPOINT`, une erreur est renvoyée. 

## Exemples
<a name="ST_LineFromMultiPoint-function-examples"></a>

Le code SQL suivant crée une linestring à partir d’un multipoint. 

```
SELECT ST_AsEWKT(ST_LineFromMultiPoint(ST_GeomFromText('MULTIPOINT(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
 st_asewkt
---------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5,0 5)
```

# ST\$1 LineInterpolatePoint
<a name="ST_LineInterpolatePoint-function"></a>

ST\$1 LineInterpolatePoint renvoie un point le long d'une ligne à une distance fractionnaire du début de la ligne. 

Pour déterminer l'égalité des points, ST\$1 LineInterpolatePoint agit sur la projection 2D de la géométrie d'entrée. Si la géométrie en entrée est vide, une copie de celle-ci est renvoyée dans la même dimension que l’entrée. Pour les géométries 3DZ, 3DM et 4D, les coordonnées `z` ou `m` sont la moyenne des coordonnées `z` ou `m` du segment où se trouve le point.

## Syntaxe
<a name="ST_LineInterpolatePoint-function-syntax"></a>

```
ST_LineInterpolatePoint(geom, fraction)
```

## Arguments
<a name="ST_LineInterpolatePoint-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type est `LINESTRING`. 

 *fraction*   
Valeur du type de données `DOUBLE PRECISION` qui représente la position d’un point le long de la linestring pour la ligne. La valeur est une fraction comprise entre 0 et 1, inclus. 

## Type de retour
<a name="ST_LineInterpolatePoint-function-return"></a>

`GEOMETRY` du sous-type `POINT`. 

Si *geom* ou *fraction* est null, null est renvoyé. 

Si *geom* est vide, le point vide est renvoyé. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

Si *fraction* est hors limites, une erreur est renvoyée. 

Si *geom* n’est pas une linestring, une erreur est renvoyée. 

## Exemples
<a name="ST_LineInterpolatePoint-function-examples"></a>

Le code SQL suivant renvoie un point à mi-chemin d’une linestring.

```
SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.50));
```

```
st_asewkt
-----------
 POINT(5 5)
```

Le code SQL suivant renvoie un point à 90 % du chemin le long d’une linestring.

```
SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.90));
```

```
st_asewkt
-----------
 POINT(9 9)
```

# ST\$1M
<a name="ST_M-function"></a>

ST\$1M renvoie la coordonnée `m` d’un point d’entrée. 

## Syntaxe
<a name="ST_M-function-syntax"></a>

```
ST_M(point)
```

## Arguments
<a name="ST_M-function-arguments"></a>

 *point*   
Valeur `POINT` du type de données `GEOMETRY`. 

## Type de retour
<a name="ST_M-function-return"></a>

Valeur `DOUBLE PRECISION` de la coordonnée `m`.

If *point* est null, null est renvoyé. 

Si *point* est un point 2D ou 3DZ, null est renvoyé. 

Si *point* est le point vide, null est renvoyé. 

Si *point* n’est pas un `POINT`, une erreur est renvoyée. 

## Exemples
<a name="ST_M-function-examples"></a>

Le code SQL suivant renvoie la coordonnée `m` d’un point dans une géométrie 3DM. 

```
SELECT ST_M(ST_GeomFromEWKT('POINT M (1 2 3)'));
```

```
st_m
-----------
 3
```

Le SQL suivant renvoie la coordonnée `m` d’un point dans une géométrie 4D. 

```
SELECT ST_M(ST_GeomFromEWKT('POINT ZM (1 2 3 4)'));
```

```
st_m
-----------
 4
```

# ST\$1 MakeEnvelope
<a name="ST_MakeEnvelope-function"></a>

ST\$1 MakeEnvelope renvoie une géométrie comme suit :
+ Si les coordonnées en entrée spécifient un point, la géométrie renvoyée est un point. 
+ Si les coordonnées en entrée spécifient une ligne, la géométrie renvoyée est une linestring. 
+ Sinon, la géométrie renvoyée est un polygone, où les coordonnées en entrée spécifient les coins inférieur gauche et supérieur droit d’un cadre. 

Si elle est fournie, la valeur de l’identificateur de système de référence spatiale (SRID) de la géométrie renvoyée est définie sur la valeur SRID d’entrée. 

## Syntaxe
<a name="ST_MakeEnvelope-function-syntax"></a>

```
ST_MakeEnvelope(xmin, ymin, xmax, ymax)
```

```
ST_MakeEnvelope(xmin, ymin, xmax, ymax, srid)
```

## Arguments
<a name="ST_MakeEnvelope-function-arguments"></a>

 *xmin*   
Valeur du type de données `DOUBLE PRECISION`. Cette valeur est la première coordonnée du coin inférieur gauche d’un cadre. 

 *ymin*   
Valeur du type de données `DOUBLE PRECISION`. Cette valeur est la deuxième coordonnée du coin inférieur gauche d’un cadre. 

 *xmax*   
Valeur du type de données `DOUBLE PRECISION`. Cette valeur est la première coordonnée du coin supérieur droit d’un cadre. 

 *ymax*   
Valeur du type de données `DOUBLE PRECISION`. Cette valeur est la deuxième coordonnée du coin supérieur droit d’un cadre. 

 *srid*   
Valeur de type de données `INTEGER` qui représente un identificateur de système de référence spatiale (SRID). Si la valeur SRID n’est pas fournie, elle est définie sur zéro. 

## Type de retour
<a name="ST_MakeEnvelope-function-return"></a>

`GEOMETRY` de sous-type `POINT`, `LINESTRING` ou `POLYGON`. 

Le SRID de la géométrie renvoyée est défini sur `srid` ou zéro si `srid` n’est pas défini. 

Si *xmin*, *ymin*, *xmax*, *ymax* ou *srid* est null, alors null est renvoyé.

Si *srid* est négatif, une erreur est renvoyée. 

## Exemples
<a name="ST_MakeEnvelope-function-examples"></a>

Le SQL suivant renvoie un polygone représentant une enveloppe définie par les quatre valeurs de coordonnées en entrée. 

```
SELECT ST_AsEWKT(ST_MakeEnvelope(2,4,5,7));
```

```
 st_astext
---------------
 POLYGON((2 4,2 7,5 7,5 4,2 4))
```

Le code SQL suivant renvoie un polygone représentant une enveloppe définie par les quatre valeurs de coordonnées en entrée et une valeur SRID. 

```
SELECT ST_AsEWKT(ST_MakeEnvelope(2,4,5,7,4326));
```

```
 st_astext
----------------------------------
 SRID=4326;POLYGON((2 4,2 7,5 7,5 4,2 4))
```

# ST\$1 MakeLine
<a name="ST_MakeLine-function"></a>

ST\$1 MakeLine crée une chaîne de lignes à partir des géométries d'entrée. 

La dimension de la géométrie renvoyée est identique à celle des géométries en entrée. Les deux géométries en entrée doivent avoir la même dimension.

## Syntaxe
<a name="ST_MakeLine-function-syntax"></a>

```
ST_MakeLine(geom1, geom2)
```

## Arguments
<a name="ST_MakeLine-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`, `LINESTRING` ou `MULTIPOINT`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`, `LINESTRING` ou `MULTIPOINT`. 

## Type de retour
<a name="ST_MakeLine-function-return"></a>

`GEOMETRY` du sous-type `LINESTRING`. 

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* sont des points vides ou contiennent des points vides, ces points vides sont ignorés. 

Si *geom1* et *geom2* sont vides, la `LINESTRING` vide est renvoyée. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée. 

Si *geom1* et *geom2* ont des valeurs SRID différentes, une erreur est renvoyée. 

Si *geom1* ou *geom2* n’est pas un `POINT`, `LINESTRING` ou `MULTIPOINT`, alors une erreur est renvoyée. 

Si *geom1* et *geom2* ont des dimensions différentes, une erreur est renvoyée. 

## Exemples
<a name="ST_MakeLine-function-examples"></a>

Le SQL suivant construit une linestring à partir de deux linestrings d’entrée. 

```
SELECT ST_MakeLine(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'), ST_GeomFromText('LINESTRING(88.29 39.07,88.42 39.26,88.27 39.31,88.29 39.07)'));
```

```
st_makeline
-----------
 010200000008000000C3F5285C8F52534052B81E85EB113D407B14AE47E15A5340C3F5285C8F423D40E17A14AE475153408FC2F5285C4F3D40C3F5285C8F52534052B81E85EB113D40C3F5285C8F125640295C8FC2F58843407B14AE47E11A5640E17A14AE47A14340E17A14AE4711564048E17A14AEA74340C3F5285C8F125640295C8FC2F5884340
```

# ST\$1 MakePoint
<a name="ST_MakePoint-function"></a>

ST\$1 MakePoint renvoie une géométrie ponctuelle dont les valeurs de coordonnées sont les valeurs d'entrée. 

## Syntaxe
<a name="ST_MakePoint-function-syntax"></a>

```
ST_MakePoint(x, y)
```

```
ST_MakePoint(x, y, z)
```

```
ST_MakePoint(x, y, z, m)
```

## Arguments
<a name="ST_MakePoint-function-arguments"></a>

 *h/24, j/7*   
Valeur du type de données `DOUBLE PRECISION` représentant la première coordonnée. 

 *y*   
Valeur du type de données `DOUBLE PRECISION` représentant la deuxième coordonnée. 

 *z*   
Valeur du type de données `DOUBLE PRECISION` représentant la troisième coordonnée. 

 *m*   
Valeur du type de données `DOUBLE PRECISION` représentant la quatrième coordonnée. 

## Type de retour
<a name="ST_MakePoint-function-return"></a>

`GEOMETRY` du sous-type `POINT`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est définie sur 0. 

Si *x*, *y*, *z* ou *m* est null, alors null est renvoyé. 

## Exemples
<a name="ST_MakePoint-function-examples"></a>

Le SQL suivant renvoie un type `GEOMETRY` de sous-type `POINT` avec les coordonnées fournies. 

```
SELECT ST_AsText(ST_MakePoint(1,3));
```

```
st_astext
-----------
 POINT(1 3)
```

Le SQL suivant renvoie un type `GEOMETRY` de sous-type `POINT` avec les coordonnées fournies. 

```
SELECT ST_AsEWKT(ST_MakePoint(1, 2, 3));
```

```
st_asewkt
----------------
 POINT Z (1 2 3)
```

Le SQL suivant renvoie un type `GEOMETRY` de sous-type `POINT` avec les coordonnées fournies. 

```
SELECT ST_AsEWKT(ST_MakePoint(1, 2, 3, 4));
```

```
st_asewkt
-------------------
 POINT ZM (1 2 3 4)
```

# ST\$1 MakePolygon
<a name="ST_MakePolygon-function"></a>

ST\$1 MakePolygon possède deux variantes qui renvoient un polygone. L’une prend une géométrie unique et l’autre prend deux géométries. 
+ L’entrée de la première variante est une linestring qui définit l’anneau externe du polygone en sortie.
+ L’entrée de la deuxième variante est une linestring et une multilinestring. Les deux sont vides ou fermées. 

  La limite de l’anneau extérieur du polygone en sortie est la linestring en entrée, et les limites des anneaux intérieurs du polygone sont les linestrings dans la multilinestring d’entrée. Si la linestring d’entrée est vide, un polygone vide est renvoyé. Les linestrings vides dans la multilinestring sont ignorées. L’identifiant du système de référence spatiale (SRID) de la géométrie résultante est le SRID commun des deux géométries d’entrée.

La dimension de la géométrie renvoyée est identique à celle des géométries en entrée. L’anneau extérieur et les anneaux intérieurs doivent avoir la même dimension.

## Syntaxe
<a name="ST_MakePolygon-function-syntax"></a>

```
ST_MakePolygon(geom1)
```

```
ST_MakePolygon(geom1, geom2)
```

## Arguments
<a name="ST_MakePolygon-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING`. La valeur *linestring* doit être fermée ou vide.

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `MULTILINESTRING`. 

## Type de retour
<a name="ST_MakePolygon-function-return"></a>

`GEOMETRY` du sous-type `POLYGON`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est égale au SRID des entrées. 

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* n’est pas une linestring, une erreur est renvoyée. 

Si *geom2* n’est pas une multilinestring, une erreur est renvoyée. 

Si *geom1* n’est pas fermé, une erreur est renvoyée. 

Si *geom1* n’est pas un point unique ou n’est pas fermé, une erreur est renvoyée. 

Si *geom2* contient au moins une linestring qui a un point unique ou n’est pas fermée, une erreur est renvoyée. 

Si *geom1* et *geom2* ont des valeurs SRID différentes, une erreur est renvoyée. 

Si *geom1* et *geom2* ont des dimensions différentes, une erreur est renvoyée. 

## Exemples
<a name="ST_MakePolygon-function-examples"></a>

Le code SQL suivant renvoie un polygone depuis une linestring d’entrée. 

```
SELECT ST_AsText(ST_MakePolygon(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')));
```

```
 st_astext
---------------
POLYGON((77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07))
```

Le code SQL suivant crée un polygone à partir d’une linestring fermée et d’un multilinestring fermée. La linestring est utilisée pour l’anneau extérieur du polygone. Les linestrings dans les multilinestrings sont utilisées pour les anneaux intérieurs du polygone. 

```
SELECT ST_AsEWKT(ST_MakePolygon(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,0 10,0 0)'), ST_GeomFromText('MULTILINESTRING((1 1,1 2,2 1,1 1),(3 3,3 4,4 3,3 3))')));
```

```
 st_astext
----------------------------------
POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1),(3 3,3 4,4 3,3 3))
```

# ST\$1 MemSize
<a name="ST_MemSize-function"></a>

ST\$1 MemSize renvoie la quantité d'espace mémoire (en octets) utilisée par la géométrie d'entrée. Cette taille dépend de la représentation Amazon Redshift interne de la géométrie et peut donc changer si la représentation interne change. Vous pouvez utiliser cette taille comme indication de la taille relative des objets géométriques dans Amazon Redshift. 

## Syntaxe
<a name="ST_MemSize-function-syntax"></a>

```
ST_MemSize(geom)
```

## Arguments
<a name="ST_MemSize-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_MemSize-function-return"></a>

`INTEGER` représentant la dimension inhérente de *geom*. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_MemSize-function-examples"></a>

Le SQL suivant renvoie la taille de mémoire d’une collection de géométries. 

```
SELECT ST_MemSize(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))'))::varchar + ' bytes';
```

```
 ?column?  
-----------
 172 bytes
```

# ST\$1 MMax
<a name="ST_MMax-function"></a>

ST\$1 MMax renvoie la `m` coordonnée maximale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_MMax-function-syntax"></a>

```
ST_MMax(geom)
```

## Arguments
<a name="ST_MMax-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_MMax-function-return"></a>

Valeur `DOUBLE PRECISION` de la coordonnée `m` maximum.

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

Si *geom* est une géométrie 2D ou 3DZ, null est renvoyé. 

## Exemples
<a name="ST_MMax-function-examples"></a>

Le code SQL suivant renvoie la coordonnée `m` la plus importante d’une linestring dans une géométrie 3DM. 

```
SELECT ST_MMax(ST_GeomFromEWKT('LINESTRING M (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_mmax
-----------
  8
```

Le code SQL suivant renvoie la coordonnée `m` la plus importante d’une linestring dans une géométrie 4D. 

```
SELECT ST_MMax(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_mmax
-----------
  11
```

# ST\$1 MMin
<a name="ST_MMin-function"></a>

ST\$1 MMin renvoie la `m` coordonnée minimale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_MMin-function-syntax"></a>

```
ST_MMin(geom)
```

## Arguments
<a name="ST_MMin-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_MMin-function-return"></a>

Valeur `DOUBLE PRECISION` de la coordonnée `m` minimum. 

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

Si *geom* est une géométrie 2D ou 3DZ, null est renvoyé. 

## Exemples
<a name="ST_MMin-function-examples"></a>

Le code SQL suivant renvoie la coordonnée `m` la moins importante d’une linestring dans une géométrie 3DM. 

```
SELECT ST_MMin(ST_GeomFromEWKT('LINESTRING M (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_mmin
-----------
  2
```

Le code SQL suivant renvoie la coordonnée `m` la moins importante d’une linestring dans une géométrie 4D. 

```
SELECT ST_MMin(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_mmin
-----------
  3
```

# ST\$1Multi
<a name="ST_Multi-function"></a>

ST\$1multi convertit une géométrie en multitype correspondant. Si la géométrie en entrée est déjà un multitype ou une collection de géométries, une copie de celle-ci est renvoyée. Si la géométrie en entrée est un point, une linestring ou un polygone, alors un multipoint, une multilinestring ou un multipolygone (respectivement) contenant la géométrie en entrée est renvoyé. 

## Syntaxe
<a name="ST_Multi-function-syntax"></a>

```
ST_Multi(geom)
```

## Arguments
<a name="ST_Multi-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Multi-function-return"></a>

`GEOMETRY` avec sous-type `MULTIPOINT`, `MULTILINESTRING`, `MULTIPOLYGON` ou `GEOMETRYCOLLECTION`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_Multi-function-examples"></a>

Le SQL suivant renvoie un multipoint depuis un multipoint en entrée. 

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('MULTIPOINT((1 2),(3 4))', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;MULTIPOINT((1 2),(3 4))
```

Le code SQL suivant renvoie un multipoint depuis un point d’entrée. 

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('POINT(1 2)', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;MULTIPOINT((1 2))
```

Le code SQL suivant renvoie une collection de géométries depuis une collection d’entrées. 

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('GEOMETRYCOLLECTION(POINT(1 2),MULTIPOINT((1 2),(3 4)))', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),MULTIPOINT((1 2),(3 4)))
```

# ST\$1 NDims
<a name="ST_NDims-function"></a>

ST\$1 NDims renvoie la dimension des coordonnées d'une géométrie. ST\$1 NDims ne prend pas en compte la dimension topologique d'une géométrie. Au lieu de cela, il renvoie une valeur constante en fonction de la dimension de la géométrie. 

## Syntaxe
<a name="ST_NDims-function-syntax"></a>

```
ST_NDims(geom)
```

## Arguments
<a name="ST_NDims-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_NDims-function-return"></a>

`INTEGER` représentant la dimension inhérente de *geom*. 

Si *geom* est null, null est renvoyé. 

Les valeurs renvoyées sont comme suit :


| Valeur renvoyée | Dimension de la géométrie en entrée | 
| --- | --- | 
| 2 | 2D | 
| 3 | 3DZ ou 3DM | 
| 4 | 4D | 

## Exemples
<a name="ST_NDims-function-examples"></a>

Le code SQL suivant renvoie le nombre de dimensions d’une linestring 2D. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING(0 0,1 1,2 2,0 0)'));
```

```
st_ndims
-------------
 2
```

Le code SQL suivant renvoie le nombre de dimensions d’une linestring 3DZ. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING Z(0 0 3,1 1 3,2 2 3,0 0 3)'));
```

```
st_ndims
-------------
 3
```

Le code SQL suivant renvoie le nombre de dimensions d’une linestring 3DM. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING M(0 0 4,1 1 4,2 2 4,0 0 4)'));
```

```
st_ndims
-------------
 3
```

Le code SQL suivant renvoie le nombre de dimensions d’une linestring 4D. 

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING ZM(0 0 3 4,1 1 3 4,2 2 3 4,0 0 3 4)'));
```

```
st_ndims
-------------
 4
```

# ST\$1 NPoints
<a name="ST_NPoints-function"></a>

ST\$1 NPoints renvoie le nombre de points non vides dans une géométrie ou une géographie en entrée. 

## Syntaxe
<a name="ST_NPoints-function-syntax"></a>

```
ST_NPoints(geo)
```

## Arguments
<a name="ST_NPoints-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

## Type de retour
<a name="ST_NPoints-function-return"></a>

`INTEGER`

Si *geo* est un point vide, `0` est renvoyé. 

Si *geo* est null, null est renvoyé. 

## Exemples
<a name="ST_NPoints-function-examples"></a>

Le code SQL suivant renvoie le nombre de points d’une linestring. 

```
SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_npoints
-------------
 4
```

Le code SQL suivant renvoie le nombre de points d’une linestring dans une géographie. 

```
SELECT ST_NPoints(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
st_npoints
-------------
 4
```

# ST\$1 NRings
<a name="ST_NRings-function"></a>

ST\$1 NRings renvoie le nombre d'anneaux dans une géométrie d'entrée. 

## Syntaxe
<a name="ST_NRings-function-syntax"></a>

```
ST_NRings(geom)
```

## Arguments
<a name="ST_NRings-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="ST_NRings-function-return"></a>

`INTEGER`

Si *geom* est null, null est renvoyé. 

Les valeurs renvoyées sont comme suit :


| Valeur renvoyée | Sous-type de géométrie | 
| --- | --- | 
| 0 | Renvoyé si *geom* est un sous-type `POINT`, `LINESTRING`, `MULTIPOINT` ou `MULTILINESTRING`.  | 
| Le nombre d’anneaux. | Renvoyé si *geom* est un sous-type `POLYGON` ou `MULTIPOLYGON`. | 
| Le nombre d’anneaux dans tous les composants. | Renvoyé si *geom* est un sous-type `GEOMETRYCOLLECTION` | 

## Exemples
<a name="ST_NRings-function-examples"></a>

Le SQL suivant renvoie le nombre d’anneaux dans un multipolygone. 

```
SELECT ST_NRings(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((0 0,-10 0,0 -10,0 0)))'));
```

```
 st_nrings
-------------
 2
```

# ST\$1 NumGeometries
<a name="ST_NumGeometries-function"></a>

ST\$1 NumGeometries renvoie le nombre de géométries d'une géométrie d'entrée. 

## Syntaxe
<a name="ST_NumGeometries-function-syntax"></a>

```
ST_NumGeometries(geom)
```

## Arguments
<a name="ST_NumGeometries-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_NumGeometries-function-return"></a>

`INTEGER` représentant le nombre de géométries dans *geom*. 

Si *geom* est null, null est renvoyé. 

Si *geom* est une géométrie vide unique, `0` est renvoyé. 

Si *geom* est une géométrie non vide unique, `1` est renvoyé. 

Si *geom* est un sous-type `GEOMETRYCOLLECTION` ou `MULTI`, le nombre de géométries est renvoyé. 

## Exemples
<a name="ST_NumGeometries-function-examples"></a>

Le code SQL suivant renvoie le nombre de géométries dans la multilinestring d’entrée. 

```
SELECT ST_NumGeometries(ST_GeomFromText('MULTILINESTRING((0 0,1 0,0 5),(3 4,13 26))'));
```

```
st_numgeometries
-------------
 2
```

# ST\$1 NumInteriorRings
<a name="ST_NumInteriorRings-function"></a>

ST\$1 NumInteriorRings renvoie le nombre d'anneaux dans une géométrie polygonale en entrée. 

## Syntaxe
<a name="ST_NumInteriorRings-function-syntax"></a>

```
ST_NumInteriorRings(geom)
```

## Arguments
<a name="ST_NumInteriorRings-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="ST_NumInteriorRings-function-return"></a>

`INTEGER`

Si *geom* est null, null est renvoyé. 

Si *geom* n’est pas un polygone, null est renvoyé. 

## Exemples
<a name="ST_NumInteriorRings-function-examples"></a>

Le SQL suivant renvoie le nombre de géométries d’anneaux à l’intérieur du polygone d’entrée. 

```
SELECT ST_NumInteriorRings(ST_GeomFromText('POLYGON((0 0,100 0,100 100,0 100,0 0),(1 1,1 5,5 1,1 1),(7 7,7 8,8 7,7 7))'));
```

```
 st_numinteriorrings
-------------
 2
```

# ST\$1 NumPoints
<a name="ST_NumPoints-function"></a>

ST\$1 NumPoints renvoie le nombre de points dans une géométrie d'entrée. 

## Syntaxe
<a name="ST_NumPoints-function-syntax"></a>

```
ST_NumPoints(geom)
```

## Arguments
<a name="ST_NumPoints-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="ST_NumPoints-function-return"></a>

`INTEGER`

Si *geom* est null, null est renvoyé. 

Si *geom* n’est pas de sous-type `LINESTRING`, la valeur null est renvoyée. 

## Exemples
<a name="ST_NumPoints-function-examples"></a>

Le code SQL suivant renvoie le nombre de points d’une linestring d’entrée. 

```
SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_numpoints
-------------
4
```

Le SQL suivant renvoie la valeur null car *geom* en entrée n’est pas de sous-type `LINESTRING`. 

```
SELECT ST_NumPoints(ST_GeomFromText('MULTIPOINT(1 2,3 4)'));
```

```
st_numpoints
-------------
```

# ST\$1Perimeter
<a name="ST_Perimeter-function"></a>

Pour une géométrie surfacique, ST\$1Perimeter renvoie le périmètre cartésien (longueur de la frontière) de la projection 2D. Les unités de périmètre sont les mêmes que les unités dans lesquelles les coordonnées de la géométrie en entrée sont exprimées. La fonction renvoie zéro (0) pour les points, les multipoints et les géométries linéaires. Lorsque l’entrée est une collection de géométries, la fonction renvoie la somme des périmètres des géométries de la collection. 

Pour une géographie d’entrée, ST\$1Perimeter renvoie le périmètre géodésique (longueur de la limite) de la projection 2D d’une géographie surfacique d’entrée calculée sur le sphéroïde déterminé par le SRID. L’unité de périmètre est exprimée en mètres. La fonction renvoie zéro (0) pour les points, les multipoints et les géomgraphies linéaires. Lorsque l’entrée est une collection de géométries, la fonction renvoie la somme des périmètres des géographies de la collection.

## Syntaxe
<a name="ST_Perimeter-function-syntax"></a>

```
ST_Perimeter(geo)
```

## Arguments
<a name="ST_Perimeter-function-arguments"></a>

 *geo*   
Valeur de type de données `GEOMETRY` ou `GEOGRAPHY` ou expression qui est évaluée sur un type `GEOMETRY` ou `GEOGRAPHY`.

## Type de retour
<a name="ST_Perimeter-function-return"></a>

`DOUBLE PRECISION`

Si *geo* est null, null est renvoyé.

Si la valeur SRID est introuvable, une erreur est renvoyée.

## Exemples
<a name="ST_Perimeter-function-examples"></a>

Le SQL suivant renvoie le périmètre cartésien d’un multipolygone. 

```
SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_perimeter
--------------------------------
    68.2842712474619
```

Le SQL suivant renvoie le périmètre cartésien d’un multipolygone. 

```
SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_perimeter
--------------------------------
    68.2842712474619
```

Le code SQL suivant renvoie le périmètre d’un polygone dans une géographie. 

```
SELECT ST_Perimeter(ST_GeogFromText('SRID=4326;POLYGON((0 0,1 0,0 1,0 0))'));
```

```
 st_perimeter 
------------------
 378790.428393693
```

Le code SQL suivant renvoie le périmètre d’une linestring dans une géographie. 

```
SELECT ST_Perimeter(ST_GeogFromText('SRID=4326;LINESTRING(5 0,10 0)'));
```

```
 st_perimeter 
--------------
 0
```

# ST\$1Perimeter2D
<a name="ST_Perimeter2D-function"></a>

ST\$1Perimeter2D est un alias pour ST\$1Perimeter. Pour plus d'informations, consultez [ST\$1Perimeter](ST_Perimeter-function.md). 

# ST\$1Point
<a name="ST_Point-function"></a>

ST\$1Point renvoie une géométrie de point à partir des valeurs des coordonnées d’entrée. 

## Syntaxe
<a name="ST_Point-function-syntax"></a>

```
ST_Point(x, y)
```

## Arguments
<a name="ST_Point-function-arguments"></a>

 *h/24, j/7*   
Valeur du type de données `DOUBLE PRECISION` représentant la première coordonnée. 

 *y*   
Valeur du type de données `DOUBLE PRECISION` représentant la deuxième coordonnée. 

## Type de retour
<a name="ST_Point-function-return"></a>

`GEOMETRY` du sous-type `POINT`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est définie sur 0. 

Si *x* ou *y* est null, null est renvoyé. 

## Exemples
<a name="ST_Point-function-examples"></a>

Le SQL suivant construit une géométrie de point à partir des coordonnées d’entrée. 

```
SELECT ST_AsText(ST_Point(5.0, 7.0));
```

```
st_astext
-------------
POINT(5 7)
```

# ST\$1PointN
<a name="ST_PointN-function"></a>

ST\$1PointN renvoie un point dans une linestring comme spécifié par une valeur d’index. Les valeurs d’index négatives sont comptées à l’envers à partir de la fin de la linestring, de sorte que -1 est le dernier point. 

La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_PointN-function-syntax"></a>

```
ST_PointN(geom, index)
```

## Arguments
<a name="ST_PointN-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING`. 

 *index*   
Valeur du type de données `INTEGER` qui représente l’index d’un point dans une linestring. 

## Type de retour
<a name="ST_PointN-function-return"></a>

`GEOMETRY` du sous-type `POINT`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est définie sur 0. 

Si *geom* ou *index* est null, null est renvoyé. 

Si *l’index* est hors de portée, null est renvoyé. 

Si *geom* est vide, null est renvoyé. 

Si *geom* n’est pas un `LINESTRING`, null est renvoyé. 

## Exemples
<a name="ST_PointN-function-examples"></a>

Le SQL suivant renvoie une représentation de texte connu étendu (EWKT) d’un `LINESTRING` à six points à un objet `GEOMETRY`, et renvoie le point à l’index 5 de la linestring. 

```
SELECT ST_AsEWKT(ST_PointN(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5,0 0)',4326), 5));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 5)
```

# ST\$1Points
<a name="ST_Points-function"></a>

ST\$1Points renvoie une géométrie multipoint contenant tous les points non vides de la géométrie en entrée. ST\$1Points ne supprime pas les points dupliqués dans l’entrée, y compris les points de début et de fin des géométries en anneau.

## Syntaxe
<a name="ST_Points-function-syntax"></a>

```
ST_Points(geom)
```

## Arguments
<a name="ST_Points-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Points-function-return"></a>

`GEOMETRY` du sous-type `MULTIPOINT`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est identique à celle de *geom*. 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, le multipoint vide est renvoyé. 

## Exemples
<a name="ST_Points-function-examples"></a>

Les exemples SQL suivants construisent une géométrie multipoint à partir de la géométrie en entrée. Le résultat est une géométrie multipoint contenant les points non vides de la géométrie en entrée.

```
SELECT ST_AsEWKT(ST_Points(ST_SetSRID(ST_GeomFromText('LINESTRING(1 0,2 0,3 0)'), 4326)));
```

```
st_asewkt
-------------
SRID=4326;MULTIPOINT((1 0),(2 0),(3 0))
```

```
SELECT ST_AsEWKT(ST_Points(ST_SetSRID(ST_GeomFromText('MULTIPOLYGON(((0 0,1 0,0 1,0 0)))'), 4326)));
```

```
st_asewkt
-------------
SRID=4326;MULTIPOINT((0 0),(1 0),(0 1),(0 0))
```

# ST\$1Polygon
<a name="ST_Polygon-function"></a>

ST\$1Polygon renvoie une géométrie de polygone dont l’anneau extérieur est la linestring d’entrée avec la valeur qui a été entrée pour l’identifiant de système de référence spatiale (SRID). 

La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_Polygon-function-syntax"></a>

```
ST_Polygon(linestring, srid)
```

## Arguments
<a name="ST_Polygon-function-arguments"></a>

 *linestring*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING` qui représente une linestring. La valeur *linestring* doit être fermée. 

 *srid*   
Valeur du type de données `INTEGER` représentant un SRID. 

## Type de retour
<a name="ST_Polygon-function-return"></a>

`GEOMETRY` du sous-type `POLYGON`.

La valeur de SRID de la géométrie renvoyée est définie sur *srid*. 

Si *linestring* ou *srid* est null, null est renvoyé.

Si *linestring* n’est pas une linestring, une erreur est renvoyée.

Si *linestring* n’est pas fermé, une erreur est renvoyée.

Si *srid* est négatif, une erreur est renvoyée.

## Exemples
<a name="ST_Polygon-function-examples"></a>

Le SQL suivant construit un polygone avec une valeur SRID. 

```
SELECT ST_AsEWKT(ST_Polygon(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'),4356));
```

```
st_asewkt
-------------
 SRID=4356;POLYGON((77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07))
```

# ST\$1 RemovePoint
<a name="ST_RemovePoint-function"></a>

ST\$1 RemovePoint renvoie une géométrie de chaîne de lignes dont le point de la géométrie d'entrée situé à une position d'index a été supprimé. 

L’index est basé sur zéro. L’identificateur du système de référence spatiale (SRID) du résultat est identique à la géométrie en entrée. La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_RemovePoint-function-syntax"></a>

```
ST_RemovePoint(geom, index)
```

## Arguments
<a name="ST_RemovePoint-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING`. 

 *index*   
Valeur de type de données `INTEGER` qui représente la position d’un index de base zéro. 

## Type de retour
<a name="ST_RemovePoint-function-return"></a>

`GEOMETRY` 

Si *geom* ou *index* est null, null est renvoyé. 

Si *geom* n’est pas un sous-type `LINESTRING`, une erreur est renvoyée. 

Si *l’index* est hors de portée, une erreur est renvoyée. Les valeurs valides pour la position d’index sont comprises entre 0 et `ST_NumPoints(geom)` moins 1. 

## Exemples
<a name="ST_RemovePoint-function-examples"></a>

Le code SQL suivant supprime le dernier point d’une linestring. 

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_RemovePoint(g, ST_NumPoints(g) - 1)) FROM tmp;
```

```
   st_asewkt
-----------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5)
```

# ST\$1Reverse
<a name="ST_Reverse-function"></a>

ST\$1reverse inverse l’ordre des sommets pour les géométries linéaires et surfaciques. Pour les géométries de point ou multipoint, une copie de la géométrie d’origine est renvoyée. Pour les collections de géométrie, ST\$1Reverse inverse l’ordre des sommets de chacune des géométries de la collection.

La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_Reverse-function-syntax"></a>

```
ST_Reverse(geom)
```

## Arguments
<a name="ST_Reverse-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Reverse-function-return"></a>

`GEOMETRY` 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_Reverse-function-examples"></a>

Le code SQL suivant inverse l’ordre des points dans une linestring. 

```
SELECT ST_AsEWKT(ST_Reverse(ST_GeomFromText('LINESTRING(1 0,2 0,3 0,4 0)', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;LINESTRING(4 0,3 0,2 0,1 0)
```

# ST\$1 SetPoint
<a name="ST_SetPoint-function"></a>

ST\$1 SetPoint renvoie une chaîne de lignes avec des coordonnées mises à jour par rapport à la position de la chaîne de ligne d'entrée telle que spécifiée par l'index. Les nouvelles coordonnées sont les coordonnées du point d’entrée. 

La dimension de la géométrie renvoyée est identique à celle de la valeur *geom1*. Si *geom1* et *geom2* ont des dimensions différentes, *geom2* est projeté à la dimension de *geom1*.

## Syntaxe
<a name="ST_SetPoint-function-syntax"></a>

```
ST_SetPoint(geom1, index, geom2)
```

## Arguments
<a name="ST_SetPoint-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING`. 

 *index*   
Valeur de type de données `INTEGER` qui représente la position d’un index. Un `0` fait référence au premier point de la linestring à partir de la gauche, un `1` fait référence au deuxième point, et ainsi de suite. L’index peut être une valeur négative. Un `-1` fait référence au premier point de la linestring à partir de la droite, un `-2` fait référence au deuxième point, et ainsi de suite. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `POINT`. 

## Type de retour
<a name="ST_SetPoint-function-return"></a>

`GEOMETRY`

Si *geom2* est le point vide, *geom1* est renvoyé. 

Si *geom1*, *geom2*, ou *index* est null, alors null est renvoyé. 

Si *geom1* n’est pas une linestring, une erreur est renvoyée. 

Si *index* n’est pas dans une plage d’index valide, une erreur est renvoyée. 

Si *geom2* n’est pas un point, une erreur est renvoyée. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

## Exemples
<a name="ST_SetPoint-function-examples"></a>

Le code SQL suivant renvoie une nouvelle linestring où nous définissons le deuxième point de la linestring d’entrée avec le point spécifié. 

```
SELECT ST_AsText(ST_SetPoint(ST_GeomFromText('LINESTRING(1 2, 3 2, 5 2, 1 2)'), 2, ST_GeomFromText('POINT(7 9)')));
```

```
st_astext              
-------------
 LINESTRING(1 2,3 2,7 9,1 2)
```

L’exemple de code SQL suivant renvoie une nouvelle linestring où nous définissons le troisième point à partir de la droite (l’index est négatif) de la linestring avec le point spécifié. 

```
SELECT ST_AsText(ST_SetPoint(ST_GeomFromText('LINESTRING(1 2, 3 2, 5 2, 1 2)'), -3, ST_GeomFromText('POINT(7 9)')));
```

```
st_astext              
-------------
 LINESTRING(1 2,7 9,5 2,1 2)
```

# ST\$1SetSRID
<a name="ST_SetSRID-function"></a>

ST\$1SetSRID renvoie une géométrie identique à la géométrie d’entrée, mais mise à jour avec la valeur entrée pour l’identifiant de système de référence spatiale (SRID). 

## Syntaxe
<a name="ST_SetSRID-function-syntax"></a>

```
ST_SetSRID(geom, srid)
```

## Arguments
<a name="ST_SetSRID-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *srid*   
Valeur du type de données `INTEGER` représentant un SRID. 

## Type de retour
<a name="ST_SetSRID-function-return"></a>

`GEOMETRY`

La valeur de SRID de la géométrie renvoyée est définie sur *srid*. 

Si *geom* ou *srid* est null, null est renvoyé.

Si *srid* est négatif, une erreur est renvoyée.

## Exemples
<a name="ST_SetSRID-function-examples"></a>

Le code SQL suivant définit la valeur SRID d’une linestring.

```
SELECT ST_AsEWKT(ST_SetSRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'),50));
```

```
st_asewkt
-------------
 SRID=50;LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)
```

# ST\$1Simplify
<a name="ST_Simplify-function"></a>

ST\$1Simplify renvoie une copie simplifiée de la géométrie d'entrée à l'aide de l' Ramer-Douglas-Peuckeralgorithme avec la tolérance donnée. Il est possible que la topologie de la géométrie en entrée ne soit pas conservée. Pour plus d’informations sur cet algorithme, consultez [Algorithme de Douglas-Peucker](https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm) sur Wikipédia. 

Lorsque ST\$1Simplify calcule les distances pour simplifier une géométrie, ST\$1Simplify fonctionne sur la projection 2D de la géométrie en entrée. 

## Syntaxe
<a name="ST_Simplify-function-syntax"></a>

```
ST_Simplify(geom, tolerance)
```

## Arguments
<a name="ST_Simplify-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *tolerance*   
Valeur de type de données `DOUBLE PRECISION` qui représente le niveau de tolérance de l' Ramer-Douglas-Peuckeralgorithme. Si *tolerance* est un nombre négatif, zéro est utilisé. 

## Type de retour
<a name="ST_Simplify-function-return"></a>

`GEOMETRY`. 

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID de la géométrie d’entrée. 

La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_Simplify-function-examples"></a>

Le code SQL suivant simplifie la chaîne de ligne d'entrée en utilisant une tolérance de distance euclidienne de 1 avec l'algorithme. Ramer-Douglas-Peucker Les unités de distance sont identiques à celles indiquées dans les coordonnées de la géométrie.

```
SELECT ST_AsEWKT(ST_Simplify(ST_GeomFromText('LINESTRING(0 0,1 2,1 1,2 2,2 1)'), 1));
```

```
 st_asewkt
-----------
LINESTRING(0 0,1 2,2 1)
```

# ST\$1SRID
<a name="ST_SRID-function"></a>

ST\$1SRID renvoie l’identifiant de système de référence spatiale (SRID) d’une géométrie d’entrée. Pour plus d’informations sur un SRID, consultez [Interrogation des données spatiales dans Amazon Redshift](geospatial-overview.md).

## Syntaxe
<a name="ST_SRID-function-syntax"></a>

```
ST_SRID(geom)
```

## Arguments
<a name="ST_SRID-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_SRID-function-return"></a>

`INTEGER` représentant la valeur SRID de *geom*. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_SRID-function-examples"></a>

Le code SQL suivant renvoie une valeur SRID d’une linestring définie sur un SRID de `4326`.

```
SELECT ST_SRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)',4326));
```

```
st_srid
-------------
 4326
```

Le code SQL suivant renvoie une valeur SRID d’une linestring qui n’est pas définie à sa construction. Cela se traduit par `0` pour la valeur SRID.

```
SELECT ST_SRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_srid
-------------
 0
```

# ST\$1 StartPoint
<a name="ST_StartPoint-function"></a>

ST\$1 StartPoint renvoie le premier point d'une chaîne de ligne d'entrée. La valeur SRID (Spatial Reference System Identifier) du résultat est identique à celle de la géométrie en entrée. La dimension de la géométrie renvoyée est identique à celle de la géométrie en entrée.

## Syntaxe
<a name="ST_StartPoint-function-syntax"></a>

```
ST_StartPoint(geom)
```

## Arguments
<a name="ST_StartPoint-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Le sous-type doit être `LINESTRING`. 

## Type de retour
<a name="ST_StartPoint-function-return"></a>

`GEOMETRY` 

Si *geom* est null, null est renvoyé. 

Si *geom* est vide, null est renvoyé. 

Si *geom* n’est pas un `LINESTRING`, null est renvoyé. 

## Exemples
<a name="ST_StartPoint-function-examples"></a>

Le code SQL suivant renvoie une représentation de texte connu étendu (EWKT) d’un `LINESTRING` à quatre points à un objet `GEOMETRY`, et renvoie le point de départ de la linestring. 

```
SELECT ST_AsEWKT(ST_StartPoint(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 0)
```

# ST\$1Touches
<a name="ST_Touches-function"></a>

ST\$1Touches renvoie true si les projections 2D des deux géométries d’entrée se touchent. Les deux géométries se touchent si elles ne sont pas vides, se croisent et n’ont pas de points intérieurs communs. 

## Syntaxe
<a name="ST_Touches-function-syntax"></a>

```
ST_Touches(geom1, geom2)
```

## Arguments
<a name="ST_Touches-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Touches-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Touches-function-examples"></a>

Le code SQL suivant vérifie si un polygone touche une linestring. 

```
SELECT ST_Touches(ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))'), ST_GeomFromText('LINESTRING(20 10,20 0,10 0)'));
```

```
 st_touches              
-------------
 t
```

# ST\$1Transform
<a name="ST_Transform-function"></a>

ST\$1Transform renvoie une nouvelle géométrie dont les coordonnées sont transformées en système de référence spatiale défini par l’identifiant du système de référence spatiale (SRID) d’entrée. 

## Syntaxe
<a name="ST_Transform-function-syntax"></a>

```
ST_Transform(geom, srid)
```

## Arguments
<a name="ST_Transform-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *srid*   
Valeur du type de données `INTEGER` représentant un SRID. 

## Type de retour
<a name="ST_Transform-function-return"></a>

`GEOMETRY`.

La valeur de SRID de la géométrie renvoyée est définie sur *srid*. 

Si *geom* ou *srid* est null, null est renvoyé.

Si la valeur SRID associée à l’entrée *geom* n’existe pas, une erreur est renvoyée.

Si *srid* n’existe pas, une erreur est renvoyée.

## Exemples
<a name="ST_Transform-function-examples"></a>

Le code SQL suivant transforme le SRID d’une collection géométrique vide. 

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY', 3857), 4326));
```

```
             st_asewkt
------------------------------------
 SRID=4326;GEOMETRYCOLLECTION EMPTY
```

Le code SQL suivant transforme le SRID d’une linestring. 

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9, -22 -33)', 4326), 26918));
```

```
                                                                                            st_asewkt
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=26918;LINESTRING(73106.6977300955 15556182.9688576,14347201.5059964 1545178.32934967,1515090.41262989 9522193.25115316,10491250.83295 2575457.28410878,5672303.72135968 -5233682.61176205)
```

Le code SQL suivant transforme le SRID d’un polygone. 

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('POLYGON Z ((-10 10 -7, -65 10 -6, -10 64 -5, -10 10 -7), (-11 11 5, -11 12 6, -12 11 7, -11 11 5))', 6989), 6317));
```

```
                                                                                                                                                                                                                      st_asewkt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=6317;POLYGON Z ((6186430.2771091 -1090834.57212608 1100247.33216237,2654831.67853801 -5693304.90741276 1100247.50581055,2760987.41750022 -486836.575101877 5709710.44137268,6186430.2771091 -1090834.57212608 1100247.33216237),(6146675.25029258 -1194792.63532103 1209007.1115113,6125027.87562215 -1190584.81194058 1317403.77865723,6124888.99555252 -1301885.3455052 1209007.49312929,6146675.25029258 -1194792.63532103 1209007.1115113))
```

# ST\$1Union
<a name="ST_Union-function"></a>

ST\$1Union renvoie une géométrie représentant l’union de deux géométries. C’est-à-dire qu’il fusionne les géométries en entrée pour produire une géométrie résultante sans chevauchement. 

## Syntaxe
<a name="ST_Union-function-syntax"></a>

```
ST_Union(geom1, geom2)
```

## Arguments
<a name="ST_Union-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Union-function-return"></a>

`GEOMETRY`

La valeur de l’identifiant de système de référence spatiale (SRID) de la géométrie renvoyée est la valeur SRID des géométries d’entrée.

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* ou *geom2* est vide, une géométrie vide est renvoyée. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une linestring ou une multilinestring, une erreur est renvoyée. 

Si *geom1* ou *geom2* n’est pas une géométrie bidimensionnelle (2D), une erreur est renvoyée. 

## Exemples
<a name="ST_Union-function-examples"></a>

Le code SQL suivant renvoie la géométrie non vide représentant l’intersection de deux géométries en entrée. 

```
SELECT ST_AsEWKT(ST_Union(ST_GeomFromText('POLYGON((0 0,100 100,0 200,0 0))'), ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))')));
```

```
        st_asewkt        
-------------------------
 POLYGON((0 0,0 200,100 100,5 5,10 0,0 0))
```

# ST\$1Within
<a name="ST_Within-function"></a>

ST\$1Within renvoie true si la projection 2D de la première géométrie en entrée se trouve dans la projection 2D de la deuxième géométrie en entrée. 

Par exemple, la géométrie `A` se trouve dans la géométrie `B` si chaque point dans `A` est un point dans `B`, et si son intérieur comporte une intersection non vide. 

ST\$1Within(`A`, `B`) équivaut à ST\$1Contains(`B`, `A`). 

## Syntaxe
<a name="ST_Within-function-syntax"></a>

```
ST_Within(geom1, geom2)
```

## Arguments
<a name="ST_Within-function-arguments"></a>

 *geom1*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. Cette valeur est comparée à *geom2* afin de déterminer si elle se trouve dans *geom2*. 

 *geom2*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_Within-function-return"></a>

`BOOLEAN`

Si *geom1* ou *geom2* est null, null est renvoyé. 

Si *geom1* et *geom2* n’ont pas la même valeur pour l’identifiant de système de référence spatiale (SRID), une erreur est renvoyée. 

Si *geom1* ou *geom2* est une collection géométrique, une erreur est renvoyée. 

## Exemples
<a name="ST_Within-function-examples"></a>

Le SQL suivant vérifie si le premier polygone se trouve dans le deuxième polygone. 

```
SELECT ST_Within(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_within
-----------
 true
```

# ST\$1X
<a name="ST_X-function"></a>

ST\$1X renvoie la première coordonnée d’un point d’entrée. 

## Syntaxe
<a name="ST_X-function-syntax"></a>

```
ST_X(point)
```

## Arguments
<a name="ST_X-function-arguments"></a>

 *point*   
Valeur `POINT` du type de données `GEOMETRY`. 

## Type de retour
<a name="ST_X-function-return"></a>

Valeur `DOUBLE PRECISION` de la première coordonnée.

If *point* est null, null est renvoyé. 

Si *point* est le point vide, null est renvoyé. 

Si *point* n’est pas un `POINT`, une erreur est renvoyée. 

## Exemples
<a name="ST_X-function-examples"></a>

Le SQL suivant renvoie la première coordonnée d’un point. 

```
SELECT ST_X(ST_Point(1,2));
```

```
st_x
-----------
 1.0
```

# ST\$1 XMax
<a name="ST_XMax-function"></a>

ST\$1 XMax renvoie la première coordonnée maximale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_XMax-function-syntax"></a>

```
ST_XMax(geom)
```

## Arguments
<a name="ST_XMax-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_XMax-function-return"></a>

Valeur `DOUBLE PRECISION` de la première coordonnée maximum. 

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_XMax-function-examples"></a>

Le code SQL suivant renvoie la première coordonnée la plus importante d’une linestring. 

```
SELECT ST_XMax(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_xmax
-----------
 77.42
```

# ST\$1 XMin
<a name="ST_XMin-function"></a>

ST\$1 XMin renvoie la première coordonnée minimale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_XMin-function-syntax"></a>

```
ST_XMin(geom)
```

## Arguments
<a name="ST_XMin-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_XMin-function-return"></a>

Valeur `DOUBLE PRECISION` de la première coordonnée minimum. 

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_XMin-function-examples"></a>

Le code SQL suivant renvoie la première coordonnée la moins importante d’une linestring. 

```
SELECT ST_XMin(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_xmin
-----------
 77.27
```

# ST\$1Y
<a name="ST_Y-function"></a>

ST\$1X renvoie la deuxième coordonnée d’un point d’entrée. 

## Syntaxe
<a name="ST_Y-function-syntax"></a>

```
ST_Y(point)
```

## Arguments
<a name="ST_Y-function-arguments"></a>

 *point*   
Valeur `POINT` du type de données `GEOMETRY`. 

## Type de retour
<a name="ST_Y-function-return"></a>

Valeur `DOUBLE PRECISION` de la deuxième coordonnée.

If *point* est null, null est renvoyé. 

Si *point* est le point vide, null est renvoyé. 

Si *point* n’est pas un `POINT`, une erreur est renvoyée. 

## Exemples
<a name="ST_Y-function-examples"></a>

Le SQL suivant renvoie la deuxième coordonnée d’un point. 

```
SELECT ST_Y(ST_Point(1,2));
```

```
st_y
-----------
 2.0
```

# ST\$1 YMax
<a name="ST_YMax-function"></a>

ST\$1 YMax renvoie la deuxième coordonnée maximale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_YMax-function-syntax"></a>

```
ST_YMax(geom)
```

## Arguments
<a name="ST_YMax-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_YMax-function-return"></a>

Valeur `DOUBLE PRECISION` de la deuxième coordonnée maximum.

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_YMax-function-examples"></a>

Le code SQL suivant renvoie la deuxième coordonnée la plus importante d’une linestring. 

```
SELECT ST_YMax(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_ymax
-----------
 29.31
```

# ST\$1 YMin
<a name="ST_YMin-function"></a>

ST\$1 YMin renvoie la deuxième coordonnée minimale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_YMin-function-syntax"></a>

```
ST_YMin(geom)
```

## Arguments
<a name="ST_YMin-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_YMin-function-return"></a>

Valeur `DOUBLE PRECISION` de la deuxième coordonnée minimum. 

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

## Exemples
<a name="ST_YMin-function-examples"></a>

Le code SQL suivant renvoie la deuxième coordonnée la moins importante d’une linestring. 

```
SELECT ST_YMin(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_ymin
-----------
 29.07
```

# ST\$1Z
<a name="ST_Z-function"></a>

ST\$1Z renvoie la coordonnée `z` d’un point d’entrée. 

## Syntaxe
<a name="ST_Z-function-syntax"></a>

```
ST_Z(point)
```

## Arguments
<a name="ST_Z-function-arguments"></a>

 *point*   
Valeur `POINT` du type de données `GEOMETRY`. 

## Type de retour
<a name="ST_Z-function-return"></a>

Valeur `DOUBLE PRECISION` de la coordonnée `m`.

If *point* est null, null est renvoyé. 

Si *point* est un point 2D ou 3DM, null est renvoyé. 

Si *point* est le point vide, null est renvoyé. 

Si *point* n’est pas un `POINT`, une erreur est renvoyée. 

## Exemples
<a name="ST_Z-function-examples"></a>

Le code SQL suivant renvoie la coordonnée `z` d’un point dans une géométrie 3DZ. 

```
SELECT ST_Z(ST_GeomFromEWKT('POINT Z (1 2 3)'));
```

```
st_z
-----------
 3
```

Le SQL suivant renvoie la coordonnée `z` d’un point dans une géométrie 4D. 

```
SELECT ST_Z(ST_GeomFromEWKT('POINT ZM (1 2 3 4)'));
```

```
st_z
-----------
 3
```

# ST\$1 ZMax
<a name="ST_ZMax-function"></a>

ST\$1 ZMax renvoie la `z` coordonnée maximale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_ZMax-function-syntax"></a>

```
ST_ZMax(geom)
```

## Arguments
<a name="ST_ZMax-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_ZMax-function-return"></a>

Valeur `DOUBLE PRECISION` de la coordonnée `z` maximum.

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

Si *geom* est une géométrie 2D ou 3DM, null est renvoyé. 

## Exemples
<a name="ST_ZMax-function-examples"></a>

Le code SQL suivant renvoie la coordonnée `z` la plus importante d’une linestring dans une géométrie 3DZ. 

```
SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING Z (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_zmax
-----------
  8
```

Le code SQL suivant renvoie la coordonnée `z` la plus importante d’une linestring dans une géométrie 4D. 

```
SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_zmax
-----------
  10
```

# ST\$1 ZMin
<a name="ST_ZMin-function"></a>

ST\$1 ZMin renvoie la `z` coordonnée minimale d'une géométrie en entrée. 

## Syntaxe
<a name="ST_ZMin-function-syntax"></a>

```
ST_ZMin(geom)
```

## Arguments
<a name="ST_ZMin-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`. 

## Type de retour
<a name="ST_ZMin-function-return"></a>

Valeur `DOUBLE PRECISION` de la coordonnée `z` minimum. 

Si *geom* est vide, null est renvoyé. 

Si *geom* est null, null est renvoyé. 

Si *geom* est une géométrie 2D ou 3DM, null est renvoyé. 

## Exemples
<a name="ST_ZMin-function-examples"></a>

Le code SQL suivant renvoie la coordonnée `z` la moins importante d’une linestring dans une géométrie 3DZ. 

```
SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING Z (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_zmin
-----------
  2
```

Le code SQL suivant renvoie la coordonnée `z` la moins importante d’une linestring dans une géométrie 4D. 

```
SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_zmin
-----------
  2
```

# Supports BBox
<a name="SupportsBBox-function"></a>

Supporte les BBox retours « true » si la géométrie d'entrée prend en charge le codage avec un cadre de délimitation précalculé. Pour plus d’informations sur la prise en charge des cadres de délimitation, consultez [Cadre de délimitation](spatial-terminology.md#spatial-terminology-bounding-box).

## Syntaxe
<a name="SupportsBBox-function-syntax"></a>

```
SupportsBBox(geom)
```

## Arguments
<a name="SupportsBBox-function-arguments"></a>

 *geom*   
Valeur de type de données `GEOMETRY` ou expression qui est évaluée sur un type `GEOMETRY`.

## Type de retour
<a name="SupportsBBox-function-return"></a>

`BOOLEAN`

Si *geom* est null, null est renvoyé.

## Exemples
<a name="SupportsBBox-function-examples"></a>

Le code SQL suivant renvoie true car la géométrie du point d’entrée prend en charge l’encodage avec un cadre de délimitation. 

```
SELECT SupportsBBox(AddBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
supportsbbox
--------------
t
```

Le code SQL suivant renvoie false car la géométrie du point d’entrée ne prend pas en charge l’encodage avec un cadre de délimitation. 

```
SELECT SupportsBBox(DropBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
supportsbbox
--------------
f
```

# Fonctions de chaîne
<a name="String_functions_header"></a>

**Topics**
+ [Opérateur (concaténation) \$1\$1](r_concat_op.md)
+ [Fonction ASCII](r_ASCII.md)
+ [Fonction BPCHARCMP](r_BPCHARCMP.md)
+ [Fonction BTRIM](r_BTRIM.md)
+ [Fonction BTTEXT\$1PATTERN\$1CMP](r_BTTEXT_PATTERN_CMP.md)
+ [Fonction CHAR\$1LENGTH](r_CHAR_LENGTH.md)
+ [Fonction CHARACTER\$1LENGTH](r_CHARACTER_LENGTH.md)
+ [Fonction CHARINDEX](r_CHARINDEX.md)
+ [Fonction CHR](r_CHR.md)
+ [Fonction COLLATE](r_COLLATE.md)
+ [Fonction CONCAT](r_CONCAT.md)
+ [CRC32 fonction](crc32-function.md)
+ [Fonction DIFFERENCE](DIFFERENCE.md)
+ [Fonction INITCAP](r_INITCAP.md)
+ [Fonctions LEFT et RIGHT](r_LEFT.md)
+ [Fonction LEN](r_LEN.md)
+ [Fonction LENGTH](r_LENGTH.md)
+ [Fonction LOWER](r_LOWER.md)
+ [Fonctions LPAD et RPAD](r_LPAD.md)
+ [Fonction LTRIM](r_LTRIM.md)
+ [Fonction OCTETINDEX](OCTETINDEX.md)
+ [Fonction OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [Fonction POSITION](r_POSITION.md)
+ [Fonction QUOTE\$1IDENT](r_QUOTE_IDENT.md)
+ [Fonction QUOTE\$1LITERAL](r_QUOTE_LITERAL.md)
+ [Fonction REGEXP\$1COUNT](REGEXP_COUNT.md)
+ [Fonction REGEXP\$1INSTR](REGEXP_INSTR.md)
+ [Fonction REGEXP\$1REPLACE](REGEXP_REPLACE.md)
+ [Fonction REGEXP\$1SUBSTR](REGEXP_SUBSTR.md)
+ [Fonction REPEAT](r_REPEAT.md)
+ [Fonction REPLACE](r_REPLACE.md)
+ [Fonction REPLICATE](r_REPLICATE.md)
+ [Fonction REVERSE](r_REVERSE.md)
+ [Fonction RTRIM](r_RTRIM.md)
+ [Fonction SOUNDEX](SOUNDEX.md)
+ [Fonction SPLIT\$1PART](SPLIT_PART.md)
+ [Fonction STRPOS](r_STRPOS.md)
+ [Fonction STRTOL](r_STRTOL.md)
+ [Fonction SUBSTRING](r_SUBSTRING.md)
+ [Fonction TEXTLEN](r_TEXTLEN.md)
+ [Fonction TRANSLATE](r_TRANSLATE.md)
+ [Fonction TRIM](r_TRIM.md)
+ [Fonction UPPER](r_UPPER.md)

Fonctions de chaîne qui traitent et manipulent des chaînes de caractères ou des expressions qui correspondent à des chaînes de caractères. Lorsque l’argument *string* de ces fonctions est une valeur littérale, il doit être entre guillemets simples. Les types de données pris en charge sont CHAR et VARCHAR. 

La section suivante fournit les noms de fonctions, la syntaxe et les descriptions des fonctions prises en charge. Tous les décalages en chaînes sont basés sur un. 
<a name="string-functions-deprecated"></a>
**Fonctions de nœud principal uniquement obsolètes**  
Les fonctions de chaîne suivantes sont obsolètes, car elles s’exécutent uniquement sur le nœud principal. Pour plus d'informations, consultez [Fonctions exécutées uniquement sur le nœud principal](c_SQL_functions_leader_node_only.md)
+ GET\$1BYTE
+ SET\$1BIT
+ SET\$1BYTE
+ TO\$1ASCII

# Opérateur (concaténation) \$1\$1
<a name="r_concat_op"></a>

Concatène deux expressions de chaque côté du symbole `||` et renvoie l’expression concaténée. 

Similaire à [Fonction CONCAT](r_CONCAT.md). 

**Note**  
Si l’une des expressions (ou les deux) a la valeur null, le résultat de la concaténation est `NULL`. 

## Syntaxe
<a name="r_concat_op-synopsis"></a>

```
expression1 || expression2
```

## Arguments
<a name="r_concat_op-arguments"></a>

 *expression1*   
Chaîne `CHAR`, chaîne `VARCHAR`, expression binaire ou expression évaluée à l’un de ces types. 

 *expression2*   
Chaîne `CHAR`, chaîne `VARCHAR`, expression binaire ou expression évaluée à l’un de ces types. 

## Type de retour
<a name="r_concat_op-return-type"></a>

 Le type de retour de la chaîne est le même que celui des arguments d’entrée. Par exemple, la concaténation de deux chaînes de type `VARCHAR` renvoie une chaîne de type `VARCHAR`.

## Exemples
<a name="r_concat_op-example"></a>

 Les exemples suivants utilisent les tables USERS et VENUE de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour concaténer les champs FIRSTNAME et LASTNAME de la table USERS de l’exemple de base de données, utilisez l’exemple suivant.

```
SELECT (firstname || ' ' || lastname) as fullname
FROM users
ORDER BY 1
LIMIT 10;

+-----------------+
|    fullname     |
+-----------------+
| Aaron Banks     |
| Aaron Booth     |
| Aaron Browning  |
| Aaron Burnett   |
| Aaron Casey     |
| Aaron Cash      |
| Aaron Castro    |
| Aaron Dickerson |
| Aaron Dixon     |
| Aaron Dotson    |
+-----------------+
```

 Pour concaténer des colonnes susceptibles de contenir des valeurs nulles, utilisez l’expression [Fonctions NVL et COALESCE](r_NVL_function.md). L’exemple suivant utilise NVL pour renvoyer `0` chaque fois que la valeur `NULL` est rencontrée. 

```
SELECT (venuename || ' seats ' || NVL(venueseats, 0)) as seating
FROM venue
WHERE venuestate = 'NV' or venuestate = 'NC'
ORDER BY 1
LIMIT 10;

+-------------------------------------+
|               seating               |
+-------------------------------------+
| Ballys Hotel seats 0                |
| Bank of America Stadium seats 73298 |
| Bellagio Hotel seats 0              |
| Caesars Palace seats 0              |
| Harrahs Hotel seats 0               |
| Hilton Hotel seats 0                |
| Luxor Hotel seats 0                 |
| Mandalay Bay Hotel seats 0          |
| Mirage Hotel seats 0                |
| New York New York seats 0           |
+-------------------------------------+
```

# Fonction ASCII
<a name="r_ASCII"></a>

La fonction ASCII renvoie le code ASCII, ou le point de code Unicode, du premier caractère de la chaîne que vous spécifiez. La fonction renvoie `0` si la chaîne est vide. Elle renvoie `NULL` si la chaîne a la valeur null. 

## Syntaxe
<a name="r_ASCII-synopsis"></a>

```
ASCII('string')
```

## Argument
<a name="r_ASCII-arguments"></a>

 *string*   
Chaîne `CHAR` ou chaîne `VARCHAR`. 

## Type de retour
<a name="r_ASCII-return-type"></a>

 INTEGER 

## Exemples
<a name="r_ASCII-examples"></a>

Pour renvoyer `NULL`, utilisez l’exemple suivant. La fonction NULLIF renvoie `NULL` si les deux arguments sont identiques, si bien que l’argument d’entrée de la fonction ASCII est `NULL`. Pour plus d’informations, consultez [Fonction NULLIF](r_NULLIF_function.md).

```
SELECT ASCII(NULLIF('',''));

+-------+
| ascii |
+-------+
|  NULL |
+-------+
```

Pour renvoyer le code ASCII 0, utilisez l’exemple suivant. 

```
SELECT ASCII('');

+-------+
| ascii |
+-------+
|     0 |
+-------+
```

Pour renvoyer le code ASCII 97 pour la première lettre du mot amazon, utilisez l’exemple suivant. 

```
SELECT ASCII('amazon');

+-------+
| ascii |
+-------+
|    97 |
+-------+
```

Pour renvoyer le code ASCII 65 pour la première lettre du mot Amazon, utilisez l’exemple suivant.

```
SELECT ASCII('Amazon');

+-------+
| ascii |
+-------+
|    65 |
+-------+
```

# Fonction BPCHARCMP
<a name="r_BPCHARCMP"></a>

Compare la valeur de deux chaînes et renvoie un nombre entier. Si les chaînes sont identiques, la fonction renvoie `0`. Si la première chaîne est supérieure dans l’ordre alphabétique, la fonction renvoie `1`. Si la seconde chaîne est supérieure, la fonction renvoie `-1`. 

Pour les caractères à plusieurs octets, la comparaison est basée sur l’encodage en octets.

Synonyme de [Fonction BTTEXT\$1PATTERN\$1CMP](r_BTTEXT_PATTERN_CMP.md). 

## Syntaxe
<a name="r_BPCHARCMP-synopsis"></a>

```
BPCHARCMP(string1, string2)
```

## Arguments
<a name="r_BPCHARCMP-arguments"></a>

 *string1*   
Chaîne `CHAR` ou chaîne `VARCHAR`. 

 *string2*   
Chaîne `CHAR` ou chaîne `VARCHAR`. 

## Type de retour
<a name="r_BPCHARCMP-return-type"></a>

 INTEGER 

## Exemples
<a name="r_BPCHARCMP-examples"></a>

 Les exemples suivants utilisent la table USERS de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour déterminer si le prénom d’un utilisateur est alphabétiquement supérieur au nom de famille de l’utilisateur pour les dix premières entrées de la table USERS, utilisez l’exemple suivant. Pour les entrées où la chaîne FIRSTNAME est située plus loin dans l’ordre alphabétique que la chaîne LASTNAME, la fonction renvoie `1`. Si LASTNAME est situé plus loin dans l’ordre alphabétique que FIRSTNAME, la fonction renvoie `-1`.

```
SELECT userid, firstname, lastname, BPCHARCMP(firstname, lastname)
FROM users
ORDER BY 1, 2, 3, 4
LIMIT 10;

+--------+-----------+-----------+-----------+
| userid | firstname | lastname  | bpcharcmp |
+--------+-----------+-----------+-----------+
|      1 | Rafael    | Taylor    |        -1 |
|      2 | Vladimir  | Humphrey  |         1 |
|      3 | Lars      | Ratliff   |        -1 |
|      4 | Barry     | Roy       |        -1 |
|      5 | Reagan    | Hodge     |         1 |
|      6 | Victor    | Hernandez |         1 |
|      7 | Tamekah   | Juarez    |         1 |
|      8 | Colton    | Roy       |        -1 |
|      9 | Mufutau   | Watkins   |        -1 |
|     10 | Naida     | Calderon  |         1 |
+--------+-----------+-----------+-----------+
```

Pour renvoyer toutes les entrées de la table USERS si la fonction renvoie `0`, utilisez l’exemple suivant. La fonction renvoie `0` lorsque FIRSTNAME est identique à LASTNAME. 

```
SELECT userid, firstname, lastname,
BPCHARCMP(firstname, lastname)
FROM users 
WHERE BPCHARCMP(firstname, lastname)=0
ORDER BY 1, 2, 3, 4;

+--------+-----------+----------+-----------+
| userid | firstname | lastname | bpcharcmp |
+--------+-----------+----------+-----------+
|     62 | Chase     | Chase    |         0 |
|   4008 | Whitney   | Whitney  |         0 |
|  12516 | Graham    | Graham   |         0 |
|  13570 | Harper    | Harper   |         0 |
|  16712 | Cooper    | Cooper   |         0 |
|  18359 | Chase     | Chase    |         0 |
|  27530 | Bradley   | Bradley  |         0 |
|  31204 | Harding   | Harding  |         0 |
+--------+-----------+----------+-----------+
```

# Fonction BTRIM
<a name="r_BTRIM"></a>

La fonction BTRIM tronque une chaîne en supprimant les espaces de début et de fin ou en supprimant les caractères de début et de fin qui correspondent à une chaîne spécifiée de manière facultative. 

## Syntaxe
<a name="r_BTRIM-synopsis"></a>

```
BTRIM(string [, trim_chars ] )
```

## Arguments
<a name="r_BTRIM-arguments"></a>

 *string*   
Chaîne VARCHAR d’entrée à tronquer. 

 *trim\$1chars*   
Chaîne VARCHAR contenant les caractères à mettre en correspondance. 

## Type de retour
<a name="r_BTRIM-return-type"></a>

La fonction BTRIM renvoie une chaîne VARCHAR. 

## Exemples
<a name="r_BTRIM-examples"></a>

L’exemple suivant tronque les espaces de début et de fin de la chaîne `' abc '` : 

```
select '     abc    ' as untrim, btrim('     abc    ') as trim;

untrim    | trim
----------+------
   abc    | abc
```

L’exemple suivant supprime les chaînes `'xyz'` de début et de fin de la chaîne `'xyzaxyzbxyzcxyz'`. Les occurrences de début et de fin de `'xyz'` sont supprimées, mais celles qui se trouvent à l’intérieur de la chaîne sont conservées. 

```
select 'xyzaxyzbxyzcxyz' as untrim,
btrim('xyzaxyzbxyzcxyz', 'xyz') as trim;

     untrim      |   trim
-----------------+-----------
 xyzaxyzbxyzcxyz | axyzbxyzc
```

L’exemple suivant supprime les parties de début et de fin de la chaîne `'setuphistorycassettes'` qui correspondent à l’un des caractères de la liste *trim\$1chars* `'tes'`. Tout caractère `t`, `e` ou `s` précédant un autre caractère qui ne figure pas dans la liste *trim\$1chars* au début ou à la fin de la chaîne d’entrée est supprimé. 

```
SELECT btrim('setuphistorycassettes', 'tes');

     btrim      
-----------------
 uphistoryca
```

# Fonction BTTEXT\$1PATTERN\$1CMP
<a name="r_BTTEXT_PATTERN_CMP"></a>

Synonyme de la fonction BPCHARCMP. 

Consultez [Fonction BPCHARCMP](r_BPCHARCMP.md) pour plus de détails. 

# Fonction CHAR\$1LENGTH
<a name="r_CHAR_LENGTH"></a>

Synonyme de la fonction LEN. 

Consultez [Fonction LEN](r_LEN.md). 

# Fonction CHARACTER\$1LENGTH
<a name="r_CHARACTER_LENGTH"></a>

Synonyme de la fonction LEN. 

Consultez [Fonction LEN](r_LEN.md). 

# Fonction CHARINDEX
<a name="r_CHARINDEX"></a>

Renvoie l’emplacement de la sous-chaîne spécifiée dans une chaîne. 

Consultez [Fonction POSITION](r_POSITION.md) et [Fonction STRPOS](r_STRPOS.md) pour des fonctions similaires.

## Syntaxe
<a name="r_CHARINDEX-synopsis"></a>

```
CHARINDEX( substring, string )
```

## Arguments
<a name="charindex-arguments"></a>

 *substring*   
Sous-chaîne à rechercher dans la *chaîne*.

 *string*   
Chaîne ou colonne à rechercher.

## Type de retour
<a name="charindex-return-type"></a>

 INTEGER   
La fonction CHARINDEX renvoie un `INTEGER` correspondant à la position de la sous-chaîne (de base 1, pas de base 0). La position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. CHARINDEX renvoie `0` si la sous-chaîne ne figure pas dans la chaîne.

## Exemples
<a name="sub-charindex-usage-notes-examples"></a>

Pour renvoyer la position de la chaîne `fish` dans le mot `dog`, utilisez l’exemple suivant. 

```
SELECT CHARINDEX('fish', 'dog');

+-----------+
| charindex |
+-----------+
|         0 |
+-----------+
```

Pour renvoyer la position de la chaîne `fish` dans le mot `dogfish`, utilisez l’exemple suivant. 

```
SELECT CHARINDEX('fish', 'dogfish');

+-----------+
| charindex |
+-----------+
|         4 |
+-----------+
```

 L’exemple suivant utilise la table SALES de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour renvoyer le nombre de transactions de vente distinctes avec une commission supérieure à 999,00 dans la table SALES, utilisez l’exemple suivant. Cette commande compte les commissions supérieures à 999,00 en vérifiant si la décimale est à plus de 4 positions du début de la valeur de la commission.

```
SELECT DISTINCT CHARINDEX('.', commission), COUNT (CHARINDEX('.', commission))
FROM sales 
WHERE CHARINDEX('.', commission) > 4 
GROUP BY CHARINDEX('.', commission)
ORDER BY 1,2;

+-----------+-------+
| charindex | count |
+-----------+-------+
|         5 |   629 |
+-----------+-------+
```

# Fonction CHR
<a name="r_CHR"></a>

La fonction CHR renvoie le caractère qui correspond à la valeur du point de code ASCII spécifiée par le paramètre d’entrée.

## Syntaxe
<a name="r_CHR-synopsis"></a>

```
CHR(number)
```

## Argument
<a name="r_CHR-argument"></a>

 *number*   
Le paramètre d’entrée est un `INTEGER` qui représente une valeur de point de code ASCII.

## Type de retour
<a name="r_CHR-return-type"></a>

 CHAR   
La fonction CHR renvoie une chaîne `CHAR` si un caractère ASCII correspond à la valeur d’entrée. Si le nombre en entrée n’a aucun équivalent ASCII, la fonction renvoie `NULL`.

## Exemples
<a name="r_CHR-example"></a>

Pour renvoyer le caractère correspondant au point de code ASCII 0, utilisez l’exemple suivant. Notez que la fonction CHR renvoie `NULL` pour l’entrée `0`. 

```
SELECT CHR(0);

+-----+
| chr |
+-----+
|     |
+-----+
```

Pour renvoyer le caractère correspondant au point de code ASCII 65, utilisez l’exemple suivant.

```
SELECT CHR(65);

+-----+
| chr |
+-----+
| A   |
+-----+
```

Pour renvoyer les noms d’événements distincts qui commencent par un A majuscule (point de code ASCII 65), utilisez l’exemple suivant. L’exemple suivant utilise la table EVENT de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

```
SELECT DISTINCT eventname FROM event
WHERE SUBSTRING(eventname, 1, 1)=CHR(65) LIMIT 5;

+-----------------------+
|       eventname       |
+-----------------------+
| A Catered Affair      |
| As You Like It        |
| A Man For All Seasons |
| Alan Jackson          |
| Armando Manzanero     |
+-----------------------+
```

# Fonction COLLATE
<a name="r_COLLATE"></a>

La fonction COLLATE remplace le classement d’une colonne ou d’une expression de chaîne. 

Pour plus d'informations sur la création de tables à l'aide du classement de bases de données, consultez [CREATE TABLE](r_CREATE_TABLE_NEW.md).

Pour plus d'informations sur la création de bases de données à l'aide du classement de bases de données, consultez [CREATE DATABASE](r_CREATE_DATABASE.md).

## Syntaxe
<a name="r_COLLATE-synopsis"></a>

```
COLLATE( string, 'case_sensitive' | 'cs' | 'case_insensitive' | 'ci');
```

## Arguments
<a name="r_COLLATE-argument"></a>

 *string*   
Colonne de chaîne ou expression que vous voulez remplacer.

 *’case\$1sensitive’* \$1 *’cs’* \$1 *’case\$1insensitive’* \$1 *’ci’*   
Constante de chaîne d’un nom de classement. Amazon Redshift prend uniquement en charge les valeurs suivantes pour ce paramètre :  
+  *case\$1sensitive* 
+  *cs* 
+  *case\$1insensitive* 
+  *ci* 
*case\$1sensitive* et *cs* sont interchangeables et donnent les mêmes résultats. De même, *case\$1insensitive* et *ci* sont interchangeables et donnent les mêmes résultats.

## Type de retour
<a name="r_COLLATE-return-type"></a>

La fonction COLLATE renvoie `VARCHAR`, `CHAR` ou `SUPER` en fonction du premier type d’expression en entrée. Cette fonction ne modifie que le classement du premier argument d’entrée et ne modifie pas sa valeur de sortie.

## Exemples
<a name="r_COLLATE-example"></a>

Pour créer la table T et définir col1 dans la table T comme `case_sensitive`, utilisez l’exemple suivant.

```
CREATE TABLE T ( col1 Varchar(20) COLLATE case_sensitive );

INSERT INTO T VALUES ('john'),('JOHN');
```

 Lorsque vous exécutez la première requête, Amazon Redshift renvoie uniquement `john`. Après l’exécution de la fonction COLLATE sur col1, le classement devient `case_insensitive`. La deuxième requête renvoie à la fois `john` et `JOHN`. 

```
SELECT * FROM T WHERE col1 = 'john';

+------+
| col1 |
+------+
| john |
+------+

SELECT * FROM T WHERE COLLATE(col1, 'case_insensitive') = 'john';

+------+
| col1 |
+------+
| john |
| JOHN |
+------+
```

Pour créer la table A et définir col1 dans la table A comme `case_insensitive`, utilisez l’exemple suivant.

```
CREATE TABLE A ( col1 Varchar(20) COLLATE case_insensitive );

INSERT INTO A VALUES ('john'),('JOHN');
```

 Lorsque vous exécutez la première requête, Amazon Redshift renvoie à la fois `john` et `JOHN`. Après l’exécution de la fonction COLLATE sur col1, le classement devient `case_sensitive`. La deuxième requête renvoie uniquement `john`. 

```
SELECT * FROM A WHERE col1 = 'john';

+------+
| col1 |
+------+
| john |
| JOHN |
+------+

SELECT * FROM A WHERE COLLATE(col1, 'case_sensitive') = 'john';

+------+
| col1 |
+------+
| john |
+------+
```

# Fonction CONCAT
<a name="r_CONCAT"></a>

La fonction CONCAT concatène deux expressions et renvoie l’expression résultante. Pour concaténer plus de deux expressions, utilisez les fonction CONCAT imbriquées. L’opérateur de concaténation (`||`) entre deux expressions donne les mêmes résultats que la fonction CONCAT. 

## Syntaxe
<a name="r_CONCAT-synopsis"></a>

```
CONCAT ( expression1, expression2 )
```

## Arguments
<a name="r_CONCAT-arguments"></a>

 *expression1*, *expression2*   
Les deux arguments peuvent être une chaîne de caractères de longueur fixe, une chaîne de caractères de longueur variable, une expression binaire ou une expression qui a pour résultat l’une de ces entrées. 

## Type de retour
<a name="r_CONCAT-return-type"></a>

 CONCAT renvoie une expression. Le type de données de l’expression est le même que celui des arguments d’entrée. 

Si les expressions d’entrée sont de types différents, Amazon Redshift essaie de « convertir » implicitement l’une des expressions. Si des valeurs ne peuvent pas être converties, une erreur est renvoyée.

## Notes d’utilisation
<a name="r_CONCAT-usage-notes"></a>
+ Pour la fonction CONCAT et l’opérateur de concaténation, si une expression ou les deux ont la valeur null, le résultat de la concaténation est null.

## Exemples
<a name="r_CONCAT-examples"></a>

L’exemple suivant concatène deux littéraux caractères : 

```
SELECT CONCAT('December 25, ', '2008');

concat
-------------------
December 25, 2008
(1 row)
```

La requête suivante, utilisant l’opérateur `||` au lieu de CONCAT, produit le même résultat : 

```
SELECT 'December 25, '||'2008';

?column?
-------------------
December 25, 2008
(1 row)
```

L’exemple suivant utilise une fonction CONCAT imbriquée dans une autre fonction CONCAT pour concaténer trois chaînes de caractères : 

```
SELECT CONCAT('Thursday, ', CONCAT('December 25, ', '2008'));

concat
-----------------------------
Thursday, December 25, 2008
(1 row)
```

Pour concaténer des colonnes susceptibles de contenir NULLs, utilisez le[Fonctions NVL et COALESCE](r_NVL_function.md), qui renvoie une valeur donnée lorsqu'il rencontre la valeur NULL. L’exemple suivant utilise NVL pour renvoyer un 0 chaque fois que la valeur NULL est rencontrée. 

```
SELECT CONCAT(venuename, CONCAT(' seats ', NVL(venueseats, 0))) AS seating
FROM venue WHERE venuestate = 'NV' OR venuestate = 'NC'
ORDER BY 1
LIMIT 5;

seating                            
-----------------------------------
Ballys Hotel seats 0               
Bank of America Stadium seats 73298
Bellagio Hotel seats 0             
Caesars Palace seats 0             
Harrahs Hotel seats 0              
(5 rows)
```

La requête suivante concatène les valeurs CITY et STATE de la table VENUE : 

```
SELECT CONCAT(venuecity, venuestate)
FROM venue
WHERE venueseats > 75000
ORDER BY venueseats;

concat
-------------------
DenverCO
Kansas CityMO
East RutherfordNJ
LandoverMD
(4 rows)
```

La requête suivante utilise des fonctions CONCAT imbriquées. La requête concatène les valeurs CITY et STATE de la table VENUE, mais délimite la chaîne qui en résulte par une virgule et un espace : 

```
SELECT CONCAT(CONCAT(venuecity,', '),venuestate)
FROM venue
WHERE venueseats > 75000
ORDER BY venueseats;

concat
---------------------
Denver, CO
Kansas City, MO
East Rutherford, NJ
Landover, MD
(4 rows)
```

L’exemple suivant concatène deux expressions binaires. Où `abc` est une valeur binaire (avec une représentation hexadécimale de `616263`) et `def` est une valeur binaire (avec une représentation hexadécimale de `646566`). Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la valeur binaire.

```
SELECT CONCAT('abc'::VARBYTE, 'def'::VARBYTE);

concat
-------------------
616263646566
```

# CRC32 fonction
<a name="crc32-function"></a>

CRC32 est une fonction utilisée pour détecter les erreurs. La fonction utilise un CRC32 algorithme pour détecter les changements entre les données source et cible. La CRC32 fonction convertit une chaîne de longueur variable en une chaîne de 8 caractères qui est une représentation textuelle de la valeur hexadécimale d'une séquence binaire de 32 bits. Pour détecter les modifications entre les données source et cible, utilisez la CRC32 fonction sur les données source et stockez la sortie. Utilisez ensuite la CRC32 fonction sur les données cibles et comparez cette sortie à la sortie des données source. Les sorties seront les mêmes si les données n’ont pas été modifiées, et les sorties seront différentes si les données ont été modifiées.

## Syntaxe
<a name="crc32-function-syntax"></a>

```
CRC32(string)
```

## Arguments
<a name="crc32-function-arguments"></a>

 *string*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut implicitement à un type `CHAR` ou `VARCHAR`.

## Type de retour
<a name="crc32-function-return-type"></a>

La CRC32 fonction renvoie une chaîne de 8 caractères qui est une représentation textuelle de la valeur hexadécimale d'une séquence binaire de 32 bits. La CRC32 fonction Amazon Redshift est basée sur le polynôme CRC-32C. 

## Exemples
<a name="crc32-function-example"></a>

Pour montrer la valeur de 8 bits de la chaîne `Amazon Redshift`. 

```
SELECT CRC32('Amazon Redshift');

+----------+
|  crc32   |
+----------+
| f2726906 |
+----------+
```

# Fonction DIFFERENCE
<a name="DIFFERENCE"></a>

La fonction DIFFERENCE compare les codes Soundex américains de deux chaînes. La fonction renvoie un `INTEGER` pour indiquer le nombre de caractères correspondants entre les codes Soundex. 

 Un code Soundex est une chaîne de quatre caractères. Un code Soundex représente la sonorité d’un mot plutôt que son orthographe. Par exemple, `Smith` et `Smyth` ont le même code Soundex. 

## Syntaxe
<a name="DIFFERENCE-synopsis"></a>

```
DIFFERENCE(string1, string2)
```

## Arguments
<a name="DIFFERENCE-arguments"></a>

 *string1*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut implicitement à un type `CHAR` ou `VARCHAR`.

 *string2*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut implicitement à un type `CHAR` ou `VARCHAR`.

## Type de retour
<a name="DIFFERENCE-return-type"></a>

 INTEGER   
La fonction DIFFERENCE renvoie une valeur `INTEGER` comprise entre 0 et 4 qui compte le nombre de caractères correspondants dans les codes Soundex américains des deux chaînes. Un code Soundex comporte 4 caractères, donc la fonction DIFFERENCE renvoie `4` quand les 4 caractères des valeurs de code Soundex américain des chaînes sont identiques. DIFFERENCE renvoie `0` si l’une des deux chaînes est vide. La fonction renvoie `1` si aucune des chaînes ne contient de caractères valides. La fonction DIFFERENCE convertit uniquement les caractères ASCII alphabétiques anglais minuscules ou majuscules, y compris a–z et A–Z. DIFFERENCE ignore les autres caractères.

## Exemples
<a name="DIFFERENCE-examples"></a>

Pour comparer les valeurs Soundex des chaînes `%` et `@`, utilisez l’exemple suivant. La fonction renvoie `1` car aucune des chaînes ne contient de caractères valides.

```
SELECT DIFFERENCE('%', '@');

+------------+
| difference |
+------------+
|          1 |
+------------+
```

Pour comparer les valeurs Soundex de `Amazon` et d’une chaîne vide, utilisez l’exemple suivant. La fonction renvoie `0` car l’une des deux chaînes est vide.

```
SELECT DIFFERENCE('Amazon', '');

+------------+
| difference |
+------------+
|          0 |
+------------+
```

Pour comparer les valeurs Soundex des chaînes `Amazon` et `Ama`, utilisez l’exemple suivant. La fonction renvoie `2` car 2 caractères des valeurs Soundex des chaînes sont identiques.

```
SELECT DIFFERENCE('Amazon', 'Ama');

+------------+
| difference |
+------------+
|          2 |
+------------+
```

Pour comparer les valeurs Soundex des chaînes `Amazon` et `+-*/%Amazon`, utilisez l’exemple suivant. La fonction renvoie `4` car les quatre caractères des valeurs Soundex des chaînes sont identiques. Notez que la fonction ignore les caractères non valides `+-*/%` dans la deuxième chaîne.

```
SELECT DIFFERENCE('Amazon', '+-*/%Amazon');

+------------+
| difference |
+------------+
|          4 |
+------------+
```

Pour comparer les valeurs Soundex des chaînes `AC/DC` et `Ay See Dee See`, utilisez l’exemple suivant. La fonction renvoie `4` car les quatre caractères des valeurs Soundex des chaînes sont identiques.

```
SELECT DIFFERENCE('AC/DC', 'Ay See Dee See');

+------------+
| difference |
+------------+
|          4 |
+------------+
```

# Fonction INITCAP
<a name="r_INITCAP"></a>

Met en majuscules la première lettre de chaque mot d’une chaîne spécifiée. INITCAP prend en charge les caractères à plusieurs octets UTF-8, à concurrence de quatre octets au maximum par caractère.

## Syntaxe
<a name="r_INITCAP-synopsis"></a>

```
INITCAP(string)
```

## Argument
<a name="r_INITCAP-argument"></a>

 *string*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut implicitement à un type `CHAR` ou `VARCHAR`. 

## Type de retour
<a name="r_INITCAP-return-type"></a>

VARCHAR

## Notes d’utilisation
<a name="r_INITCAP_usage_notes"></a>

La fonction INITCAP met la première lettre de chaque mot d’une chaîne en majuscules, et les lettres suivantes en minuscules (ou à gauche). Par conséquent, il est important de comprendre quels caractères (autres que l’espace) servent de séparateurs de mots. Un caractère *séparateur de mots* est tout caractère non alphanumérique, y compris des signes de ponctuation, des symboles et des caractères de contrôle. Tous les caractères suivants sont des séparateurs de mots : 

```
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 
```

Tabulation, caractères de nouvelle de ligne, sauts de page, sauts de ligne et les retours à la ligne sont également des séparateurs de mots.

## Exemples
<a name="r_INITCAP-examples"></a>

Les exemples suivants utilisent les données des tables CATEGORY et USERS de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour mettre en majuscules les initiales de chaque mot dans la colonne CATDESC, utilisez l’exemple suivant. 

```
SELECT catid, catdesc, INITCAP(catdesc)
FROM category
ORDER BY 1, 2, 3;

+-------+--------------------------------------------+--------------------------------------------+
| catid |                  catdesc                   |                  initcap                   |
+-------+--------------------------------------------+--------------------------------------------+
|     1 | Major League Baseball                      | Major League Baseball                      |
|     2 | National Hockey League                     | National Hockey League                     |
|     3 | National Football League                   | National Football League                   |
|     4 | National Basketball Association            | National Basketball Association            |
|     5 | Major League Soccer                        | Major League Soccer                        |
|     6 | Musical theatre                            | Musical Theatre                            |
|     7 | All non-musical theatre                    | All Non-Musical Theatre                    |
|     8 | All opera and light opera                  | All Opera And Light Opera                  |
|     9 | All rock and pop music concerts            | All Rock And Pop Music Concerts            |
|    10 | All jazz singers and bands                 | All Jazz Singers And Bands                 |
|    11 | All symphony, concerto, and choir concerts | All Symphony, Concerto, And Choir Concerts |
+-------+--------------------------------------------+--------------------------------------------+
```

Pour montrer que la fonction INITCAP ne conserve pas les majuscules quand celles-ci ne figurent pas au début des mots, utilisez l’exemple suivant. Par exemple, la chaîne `MLB` devient `Mlb`.

```
SELECT INITCAP(catname)
FROM category
ORDER BY catname;

+-----------+
|  initcap  |
+-----------+
| Classical |
| Jazz      |
| Mlb       |
| Mls       |
| Musicals  |
| Nba       |
| Nfl       |
| Nhl       |
| Opera     |
| Plays     |
| Pop       |
+-----------+
```

Pour montrer que les caractères non alphanumériques autres que les espaces servent de séparateurs de mots, utilisez l’exemple suivant. Plusieurs lettres de chaque chaîne seront mises en majuscules.

```
SELECT email, INITCAP(email)
FROM users
ORDER BY userid DESC LIMIT 5;

+------------------------------------+------------------------------------+
|               email                |              initcap               |
+------------------------------------+------------------------------------+
| urna.Ut@egetdictumplacerat.edu     | Urna.Ut@Egetdictumplacerat.Edu     |
| nibh.enim@egestas.ca               | Nibh.Enim@Egestas.Ca               |
| in@Donecat.ca                      | In@Donecat.Ca                      |
| sodales@blanditviverraDonec.ca     | Sodales@Blanditviverradonec.Ca     |
| sociis.natoque.penatibus@vitae.org | Sociis.Natoque.Penatibus@Vitae.Org |
+------------------------------------+------------------------------------+
```

# Fonctions LEFT et RIGHT
<a name="r_LEFT"></a>

Ces fonctions renvoient le nombre de caractères spécifié le plus à gauche ou le plus à droite dans une chaîne de caractères.

Le chiffre est basé sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls.

## Syntaxe
<a name="r_LEFT-synopsis"></a>

```
LEFT( string,  integer )

RIGHT( string,  integer )
```

## Arguments
<a name="r_LEFT-arguments"></a>

 *string*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut à une chaîne `CHAR` ou `VARCHAR`.

 *integer*   
Nombre entier positif. 

## Type de retour
<a name="r_LEFT-return-type"></a>

VARCHAR

## Exemples
<a name="r_LEFT-example"></a>

L’exemple suivant utilise les données de la table EVENT de l’exemple de base de données TICKIT. Pour de plus amples informations, veuillez consulter [Exemple de base de données](c_sampledb.md).

Pour renvoyer les 5 caractères les plus à gauche et les 5 caractères les plus à droite des noms d'événements dont l'événement est IDs compris entre 1 000 et 1 005, utilisez l'exemple suivant. 

```
SELECT eventid, eventname,
LEFT(eventname,5) AS left_5,
RIGHT(eventname,5) AS right_5
FROM event
WHERE eventid BETWEEN 1000 AND 1005
ORDER BY 1;

+---------+----------------+--------+---------+
| eventid |   eventname    | left_5 | right_5 |
+---------+----------------+--------+---------+
|    1000 | Gypsy          | Gypsy  | Gypsy   |
|    1001 | Chicago        | Chica  | icago   |
|    1002 | The King and I | The K  | and I   |
|    1003 | Pal Joey       | Pal J  | Joey    |
|    1004 | Grease         | Greas  | rease   |
|    1005 | Chicago        | Chica  | icago   |
+---------+----------------+--------+---------+
```

# Fonction LEN
<a name="r_LEN"></a>

Renvoie la longueur de la chaîne spécifiée en tant que nombre de caractères. 

## Syntaxe
<a name="r_LEN-synopsis"></a>

LEN est synonyme de [Fonction LENGTH](r_LENGTH.md), [Fonction CHAR\$1LENGTH](r_CHAR_LENGTH.md), [Fonction CHARACTER\$1LENGTH](r_CHARACTER_LENGTH.md), et [Fonction TEXTLEN](r_TEXTLEN.md). 

```
LEN(expression)
```

## Argument
<a name="r_LEN-argument"></a>

 *expression*   
Chaîne `CHAR`, chaîne `VARCHAR`, expression `VARBYTE` ou expression qui équivaut implicitement à un type `CHAR`, `VARCHAR` ou `VARBYTE`.

## Type de retour
<a name="r_LEN-return-type"></a>

 INTEGER   
La fonction LEN renvoie un nombre entier indiquant le nombre de caractères dans la chaîne d’entrée.   
Si la chaîne d’entrée est une chaîne de caractères, la fonction LEN renvoie le nombre de caractères dans les chaînes de plusieurs octets, pas le nombre d’octets. Par exemple, une colonne `VARCHAR(12)` est nécessaire pour stocker trois caractères chinois de quatre octets. La fonction LEN renvoie `3` pour cette même chaîne. Pour obtenir la longueur d’une chaîne en octets, utilisez la fonction [OCTET\$1LENGTH](r_OCTET_LENGTH.md).

## Notes d’utilisation
<a name="r_LEN_usage_notes"></a>

Si *expression* est une chaîne `CHAR`, les espaces de fin ne sont pas comptés. 

Si *expression* est une chaîne `VARCHAR`, les espaces de fin sont comptés. 

## Exemples
<a name="r_LEN-example"></a>

Pour renvoyer le nombre d’octets et le nombre de caractères dans la chaîne `français`, utilisez l’exemple suivant.

```
SELECT OCTET_LENGTH('français'), 
LEN('français');

+--------------+-----+
| octet_length | len |
+--------------+-----+
|            9 |   8 |
+--------------+-----+
```

Pour renvoyer le nombre d’octets et le nombre de caractères dans la chaîne `français` sans utiliser la fonction OCTET\$1LENGTH, utilisez l’exemple suivant. Pour de plus amples informations, veuillez consulter [Fonction CAST](r_CAST_function.md).

```
SELECT LEN(CAST('français' AS VARBYTE)) as bytes, LEN('français');

+-------+-----+
| bytes | len |
+-------+-----+
|     9 |   8 |
+-------+-----+
```

Pour renvoyer le nombre de caractères dans les chaînes `cat` sans les espaces de fin, `cat ` avec trois espaces de fin, `cat ` avec trois espaces de fin convertis en `CHAR` de longueur 6, et `cat ` avec trois espaces de fin convertis en `VARCHAR` de longueur 6, utilisez l’exemple suivant. Notez que la fonction ne compte pas les espaces de fin des chaînes `CHAR`, mais qu’elle compte les espaces de fin des chaînes `VARCHAR`.

```
SELECT LEN('cat'), LEN('cat   '), LEN(CAST('cat   ' AS CHAR(6))) AS len_char, LEN(CAST('cat   ' AS VARCHAR(6))) AS len_varchar;

+-----+-----+----------+-------------+
| len | len | len_char | len_varchar |
+-----+-----+----------+-------------+
|   3 |   6 |        3 |           6 |
+-----+-----+----------+-------------+
```

L’exemple suivant utilise les données de la table VENUE de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour renvoyer les 10 noms de lieux les plus longs de la table VENUE, utilisez l’exemple suivant. 

```
SELECT venuename, LEN(venuename)
FROM venue
ORDER BY 2 DESC, 1
LIMIT 10;

+-----------------------------------------+-----+
|                venuename                | len |
+-----------------------------------------+-----+
| Saratoga Springs Performing Arts Center |  39 |
| Lincoln Center for the Performing Arts  |  38 |
| Nassau Veterans Memorial Coliseum       |  33 |
| Jacksonville Municipal Stadium          |  30 |
| Rangers BallPark in Arlington           |  29 |
| University of Phoenix Stadium           |  29 |
| Circle in the Square Theatre            |  28 |
| Hubert H. Humphrey Metrodome            |  28 |
| Oriole Park at Camden Yards             |  27 |
| Dick's Sporting Goods Park              |  26 |
+-----------------------------------------+-----+
```

# Fonction LENGTH
<a name="r_LENGTH"></a>

Synonyme de la fonction LEN. 

Consultez [Fonction LEN](r_LEN.md). 

# Fonction LOWER
<a name="r_LOWER"></a>

Convertit une chaîne en minuscules. LOWER prend en charge les caractères à plusieurs octets UTF-8, à concurrence de quatre octets au maximum par caractère.

## Syntaxe
<a name="r_LOWER-synopsis"></a>

```
LOWER(string)
```

## Argument
<a name="r_LOWER-argument"></a>

 *string*   
Chaîne `VARCHAR` ou expression qui équivaut au type `VARCHAR`.

## Type de retour
<a name="r_LOWER-return-type"></a>

 chaîne   
La fonction LOWER renvoie une chaîne qui est du même type que la chaîne en entrée. Par exemple, si l’entrée est une chaîne `CHAR`, la fonction renvoie une chaîne `CHAR`.

## Exemples
<a name="r_LOWER-examples"></a>

L’exemple suivant utilise les données de la table CATEGORY de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour convertir les chaînes `VARCHAR` de la colonne CATNAME en minuscules, utilisez l’exemple suivant. 

```
SELECT catname, LOWER(catname) FROM category ORDER BY 1,2;

+-----------+-----------+
|  catname  |   lower   |
+-----------+-----------+
| Classical | classical |
| Jazz      | jazz      |
| MLB       | mlb       |
| MLS       | mls       |
| Musicals  | musicals  |
| NBA       | nba       |
| NFL       | nfl       |
| NHL       | nhl       |
| Opera     | opera     |
| Plays     | plays     |
| Pop       | pop       |
+-----------+-----------+
```

# Fonctions LPAD et RPAD
<a name="r_LPAD"></a>

Ces fonctions ajoutent des caractères en préfixe ou en suffixe à une chaîne, en fonction d’une longueur spécifiée. 

## Syntaxe
<a name="r_LPAD-synopsis"></a>

```
LPAD(string1, length, [ string2 ])
```

```
RPAD(string1, length, [ string2 ])
```

## Arguments
<a name="r_LPAD-arguments"></a>

 *string1*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut implicitement à un type `CHAR` ou `VARCHAR`. 

 *longueur*   
Nombre entier qui définit la longueur du résultat de la fonction. La longueur d’une chaîne est basée sur le nombre de caractères, pas d’octets, afin que les caractères à plusieurs octets soient comptés comme des caractères seuls. Si *string1* dépasse la longueur spécifiée, il est tronqué (à droite). Si *length* est égal à zéro ou est un nombre négatif, le résultat de la fonction est une chaîne vide.

 *string2*   
(Facultatif) Un ou plusieurs caractères ajoutés en préfixe ou en suffixe à *string1*. Si cet argument n’est pas spécifié, les espaces sont utilisés. 

## Type de retour
<a name="r_LPAD-return-type"></a>

VARCHAR

## Exemples
<a name="r_LPAD-examples"></a>

Les exemples suivants utilisent les données de la table EVENT de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

Pour tronquer un ensemble spécifié de noms d’événements à 20 caractères et ajouter en préfixe des espaces aux noms plus courts, utilisez l’exemple suivant. 

```
SELECT LPAD(eventname, 20) FROM event
WHERE eventid BETWEEN 1 AND 5 ORDER BY 1;

+---------------------+
|         lpad        |
+---------------------+
|              Salome |
|        Il Trovatore |
|       Boris Godunov |
|     Gotterdammerung |
|La Cenerentola (Cind |
+-----------------------+
```

Pour tronquer le même ensemble de noms d’événements à 20 caractères, mais ajouter `0123456789` comme suffixe aux noms plus courts, utilisez l’exemple suivant. 

```
SELECT RPAD(eventname, 20,'0123456789') FROM event
WHERE eventid BETWEEN 1 AND 5 ORDER BY 1;

+----------------------+
|         rpad         |
+----------------------+
| Boris Godunov0123456 |
| Gotterdammerung01234 |
| Il Trovatore01234567 |
| La Cenerentola (Cind |
| Salome01234567890123 |
+----------------------+
```

# Fonction LTRIM
<a name="r_LTRIM"></a>

Supprime les caractères du début d’une chaîne de caractères. Supprime la chaîne la plus longue ne contenant que des caractères de la liste des caractères supprimés. La suppression est terminée lorsqu’un caractère supprimé n’apparaît pas dans la chaîne d’entrée.

## Syntaxe
<a name="r_LTRIM-synopsis"></a>

```
LTRIM( string [, trim_chars] )
```

## Arguments
<a name="r_LTRIM-arguments"></a>

 *string*   
Une colonne de chaîne, une expression ou un littéral de chaîne à supprimer.

 *trim\$1chars*   
Une colonne, une expression ou un littéral de chaîne qui représente les caractères à supprimer au début de la *chaîne*. Si la valeur n’est pas spécifiée, un espace est utilisé comme caractère de séparation.

## Type de retour
<a name="r_LTRIM-return-type"></a>

La fonction LTRIM renvoie une chaîne de caractères qui est du même type que la *chaîne* d’entrée (CHAR ou VARCHAR). 

## Exemples
<a name="r_LTRIM-example"></a>

L’exemple suivant supprime l’année de la colonne `listime`. Les caractères supprimés dans la chaîne littérale `'2008-'` indiquent les caractères à supprimer à partir de la gauche. Si vous utilisez les caractères de suppression `'028-'`, vous obtiendrez le même résultat. 

```
select listid, listtime, ltrim(listtime, '2008-')
from listing
order by 1, 2, 3
limit 10;            

listid |      listtime       |     ltrim
-------+---------------------+----------------
     1 | 2008-01-24 06:43:29 | 1-24 06:43:29
     2 | 2008-03-05 12:25:29 | 3-05 12:25:29
     3 | 2008-11-01 07:35:33 | 11-01 07:35:33
     4 | 2008-05-24 01:18:37 | 5-24 01:18:37
     5 | 2008-05-17 02:29:11 | 5-17 02:29:11
     6 | 2008-08-15 02:08:13 | 15 02:08:13
     7 | 2008-11-15 09:38:15 | 11-15 09:38:15
     8 | 2008-11-09 05:07:30 | 11-09 05:07:30
     9 | 2008-09-09 08:03:36 | 9-09 08:03:36
    10 | 2008-06-17 09:44:54 | 6-17 09:44:54
```

LTRIM supprime les caractères de *trim\$1chars* lorsqu’ils apparaissent au début de la *chaîne*. L’exemple suivant supprime les caractères C, D et G lorsqu’ils figurent au début de VENUENAME, qui est une colonne VARCHAR. 

```
select venueid, venuename, ltrim(venuename, 'CDG')
from venue
where venuename like '%Park'
order by 2
limit 7;             

venueid | venuename                  | btrim                    
--------+----------------------------+--------------------------
    121 | ATT Park                   | ATT Park                
    109 | Citizens Bank Park         | itizens Bank Park        
    102 | Comerica Park              | omerica Park             
      9 | Dick's Sporting Goods Park | ick's Sporting Goods Park
     97 | Fenway Park                | Fenway Park              
    112 | Great American Ball Park   | reat American Ball Park  
    114 | Miller Park                | Miller Park
```

L’exemple suivant utilise le caractère de suppression `2` qui est extrait de la colonne `venueid`.

```
select ltrim('2008-01-24 06:43:29', venueid) 
from venue where venueid=2;              

ltrim
------------------
008-01-24 06:43:29
```

L’exemple suivant ne supprime aucun caractère car `2` est trouvé avant le caractère de suppression `'0'`. 

```
select ltrim('2008-01-24 06:43:29', '0');              

ltrim
-------------------
2008-01-24 06:43:29
```

L’exemple suivant utilise le caractère de suppression d’espace par défaut et supprime les deux espaces du début de la chaîne. 

```
select ltrim('  2008-01-24 06:43:29');              

ltrim
-------------------
2008-01-24 06:43:29
```

# Fonction OCTETINDEX
<a name="OCTETINDEX"></a>

La fonction OCTETINDEX renvoie l’emplacement d’une sous-chaîne dans une chaîne sous la forme d’un nombre d’octets.

## Syntaxe
<a name="OCTETINDEX-synopsis"></a>

```
OCTETINDEX(substring, string)
```

## Arguments
<a name="OCTETINDEX-arguments"></a>

 *substring*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut implicitement à un type `CHAR` ou `VARCHAR`. 

 *string*   
Chaîne `CHAR`, chaîne `VARCHAR` ou expression qui équivaut implicitement à un type `CHAR` ou `VARCHAR`. 

## Type de retour
<a name="OCTETINDEX-return-type"></a>

 INTEGER   
La fonction OCTETINDEX renvoie une valeur `INTEGER` correspondant à la position de *substring* dans *string* sous la forme d’un nombre d’octets, où le premier caractère de *string* est compté comme 1. Si *string* ne contient pas de caractères multioctets, le résultat est égal au résultat de la fonction CHARINDEX. Si *string* ne contient pas *substring*, la fonction renvoie `0`. Si *substring* est vide, la fonction renvoie `1`. 

## Exemples
<a name="OCTETINDEX-examples"></a>

Pour renvoyer la position de la sous-chaîne `q` dans la chaîne`Amazon Redshift`, utilisez l'exemple suivant. Cet exemple renvoie `0` parce que *substring* ne figure pas dans *string*.

```
SELECT OCTETINDEX('q', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          0 |
+------------+
```

Pour renvoyer la position d'une sous-chaîne vide dans la chaîne`Amazon Redshift`, utilisez l'exemple suivant. Cet exemple renvoie `1` parce que *substring* est vide.

```
SELECT OCTETINDEX('', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          1 |
+------------+
```

Pour renvoyer la position de la sous-chaîne `Redshift` dans la chaîne`Amazon Redshift`, utilisez l'exemple suivant. Cet exemple renvoie `8` car *substring* commence au huitième octet de *string*.

```
SELECT OCTETINDEX('Redshift', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          8 |
+------------+
```

Pour renvoyer la position de la sous-chaîne `Redshift` dans la chaîne`Amazon Redshift`, utilisez l'exemple suivant. Cet exemple renvoie `21` car les six premiers caractères de *string* sont des caractères à deux octets.

```
SELECT OCTETINDEX('Redshift', 'Άμαζον Amazon Redshift');

+------------+
| octetindex |
+------------+
|         21 |
+------------+
```

# Fonction OCTET\$1LENGTH
<a name="r_OCTET_LENGTH"></a>

Renvoie la longueur de la chaîne spécifiée en tant que nombre d’octets. 

## Syntaxe
<a name="r_OCTET_LENGTH-synopsis"></a>

```
OCTET_LENGTH(expression)
```

## Argument
<a name="r_OCTET_LENGTH-argument"></a>

 *expression*   
Chaîne `CHAR`, chaîne `VARCHAR`, expression `VARBYTE` ou expression qui équivaut implicitement à un type `CHAR`, `VARCHAR` ou `VARBYTE`. 

## Type de retour
<a name="r_OCTET_LENGTH-return-type"></a>

 INTEGER   
La fonction OCTET\$1LENGTH renvoie un nombre entier indiquant le nombre d’octets dans la chaîne d’entrée.   
Si la chaîne d’entrée est une chaîne de caractères, la fonction [LEN](r_LEN.md) renvoie le nombre de caractères dans des chaînes de plusieurs octets, pas le nombre d’octets. Par exemple, une colonne `VARCHAR(12)` est nécessaire pour stocker trois caractères chinois de quatre octets. La fonction OCTET\$1LENGTH renvoie `12` pour cette chaîne et la fonction LEN renvoie `3` pour cette même chaîne.

## Notes d’utilisation
<a name="r_OCTET_LENGTH_usage_notes"></a>

Si *expression* est une chaîne `CHAR`, la fonction renvoie la longueur de la chaîne `CHAR`. Par exemple, la sortie d’une entrée `CHAR(6)` est un `CHAR(6)`. 

Si *expression* est une chaîne `VARCHAR`, les espaces de fin sont comptés. 

## Exemples
<a name="r_OCTET_LENGTH-example"></a>

Pour renvoyer le nombre d’octets lorsque la chaîne `francais` avec trois espaces de fin est convertie en type `CHAR` et `VARCHAR`, utilisez l’exemple suivant. Pour de plus amples informations, veuillez consulter [Fonction CAST](r_CAST_function.md).

```
SELECT OCTET_LENGTH(CAST('francais   ' AS CHAR(15))) AS octet_length_char, OCTET_LENGTH(CAST('francais   ' AS VARCHAR(15))) AS octet_length_varchar;

+-------------------+----------------------+
| octet_length_char | octet_length_varchar |
+-------------------+----------------------+
|                15 |                   11 |
+-------------------+----------------------+
```

Pour renvoyer le nombre d’octets et le nombre de caractères dans la chaîne `français`, utilisez l’exemple suivant.

```
SELECT OCTET_LENGTH('français'), LEN('français');

+--------------+-----+
| octet_length | len |
+--------------+-----+
|            9 |   8 |
+--------------+-----+
```

Pour renvoyer le nombre d’octets lorsque la chaîne `français` est convertie en `VARBYTE`, utilisez l’exemple suivant.

```
SELECT OCTET_LENGTH(CAST('français' AS VARBYTE));

+--------------+
| octet_length |
+--------------+
|            9 |
+--------------+
```

# Fonction POSITION
<a name="r_POSITION"></a>

Renvoie l’emplacement de la sous-chaîne spécifiée dans une chaîne.

Consultez [Fonction CHARINDEX](r_CHARINDEX.md) et [Fonction STRPOS](r_STRPOS.md) pour des fonctions similaires.

## Syntaxe
<a name="position-synopsis"></a>

```
POSITION(substring IN string )
```

## Arguments
<a name="r_POSITION-arguments"></a>

 *substring*   
Sous-chaîne à rechercher dans la *chaîne*. 

 *string*   
Chaîne ou colonne à rechercher. 

## Type de retour
<a name="position-return-type"></a>

La fonction POSITION renvoie un `INTEGER` correspondant à la position de la sous-chaîne (de base 1, pas de base 0). La position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. POSITION renvoie `0` si la sous-chaîne ne figure pas dans la chaîne.

## Exemples
<a name="sub-r_POSITION_usage_notes-examples"></a>

Pour renvoyer la position de la chaîne `fish` dans le mot `dog`, utilisez l’exemple suivant. 

```
SELECT POSITION('fish' IN 'dog');

+-----------+
|  position |
+-----------+
|         0 |
+-----------+
```

Pour renvoyer la position de la chaîne `fish` dans le mot `dogfish`, utilisez l’exemple suivant. 

```
SELECT POSITION('fish' IN 'dogfish');

+-----------+
|  position |
+-----------+
|         4 |
+-----------+
```

 L’exemple suivant utilise la table SALES de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour renvoyer le nombre de transactions de vente distinctes avec une commission supérieure à 999,00 dans la table SALES, utilisez l’exemple suivant. Cette commande compte les commissions supérieures à 999,00 en vérifiant si la décimale est à plus de 4 positions du début de la valeur de la commission.

```
SELECT DISTINCT POSITION('.' IN commission), COUNT (POSITION('.' IN commission))
FROM sales 
WHERE POSITION('.' IN commission) > 4 
GROUP BY POSITION('.' IN commission)
ORDER BY 1,2;

+-----------+-------+
|  position | count |
+-----------+-------+
|         5 |   629 |
+-----------+-------+
```

# Fonction QUOTE\$1IDENT
<a name="r_QUOTE_IDENT"></a>

La fonction QUOTE\$1IDENT renvoie la chaîne spécifiée sous forme de chaîne entourée de guillemets doubles. La sortie de la fonction peut être utilisée comme identificateur dans une instruction SQL. La fonction double de manière appropriée tous les guillemets doubles intégrés. 

QUOTE\$1IDENT ajoute des guillemets doubles uniquement lorsque cela est nécessaire pour créer un identifiant valide, lorsque la chaîne contient des caractères ne faisant pas partie d’un identifiant ou lorsqu’elle serait autrement convertie en minuscules. Pour renvoyer systématiquement une chaîne avec des guillemets simples, utilisez [QUOTE\$1LITERAL](r_QUOTE_LITERAL.md).

## Syntaxe
<a name="r_QUOTE_IDENT-synopsis"></a>

```
QUOTE_IDENT(string)
```

## Argument
<a name="r_QUOTE_IDENT-argument"></a>

 *string*   
Chaîne `CHAR` ou `VARCHAR`. 

## Type de retour
<a name="r_QUOTE_IDENT-return-type"></a>

La fonction QUOTE\$1IDENT renvoie le même type de chaîne que celui de l’argument *string* en entrée. 

## Exemples
<a name="r_QUOTE_IDENT-example"></a>

Pour renvoyer la chaîne `"CAT"` avec des guillemets doublés, utilisez l’exemple suivant.

```
SELECT QUOTE_IDENT('"CAT"');

+-------------+
| quote_ident |
+-------------+
| """CAT"""   |
+-------------+
```

L’exemple suivant utilise les données de la table CATEGORY de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour renvoyer la colonne CATNAME entourée de guillemets, utilisez l’exemple suivant.

```
SELECT catid, QUOTE_IDENT(catname)
FROM category
ORDER BY 1,2;

+-------+-------------+
| catid | quote_ident |
+-------+-------------+
|     1 | "MLB"       |
|     2 | "NHL"       |
|     3 | "NFL"       |
|     4 | "NBA"       |
|     5 | "MLS"       |
|     6 | "Musicals"  |
|     7 | "Plays"     |
|     8 | "Opera"     |
|     9 | "Pop"       |
|    10 | "Jazz"      |
|    11 | "Classical" |
+-------+-------------+
```

# Fonction QUOTE\$1LITERAL
<a name="r_QUOTE_LITERAL"></a>

La fonction QUOTE\$1LITERAL renvoie la chaîne spécifiée sous forme de chaîne entre guillemets simples pour qu’elle puisse être utilisée comme littéral de chaîne dans une instruction SQL. Si le paramètre d’entrée est un nombre, QUOTE\$1LITERAL le traite comme une chaîne. Double de manière appropriée les barres obliques inverses et les guillemets simples imbriqués. 

## Syntaxe
<a name="r_QUOTE_LITERAL-synopsis"></a>

```
QUOTE_LITERAL(string)
```

## Argument
<a name="r_QUOTE_LITERAL-argument"></a>

 *string*   
Chaîne `CHAR` ou `VARCHAR`. 

## Type de retour
<a name="r_QUOTE_LITERAL-return-type"></a>

La fonction QUOTE\$1LITERAL renvoie une chaîne `CHAR` ou `VARCHAR` qui est du même type de données que l’argument *string* en entrée. 

## Exemples
<a name="r_QUOTE_LITERAL-example"></a>

Pour renvoyer la chaîne `''CAT''` avec des guillemets SIMPLES, utilisez l’exemple suivant.

```
SELECT QUOTE_LITERAL('''CAT''');

+---------------+
| quote_literal |
+---------------+
| '''CAT'''     |
+---------------+
```

Les exemples suivants utilisent les données de la table CATEGORY de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour renvoyer la colonne CATNAME entourée de guillemets simples, utilisez l’exemple suivant.

```
SELECT catid, QUOTE_LITERAL(catname)
FROM category
ORDER BY 1,2;

+-------+---------------+
| catid | quote_literal |
+-------+---------------+
|     1 | 'MLB'         |
|     2 | 'NHL'         |
|     3 | 'NFL'         |
|     4 | 'NBA'         |
|     5 | 'MLS'         |
|     6 | 'Musicals'    |
|     7 | 'Plays'       |
|     8 | 'Opera'       |
|     9 | 'Pop'         |
|    10 | 'Jazz'        |
|    11 | 'Classical'   |
+-------+---------------+
```

Pour renvoyer la colonne CATID entourée de guillemets simples, utilisez l’exemple suivant.

```
SELECT QUOTE_LITERAL(catid), catname
FROM category
ORDER BY 1,2;

+---------------+-----------+
| quote_literal |  catname  |
+---------------+-----------+
| '1'           | MLB       |
| '10'          | Jazz      |
| '11'          | Classical |
| '2'           | NHL       |
| '3'           | NFL       |
| '4'           | NBA       |
| '5'           | MLS       |
| '6'           | Musicals  |
| '7'           | Plays     |
| '8'           | Opera     |
| '9'           | Pop       |
+---------------+-----------+
```

# Fonction REGEXP\$1COUNT
<a name="REGEXP_COUNT"></a>

Recherche un modèle d’expression régulière dans une chaîne et renvoie un entier indiquant le nombre de fois où le modèle spécifié apparaît dans la chaîne. Si aucune correspondance n’est trouvée, la fonction renvoie `0`. Pour plus d’informations sur les expressions régulières, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md) et [Expression régulière](https://en.wikipedia.org/wiki/Regular_expression) sur Wikipedia.

## Syntaxe
<a name="REGEXP_COUNT-synopsis"></a>

```
REGEXP_COUNT( source_string, pattern [, position [, parameters ] ] )
```

## Arguments
<a name="REGEXP_COUNT-arguments"></a>

 *source\$1string*   
Chaîne `CHAR` ou `VARCHAR`. 

 *pattern*   
Chaîne littérale UT-8 qui représente un modèle d’expression régulière. Pour plus d’informations, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md).

 *position*   
(Facultatif) `INTEGER` positif qui indique la position dans *source\$1string* où commencer la recherche. La position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. La valeur par défaut est `1`. Si *position* est inférieur à `1`, la recherche commence au premier caractère de *source\$1string*. Si *position* est supérieur au nombre de caractères de *source\$1string*, le résultat est `0`.

 *parameters*   
(Facultatif) Un ou plusieurs littéraux de chaîne qui indiquent comment la fonction correspond au modèle. Les valeurs possibles sont les suivantes :  
+ c : réaliser une correspondance avec respect de la casse. Par défaut, la correspondance avec respect de la casse est utilisée.
+ i : réaliser une correspondance avec non-respect de la casse.
+ p – Interpréter le modèle avec le type d’expression PCRE (Perl Compatible Regular Expression). Pour plus d’informations sur les PCRE, consultez [Expressions régulières compatibles avec Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) sur Wikipedia.

## Type de retour
<a name="REGEXP_COUNT-return-type"></a>

INTEGER

## Exemples
<a name="REGEXP_COUNT-examples"></a>

Pour compter le nombre de fois qu’une séquence de trois lettres apparaît, utilisez l’exemple suivant.

```
SELECT REGEXP_COUNT('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}');

+--------------+
| regexp_count |
+--------------+
|            8 |
+--------------+
```

Pour compter les occurrences de la chaîne `FOX` en utilisant une correspondance respectant la casse, utilisez l’exemple suivant.

```
SELECT REGEXP_COUNT('the fox', 'FOX', 1, 'i');

+--------------+
| regexp_count |
+--------------+
|            1 |
+--------------+
```

Pour utiliser un modèle écrit en PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule, utilisez l’exemple suivant. Cet exemple utilise l’opérateur `?=`, qui a une connotation « anticipée » spécifique dans une PCRE. Cet exemple compte le nombre d’occurrences de ces mots, avec une correspondance avec respect de la casse. 

```
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'p');

+--------------+
| regexp_count |
+--------------+
|            2 |
+--------------+
```

Pour utiliser un modèle écrit en PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule, utilisez l’exemple suivant. Il utilise l’opérateur `?=`, qui a une connotation spécifique au type PCRE. Cet exemple compte le nombre d’occurrences de ces mots, mais diffère de l’exemple précédent car il utilise une correspondance avec non-respect de la casse.

```
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'ip');

+--------------+
| regexp_count |
+--------------+
|            3 |
+--------------+
```

L’exemple suivant utilise les données de la table USERS de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour compter le nombre de fois que le nom de domaine de niveau supérieur est `org` ou `edu`, utilisez l’exemple suivant. 

```
SELECT email, REGEXP_COUNT(email,'@[^.]*\.(org|edu)') FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------+
|                     email                     | regexp_count |
+-----------------------------------------------+--------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu |            1 |
| Suspendisse.tristique@nonnisiAenean.edu       |            1 |
| amet.faucibus.ut@condimentumegetvolutpat.ca   |            0 |
| sed@lacusUtnec.ca                             |            0 |
+-----------------------------------------------+--------------+
```

# Fonction REGEXP\$1INSTR
<a name="REGEXP_INSTR"></a>

Recherche un modèle d’expression régulière dans une chaîne et renvoie un nombre entier qui indique la position de début de la sous-chaîne correspondante. Si aucune correspondance n’est trouvée, la fonction renvoie `0`. REGEXP\$1SUBSTR est similaire à la fonction [POSITION](r_POSITION.md), mais vous permet de rechercher un modèle d’expression régulière dans une chaîne. Pour plus d’informations sur les expressions régulières, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md) et [Expression régulière](https://en.wikipedia.org/wiki/Regular_expression) sur Wikipedia.

## Syntaxe
<a name="REGEXP_INSTR-synopsis"></a>

```
REGEXP_INSTR( source_string, pattern [, position [, occurrence] [, option [, parameters ] ] ] ] )
```

## Arguments
<a name="REGEXP_INSTR-arguments"></a>

 *source\$1string*   
Expression de chaîne, comme un nom de colonne, à rechercher. 

 *pattern*   
Chaîne littérale UT-8 qui représente un modèle d’expression régulière. Pour plus d’informations, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md).

 *position*   
(Facultatif) `INTEGER` positif qui indique la position dans *source\$1string* où commencer la recherche. La position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. La valeur par défaut est `1`. Si *position* est inférieur à `1`, la recherche commence au premier caractère de *source\$1string*. Si *position* est supérieur au nombre de caractères de *source\$1string*, le résultat est `0`.

 *occurrence*   
(Facultatif) `INTEGER` positif qui indique quelle occurrence du modèle utiliser. REGEXP\$1INSTR ignore les `occurrence-1` premières correspondances. La valeur par défaut est `1`. Si *occurrence* est inférieur à `1` ou supérieur au nombre de caractères dans *source\$1string*, la recherche est ignorée et le résultat est `0`.

 *option*   
(Facultatif) Valeur qui indique s’il faut renvoyer la position du premier caractère de la correspondance (`0`) ou celle du premier caractère après la fin de la correspondance (`1`). Une valeur non nulle est identique à `1`. La valeur par défaut est `0`. 

 *parameters*   
(Facultatif) Un ou plusieurs littéraux de chaîne qui indiquent comment la fonction correspond au modèle. Les valeurs possibles sont les suivantes :  
+ c : réaliser une correspondance avec respect de la casse. Par défaut, la correspondance avec respect de la casse est utilisée. 
+ i : réaliser une correspondance avec non-respect de la casse. 
+ e : extraire une sous-chaîne à l’aide d’une sous-expression. 

  Si *pattern* inclut une sous-expression, REGEXP\$1INSTR met en correspondance une sous-chaîne à l’aide de la première sous-expression incluse dans *pattern*. REGEXP\$1INSTR considère uniquement la première sous-expression ; les autres sous-expressions sont ignorées. Si le modèle n’inclut pas de sous-expression, REGEXP\$1INSTR ignore le paramètre « e ». 
+ p – Interpréter le modèle avec le type d’expression PCRE (Perl Compatible Regular Expression). Pour plus d’informations sur les PCRE, consultez [Expressions régulières compatibles avec Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) sur Wikipedia.

## Type de retour
<a name="REGEXP_INSTR-return-type"></a>

Entier

## Exemples
<a name="REGEXP_INSTR-examples"></a>

Les exemples suivants utilisent les données de la table USERS de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour rechercher le caractère `@` qui commence un nom de domaine et renvoyer la position de début de la première correspondance, utilisez l’exemple suivant.

```
SELECT email, REGEXP_INSTR(email, '@[^.]*')
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------+
|                     email                     | regexp_instr |
+-----------------------------------------------+--------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu |           21 |
| Suspendisse.tristique@nonnisiAenean.edu       |           22 |
| amet.faucibus.ut@condimentumegetvolutpat.ca   |           17 |
| sed@lacusUtnec.ca                             |            4 |
+-----------------------------------------------+--------------+
```

Pour rechercher des variantes du mot `Center` et renvoyer la position de début de la première correspondance, utilisez l’exemple suivant.

```
SELECT venuename, REGEXP_INSTR(venuename,'[cC]ent(er|re)$')
FROM venue
WHERE REGEXP_INSTR(venuename,'[cC]ent(er|re)$') > 0
ORDER BY venueid LIMIT 4;

+-----------------------+--------------+
|       venuename       | regexp_instr |
+-----------------------+--------------+
| The Home Depot Center |           16 |
| Izod Center           |            6 |
| Wachovia Center       |           10 |
| Air Canada Centre     |           12 |
+-----------------------+--------------+
```

Pour rechercher la position de début de la première occurrence de la chaîne `FOX`, à l’aide d’une logique de correspondance respectant la casse, utilisez l’exemple suivant. 

```
SELECT REGEXP_INSTR('the fox', 'FOX', 1, 1, 0, 'i');

+--------------+
| regexp_instr |
+--------------+
|            5 |
+--------------+
```

Pour utiliser un modèle écrit en PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule, utilisez l’exemple suivant. Il utilise l'opérateur `?=`, qui a une connotation « anticipée » spécifique au type PCRE. Cet exemple montre comment trouver la position de départ du deuxième mot de ce type.

```
SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'p');

+--------------+
| regexp_instr |
+--------------+
|           21 |
+--------------+
```

Pour utiliser un modèle écrit en PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule, utilisez l’exemple suivant. Il utilise l'opérateur `?=`, qui a une connotation « anticipée » spécifique au type PCRE. Cet exemple recherche la position de départ du deuxième mot de ce type, mais diffère de l’exemple précédent car il utilise une correspondance avec non-respect de la casse.

```
SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'ip');

+--------------+
| regexp_instr |
+--------------+
|           15 |
+--------------+
```

# Fonction REGEXP\$1REPLACE
<a name="REGEXP_REPLACE"></a>

Recherche un modèle d’expression régulière dans une chaîne et remplace chaque occurrence du modèle par la chaîne spécifiée. REGEXP\$1REPLACE est similaire à la [Fonction REPLACE](r_REPLACE.md), mais vous permet de rechercher un modèle d’expression régulière dans une chaîne. Pour plus d’informations sur les expressions régulières, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md) et [Expression régulière](https://en.wikipedia.org/wiki/Regular_expression) sur Wikipedia.

REGEXP\$1REPLACE est similaire à la [Fonction TRANSLATE](r_TRANSLATE.md) et la [Fonction REPLACE](r_REPLACE.md), sauf que TRANSLATE fait plusieurs remplacements de caractère unique et REPLACE remplace une chaîne entière par une autre chaîne, tandis que REGEXP\$1REPLACE vous permet de rechercher un modèle d’expression régulière dans une chaîne.

## Syntaxe
<a name="REGEXP_REPLACE-synopsis"></a>

```
REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
```

## Arguments
<a name="REGEXP_REPLACE-arguments"></a>

 *source\$1string*   
Expression de chaîne `CHAR` ou `VARCHAR`, comme un nom de colonne, à rechercher. 

 *pattern*   
Chaîne littérale UT-8 qui représente un modèle d’expression régulière. Pour plus d’informations, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md).

*replace\$1string*  
(Facultatif) Expression de chaîne `CHAR` ou `VARCHAR`, comme un nom de colonne, qui va remplacer chaque occurrence de modèle. La valeur par défaut est une chaîne vide ( "" ). 

 *position*   
(Facultatif) Entier positif qui indique la position dans *source\$1string* où commencer la recherche. La position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. La valeur par défaut est `1`. Si *position* est inférieur à `1`, la recherche commence au premier caractère de *source\$1string*. Si *position* est supérieure au nombre de caractères de *source\$1string*, le résultat est *source\$1string*.

 *parameters*   
(Facultatif) Un ou plusieurs littéraux de chaîne qui indiquent comment la fonction correspond au modèle. Les valeurs possibles sont les suivantes :  
+ c : réaliser une correspondance avec respect de la casse. Par défaut, la correspondance avec respect de la casse est utilisée.
+ i : réaliser une correspondance avec non-respect de la casse.
+ p – Interpréter le modèle avec le type d’expression PCRE (Perl Compatible Regular Expression). Pour plus d’informations sur les PCRE, consultez [Expressions régulières compatibles avec Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) sur Wikipedia.

## Type de retour
<a name="REGEXP_REPLACE-return-type"></a>

VARCHAR

Si *pattern* ou *replace\$1string* a la valeur `NULL`, la fonction renvoie `NULL`.

## Exemples
<a name="REGEXP_REPLACE-examples"></a>

Pour remplacer toutes les occurrences de la chaîne `FOX` dans la valeur `quick brown fox`, à l’aide d’une correspondance respectant la casse, utilisez l’exemple suivant.

```
SELECT REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 'i');

+---------------------+
|   regexp_replace    |
+---------------------+
| the quick brown fox |
+---------------------+
```

L’exemple suivant utilise un modèle écrit dans le type PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule. Il utilise l’opérateur `?=`, qui a une connotation « anticipée » spécifique au type PCRE. Pour remplacer chaque occurrence d’un tel mot par la valeur `[hidden]`, utilisez l’exemple suivant.

```
SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'p');

+-------------------------------+
|        regexp_replace         |
+-------------------------------+
| [hidden] plain A1234 [hidden] |
+-------------------------------+
```

L’exemple suivant utilise un modèle écrit dans le type PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule. Il utilise l’opérateur `?=`, qui a une connotation « anticipée » spécifique au type PCRE. Pour remplacer chaque occurrence d’un tel mot par la valeur `[hidden]` (diffère de l’exemple précédent car une correspondance ne respectant pas la casse est utilisée), utilisez l’exemple suivant.

```
SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'ip');

+----------------------------------+
|          regexp_replace          |
+----------------------------------+
| [hidden] plain [hidden] [hidden] |
+----------------------------------+
```

Les exemples suivants utilisent les données de la table USERS de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour supprimer le caractère `@` et le nom de domaine des adresses e-mail, utilisez l’exemple suivant.

```
SELECT email, REGEXP_REPLACE(email, '@.*\\.(org|gov|com|edu|ca)$')
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+-----------------------+
|                     email                     |    regexp_replace     |
+-----------------------------------------------+-----------------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero  |
| Suspendisse.tristique@nonnisiAenean.edu       | Suspendisse.tristique |
| amet.faucibus.ut@condimentumegetvolutpat.ca   | amet.faucibus.ut      |
| sed@lacusUtnec.ca                             | sed                   |
+-----------------------------------------------+-----------------------+
```

Pour remplacer les noms de domaine des adresses e-mail par `internal.company.com`, utilisez l’exemple suivant.

```
SELECT email, REGEXP_REPLACE(email, '@.*\\.[[:alpha:]]{2,3}','@internal.company.com') 
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------------------------------------+
|                     email                     |               regexp_replace               |
+-----------------------------------------------+--------------------------------------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero@internal.company.com  |
| Suspendisse.tristique@nonnisiAenean.edu       | Suspendisse.tristique@internal.company.com |
| amet.faucibus.ut@condimentumegetvolutpat.ca   | amet.faucibus.ut@internal.company.com      |
| sed@lacusUtnec.ca                             | sed@internal.company.com                   |
+-----------------------------------------------+--------------------------------------------+
```

# Fonction REGEXP\$1SUBSTR
<a name="REGEXP_SUBSTR"></a>

Renvoie les caractères d’une chaîne en y recherchant un modèle d’expression régulière. REGEXP\$1SUBSTR est similaire à la fonction [Fonction SUBSTRING](r_SUBSTRING.md), mais vous permet de rechercher un modèle d’expression régulière dans une chaîne. Si la fonction ne trouve pas correspondance entre l’expression régulière et aucun caractère de la chaîne, elle renvoie une chaîne vide. Pour plus d’informations sur les expressions régulières, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md) et [Expression régulière](https://en.wikipedia.org/wiki/Regular_expression) sur Wikipedia.

## Syntaxe
<a name="REGEXP_SUBSTR-synopsis"></a>

```
REGEXP_SUBSTR( source_string, pattern [, position [, occurrence [, parameters ] ] ] )
```

## Arguments
<a name="REGEXP_SUBSTR-arguments"></a>

 *source\$1string*   
Expression de chaîne à rechercher. 

 *pattern*   
Chaîne littérale UT-8 qui représente un modèle d’expression régulière. Pour plus d’informations, consultez [Opérateurs POSIX](pattern-matching-conditions-posix.md).

 *position*   
Nombre entier positif qui indique à quel endroit de *source\$1string* commencer la recherche. La position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. La valeur par défaut est 1. Si *position* est inférieur à 1, la recherche commence au premier caractère de *source\$1string*. Si *position* est supérieure au nombre de caractères de *source\$1string*, le résultat est une chaîne vide ("").

 *occurrence*   
Nombre entier positif qui indique quelle occurrence du modèle utiliser. REGEXP\$1SUBSTR ignore les *occurrence* -1 premières correspondances. La valeur par défaut est 1. Si *occurrence* est inférieur à 1 ou supérieur au nombre de caractères de la chaîne *source\$1string*, la recherche est ignorée et le résultat est vide.

 *parameters*   
Un ou plusieurs littéraux de chaîne qui indiquent comment la fonction correspond au modèle. Les valeurs possibles sont les suivantes :  
+ c : réaliser une correspondance avec respect de la casse. Par défaut, la correspondance avec respect de la casse est utilisée. 
+ i : réaliser une correspondance avec non-respect de la casse. 
+ e : extraire une sous-chaîne à l’aide d’une sous-expression. 

   Si *pattern* inclut une sous-expression, REGEXP\$1SUBSTR met en correspondance une sous-chaîne à l’aide de la première sous-expression incluse dans *pattern*. Une sous-expression est une expression dans le modèle qui est mise entre parenthèses. Par exemple, le modèle `'This is a (\\w+)'` met en correspondance la première expression avec la chaîne `'This is a '` suivie d’un mot. Au lieu de renvoyer le *modèle*, REGEXP\$1SUBSTR avec le paramètre `e` renvoie uniquement la chaîne contenue dans la sous-expression.

  REGEXP\$1SUBSTR considère uniquement la première sous-expression ; les autres sous-expressions sont ignorées. Si le modèle n’inclut pas de sous-expression, REGEXP\$1SUBSTR ignore le paramètre « e ». 
+ p – Interpréter le modèle avec le type d’expression PCRE (Perl Compatible Regular Expression). Pour plus d’informations sur les PCRE, consultez [Expressions régulières compatibles avec Perl](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions) sur Wikipedia.

## Type de retour
<a name="REGEXP_SUBSTR-return-type"></a>

VARCHAR

## Exemples
<a name="REGEXP_SUBSTR-examples"></a>

L’exemple suivant renvoie la partie d’une adresse e-mail comprise entre le caractère @ et l’extension du domaine. Les données `users` interrogées proviennent des exemples de données Amazon Redshift. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

```
SELECT email, regexp_substr(email,'@[^.]*')
FROM users
ORDER BY userid LIMIT 4;

                     email                     |      regexp_substr
-----------------------------------------------+--------------------------
 Suspendisse.tristique@nonnisiAenean.edu       | @nonnisiAenean
 amet.faucibus.ut@condimentumegetvolutpat.ca   | @condimentumegetvolutpat
 sed@lacusUtnec.ca                             | @lacusUtnec
 Cum@accumsan.com                              | @accumsan
```

L’exemple suivant renvoie la partie de l’entrée correspondant à la première occurrence de la chaîne `FOX` à l’aide d’une correspondance ne respectant pas la casse.

```
SELECT regexp_substr('the fox', 'FOX', 1, 1, 'i');

 regexp_substr
---------------
 fox
```

L’exemple suivant renvoie la partie de l’entrée correspondant à la deuxième occurrence de la chaîne `FOX` à l’aide d’une correspondance ne respectant pas la casse. Le résultat est vide (non null, longueur 0), car il n’existe pas de deuxième occurrence.

```
SELECT regexp_substr('the fox', 'FOX', 1, 2, 'i');

 regexp_substr
---------------
```

L’exemple suivant renvoie la première partie de l’entrée qui commence par des lettres minuscules. Il est fonctionnellement identique à la même instruction SELECT sans le paramètre `c`.

```
SELECT regexp_substr('THE SECRET CODE IS THE LOWERCASE PART OF 1931abc0EZ.', '[a-z]+', 1, 1, 'c');

 regexp_substr
---------------
 abc
```

L’exemple suivant utilise un modèle écrit dans le type PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule. Il utilise l'opérateur `?=`, qui a une connotation « anticipée » spécifique au type PCRE. Cet exemple renvoie la partie de l’entrée correspondant au deuxième mot de ce type.

```
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'p');

 regexp_substr
---------------
 a1234
```

L’exemple suivant utilise un modèle écrit dans le type PCRE pour localiser des mots contenant au moins un chiffre et une lettre minuscule. Il utilise l’opérateur `?=`, qui a une connotation « anticipée » spécifique au type PCRE. Cet exemple renvoie la partie de l’entrée correspondant au deuxième mot de ce type, mais diffère de l’exemple précédent car il utilise une correspondance avec non-respect de la casse.

```
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'ip');

 regexp_substr
---------------
 A1234
```

L’exemple suivant utilise une sous-expression pour rechercher la deuxième chaîne correspondant au modèle `'this is a (\\w+)'` à l’aide d’une correspondance avec respect de la casse. Il renvoie la sous-expression entre parenthèses.

```
SELECT regexp_substr(
               'This is a cat, this is a dog. This is a mouse.',
               'this is a (\\w+)', 1, 2, 'ie');
           
 regexp_substr
---------------
 dog
```

# Fonction REPEAT
<a name="r_REPEAT"></a>

Répète une chaîne le nombre de fois spécifié. Si le paramètre d’entrée est numérique, REPEAT le traite sous forme de chaîne. 

Synonyme de [Fonction REPLICATE](r_REPLICATE.md). 

## Syntaxe
<a name="r_REPEAT-synopsis"></a>

```
REPEAT(string, integer)
```

## Arguments
<a name="r_REPEAT-arguments"></a>

 *string*   
Le premier paramètre d’entrée est la chaîne à répéter. 

 *integer*   
Le deuxième paramètre est un `INTEGER` indiquant combien de fois répéter la chaîne. 

## Type de retour
<a name="r_REPEAT-return-type"></a>

VARCHAR

## Exemples
<a name="r_REPEAT-examples"></a>

L’exemple suivant utilise les données de la table CATEGORY de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour répéter la valeur de la colonne CATID dans la table CATEGORY à trois reprises, utilisez l’exemple suivant. 

```
SELECT catid, REPEAT(catid,3)
FROM category
ORDER BY 1,2;

+-------+--------+
| catid | repeat |
+-------+--------+
|     1 |    111 |
|     2 |    222 |
|     3 |    333 |
|     4 |    444 |
|     5 |    555 |
|     6 |    666 |
|     7 |    777 |
|     8 |    888 |
|     9 |    999 |
|    10 | 101010 |
|    11 | 111111 |
+-------+--------+
```

L'exemple suivant montre comment générer des chaînes allant jusqu'à 16 000 000 octets :

```
SELECT 
    LEN(REPEAT('X', 5000000)) AS five_million_bytes,
    LEN(REPEAT('Y', 16000000)) AS sixteen_million_bytes;

 five_million_bytes  | sixteen_million_bytes
----------+-----------
 5000000  | 16000000
```

# Fonction REPLACE
<a name="r_REPLACE"></a>

Remplace toutes les occurrences d’un jeu de caractères au sein d’une chaîne existante par d’autres caractères spécifiés. 

REPLACE est similaire à la [Fonction TRANSLATE](r_TRANSLATE.md) et la [Fonction REGEXP\$1REPLACE](REGEXP_REPLACE.md), sauf que TRANSLATE fait plusieurs remplacements de caractère unique et REGEXP\$1REPLACE vous permet de rechercher un modèle d’expression régulière dans une chaîne, tandis que REPLACE remplace une chaîne entière par une autre chaîne.

## Syntaxe
<a name="r_REPLACE-synopsis"></a>

```
REPLACE(string, old_chars, new_chars)
```

## Arguments
<a name="r_REPLACE-arguments"></a>

 *string*   
Chaîne `CHAR` ou `VARCHAR` à rechercher 

 *old\$1chars*   
Chaîne `CHAR` ou `VARCHAR` à remplacer. 

 *new\$1chars*   
Nouvelle chaîne `CHAR` ou `VARCHAR` remplaçant l’ancienne chaîne *old\$1string*. 

## Type de retour
<a name="r_REPLACE-return-type"></a>

VARCHAR  
Si *old\$1chars* ou *new\$1chars* a la valeur `NULL`, le retour est `NULL`. 

## Exemples
<a name="r_REPLACE-examples"></a>

L’exemple suivant utilise les données de la table CATEGORY de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour convertir la chaîne `Shows` en `Theatre` dans le champ CATGROUP, utilisez l’exemple suivant. 

```
SELECT catid, catgroup, REPLACE(catgroup, 'Shows', 'Theatre')
FROM category
ORDER BY 1,2,3;

+-------+----------+----------+
| catid | catgroup | replace  |
+-------+----------+----------+
|     1 | Sports   | Sports   |
|     2 | Sports   | Sports   |
|     3 | Sports   | Sports   |
|     4 | Sports   | Sports   |
|     5 | Sports   | Sports   |
|     6 | Shows    | Theatre  |
|     7 | Shows    | Theatre  |
|     8 | Shows    | Theatre  |
|     9 | Concerts | Concerts |
|    10 | Concerts | Concerts |
|    11 | Concerts | Concerts |
+-------+----------+----------+
```

# Fonction REPLICATE
<a name="r_REPLICATE"></a>

Synonyme de la fonction REPEAT. 

Consultez [Fonction REPEAT](r_REPEAT.md). 

# Fonction REVERSE
<a name="r_REVERSE"></a>

La fonction REVERSE s’applique à une chaîne et renvoie les caractères dans l’ordre inverse. Par exemple, `reverse('abcde')` renvoie `edcba`. Cette fonction s’applique aux types de données numérique et de date, ainsi qu’aux types de données de caractère. Toutefois, dans la plupart des cas, elle a une valeur pratique pour les chaînes de caractères. 

## Syntaxe
<a name="r_REVERSE-synopsis"></a>

```
REVERSE( expression )
```

## Argument
<a name="r_REVERSE-argument"></a>

 *expression*   
Expression avec un type de données de caractère, date, horodatage ou numérique qui représente la cible de l’inversion de caractères. Toutes les expressions sont implicitement converties en chaînes `VARCHAR`. Les espaces de fin des chaînes `CHAR` sont ignorés. 

## Type de retour
<a name="r_REVERSE-return-type"></a>

VARCHAR

## Exemples
<a name="r_REVERSE-examples"></a>

Les exemples suivants utilisent les données des tables USERS et SALES de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour sélectionner cinq noms de ville distincts et leur noms inversés correspondants à partir de la table USERS, utilisez l’exemple suivant. 

```
SELECT DISTINCT city AS cityname, REVERSE(cityname)
FROM users 
ORDER BY city LIMIT 5;

+----------+----------+
| cityname | reverse  |
+----------+----------+
| Aberdeen | needrebA |
| Abilene  | enelibA  |
| Ada      | adA      |
| Agat     | tagA     |
| Agawam   | mawagA   |
+----------+----------+
```

Pour sélectionner cinq ventes IDs et leur transformation inversée correspondante IDs sous forme de chaînes de caractères, utilisez l'exemple suivant. 

```
SELECT salesid, REVERSE(salesid)
FROM sales 
ORDER BY salesid DESC LIMIT 5;

+---------+---------+
| salesid | reverse |
+---------+---------+
|  172456 |  654271 |
|  172455 |  554271 |
|  172454 |  454271 |
|  172453 |  354271 |
|  172452 |  254271 |
+---------+---------+
```

# Fonction RTRIM
<a name="r_RTRIM"></a>

La fonction RTRIM supprime un ensemble spécifié de caractères à partir de la fin d’une chaîne. Supprime la chaîne la plus longue ne contenant que des caractères de la liste des caractères supprimés. La suppression est terminée lorsqu’un caractère supprimé n’apparaît pas dans la chaîne d’entrée.

## Syntaxe
<a name="r_RTRIM-synopsis"></a>

```
RTRIM( string, trim_chars )
```

## Arguments
<a name="r_RTRIM-arguments"></a>

 *string*   
Une colonne de chaîne, une expression ou un littéral de chaîne à supprimer.

 *trim\$1chars*   
Colonne de chaîne, expression ou littéral de chaîne représentant les caractères à supprimer à la fin de la *chaîne*. Si la valeur n’est pas spécifiée, un espace est utilisé comme caractère de séparation.

## Type de retour
<a name="r_RTRIM-return-type"></a>

Chaîne qui a le même type de données que l’argument *string*.

## Exemple
<a name="r_RTRIM-example"></a>

L’exemple suivant tronque les espaces de début et de fin de la chaîne `' abc '` : 

```
select '     abc    ' as untrim, rtrim('     abc    ') as trim;

untrim    | trim
----------+------
   abc    |    abc
```

L’exemple suivant supprime les chaînes `'xyz'` de fin de la chaîne `'xyzaxyzbxyzcxyz'`. Les occurrences de fin de `'xyz'` sont supprimées, mais celles qui se trouvent à l’intérieur de la chaîne sont conservées. 

```
select 'xyzaxyzbxyzcxyz' as untrim,
rtrim('xyzaxyzbxyzcxyz', 'xyz') as trim;

     untrim      |   trim
-----------------+-----------
 xyzaxyzbxyzcxyz | xyzaxyzbxyzc
```

L’exemple suivant supprime les parties de fin de la chaîne `'setuphistorycassettes'` qui correspondent à l’un des caractères de la liste *trim\$1chars* `'tes'`. Tout caractère `t`, `e` ou `s` précédant un autre caractère qui ne figure pas dans la liste *trim\$1chars* à la fin de la chaîne d’entrée est supprimé. 

```
SELECT rtrim('setuphistorycassettes', 'tes');

     rtrim      
-----------------
 setuphistoryca
```

L’exemple suivant tronque les caractères « Park » à la fin de VENUENAME le cas échéant : 

```
select venueid, venuename, rtrim(venuename, 'Park')
from venue
order by 1, 2, 3
limit 10;

venueid |         venuename          |          rtrim
--------+----------------------------+-------------------------
      1 | Toyota Park                | Toyota
      2 | Columbus Crew Stadium      | Columbus Crew Stadium
      3 | RFK Stadium                | RFK Stadium
      4 | CommunityAmerica Ballpark  | CommunityAmerica Ballp
      5 | Gillette Stadium           | Gillette Stadium
      6 | New York Giants Stadium    | New York Giants Stadium
      7 | BMO Field                  | BMO Field
      8 | The Home Depot Center      | The Home Depot Cente
      9 | Dick's Sporting Goods Park | Dick's Sporting Goods
     10 | Pizza Hut Park             | Pizza Hut
```

Notez que RTRIM supprime les caractères `P`, `a`, `r` ou `k` lorsqu’ils apparaissent à la fin d’un VENUENAME. 

# Fonction SOUNDEX
<a name="SOUNDEX"></a>

La fonction SOUNDEX renvoie la valeur Soundex américaine consistant en la première lettre de la chaîne en entrée, suivie d’un codage à 3 chiffres des sons qui représentent la prononciation anglaise de la chaîne que vous spécifiez. Par exemple, `Smith` et `Smyth` ont la même valeur Soundex. 

## Syntaxe
<a name="SOUNDEX-synopsis"></a>

```
SOUNDEX(string)
```

## Arguments
<a name="SOUNDEX-arguments"></a>

 *string*   
Vous spécifiez une chaîne `CHAR` ou `VARCHAR` que vous souhaitez convertir en une valeur de code Soundex américain. 

## Type de retour
<a name="SOUNDEX-return-type"></a>

VARCHAR(4)

## Notes d’utilisation
<a name="r_SOUNDEX_usage_notes"></a>

La fonction SOUNDEX convertit uniquement les caractères alphabétiques en minuscules et majuscules ASCII, y compris a–z et A–Z. SOUNDEX ignore les autres caractères. SOUNDEX renvoie une valeur Soundex unique pour une chaîne de mots multiples séparés par des espaces.

```
SELECT SOUNDEX('AWS Amazon');
            
+---------+
| soundex |
+---------+
| A252    |
+---------+
```

SOUNDEX renvoie une chaîne vide si la chaîne d’entrée ne contient pas de lettres anglaises.

```
SELECT SOUNDEX('+-*/%');

+---------+
| soundex |
+---------+
|         |
+---------+
```

## Exemples
<a name="SOUNDEX-examples"></a>

Pour renvoyer la valeur Soundex pour `Amazon`, utilisez l’exemple suivant.

```
SELECT SOUNDEX('Amazon');

+---------+
| soundex |
+---------+
| A525    |
+---------+
```

Pour renvoyer la valeur Soundex pour `smith` et `smyth`, utilisez l’exemple suivant. Notez que les valeurs Soundex sont identiques.

```
SELECT SOUNDEX('smith'), SOUNDEX('smyth');

+-------+-------+
| smith | smyth |
+-------+-------+
| S530  | S530  |
+-------+-------+
```

# Fonction SPLIT\$1PART
<a name="SPLIT_PART"></a>

Divise une chaîne sur le délimiteur spécifié et renvoie la partie à la position spécifiée.

## Syntaxe
<a name="SPLIT_PART-synopsis"></a>

```
SPLIT_PART(string, delimiter, position)
```

## Arguments
<a name="SPLIT_PART-arguments"></a>

 *string*   
Colonne de chaîne, expression ou littéral de chaîne à fractionner. La chaîne peut être CHAR ou VARCHAR.

 *delimiter*   
Chaîne de délimiteur indiquant les sections de la *chaîne* d’entrée.   
Si *delimiter* est un littéral, mettez-le entre guillemets simples. 

 *position*   
Position de la partie de *chaîne* à renvoyer (à partir de 1). Doit être un nombre entier supérieur à 0. Si la valeur de *position* est supérieure au nombre de parties de chaîne, SPLIT\$1PART renvoie une chaîne vide. Si *délimiteur* est introuvable dans *chaîne*, alors la valeur renvoyée contient le contenu de la partie spécifiée, qui pourrait être la *chaîne* entière ou une valeur vide.

## Type de retour
<a name="SPLIT_PART-return-type"></a>

Chaîne CHAR ou VARCHAR, la même que le paramètre *string*.

## Exemples
<a name="SPLIT_PART-examples"></a>

L’exemple suivant fractionne un littéral de chaîne en différentes parties en utilisant le délimiteur `$` et renvoie la seconde partie.

```
select split_part('abc$def$ghi','$',2)

split_part
----------
def
```

L’exemple suivant fractionne un littéral de chaîne en différentes parties en utilisant le délimiteur `$`. Il renvoie une chaîne vide, car la partie `4` est introuvable.

```
select split_part('abc$def$ghi','$',4)

split_part
----------
```

L’exemple suivant fractionne un littéral de chaîne en différentes parties en utilisant le délimiteur `#`. Il renvoie la chaîne entière, qui correspond à la première partie, car le délimiteur est introuvable. 

```
select split_part('abc$def$ghi','#',1)

split_part
------------
abc$def$ghi
```

L’exemple suivant divise le champ d’horodatage LISTTIME en composants d’année, de mois et de date.

```
select listtime, split_part(listtime,'-',1) as year,
split_part(listtime,'-',2) as month, 
split_part(split_part(listtime,'-',3),' ',1) as day 
from listing limit 5;

      listtime       | year | month | day
---------------------+------+-------+------
 2008-03-05 12:25:29 | 2008 | 03    | 05
 2008-09-09 08:03:36 | 2008 | 09    | 09
 2008-09-26 05:43:12 | 2008 | 09    | 26
 2008-10-04 02:00:30 | 2008 | 10    | 04
 2008-01-06 08:33:11 | 2008 | 01    | 06
```

L’exemple suivant sélectionne le champ d’horodatage LISTTIME et le divise sur le caractère `'-'` pour obtenir le mois (la deuxième partie de la chaîne LISTTIME), puis compte le nombre d’entrées de chaque mois :

```
select split_part(listtime,'-',2) as month, count(*)
from listing
group by split_part(listtime,'-',2)
order by 1, 2;

 month | count
-------+-------
    01 | 18543
    02 | 16620
    03 | 17594
    04 | 16822
    05 | 17618
    06 | 17158
    07 | 17626
    08 | 17881
    09 | 17378
    10 | 17756
    11 | 12912
    12 | 4589
```

# Fonction STRPOS
<a name="r_STRPOS"></a>

Renvoie la position d’une sous-chaîne dans une chaîne spécifiée. 

Consultez [Fonction CHARINDEX](r_CHARINDEX.md) et [Fonction POSITION](r_POSITION.md) pour des fonctions similaires.

## Syntaxe
<a name="r_STRPOS-synopsis"></a>

```
STRPOS(string, substring )
```

## Arguments
<a name="r_STRPOS-arguments"></a>

 *string*   
Le premier paramètre d’entrée est la chaîne `CHAR` ou `VARCHAR` à rechercher. 

 *substring*   
Le deuxième paramètre est la sous-chaîne à rechercher dans la *chaîne*. 

## Type de retour
<a name="r_STRPOS-return-type"></a>

INTEGER  
La fonction STRPOS renvoie un `INTEGER` correspondant à la position de l’argument *substring* (de base 1, pas de base 0). La position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls.

## Notes d’utilisation
<a name="r_STRPOS_usage_notes"></a>

STRPOS renvoie `0` si *substring* n’est pas trouvé dans *string*. 

```
SELECT STRPOS('dogfish', 'fist');

+--------+
| strpos |
+--------+
|      0 |
+--------+
```

## Exemples
<a name="r_STRPOS-examples"></a>

Pour montrer la position de `fish` dans `dogfish`, utilisez l’exemple suivant. 

```
SELECT STRPOS('dogfish', 'fish');

+--------+
| strpos |
+--------+
|      4 |
+--------+
```

L’exemple suivant utilise les données de la table SALES de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour renvoyer le nombre de transactions de vente avec une COMMISSION de plus de 999,00 à partir de la table SALES, utilisez l’exemple suivant. 

```
SELECT DISTINCT STRPOS(commission, '.'),
COUNT (STRPOS(commission, '.'))
FROM sales
WHERE STRPOS(commission, '.') > 4
GROUP BY STRPOS(commission, '.')
ORDER BY 1, 2;

+--------+-------+
| strpos | count |
+--------+-------+
|      5 |   629 |
+--------+-------+
```

# Fonction STRTOL
<a name="r_STRTOL"></a>

Convertit une expression de chaîne d’un nombre de la base spécifiée en la valeur de nombre entier équivalente. La valeur convertie doit est comprise dans la plage de 64 bits signée. 

## Syntaxe
<a name="r_STRTOL-syntax"></a>

```
STRTOL(num_string, base)
```

## Arguments
<a name="r_STRTOL-arguments"></a>

 *num\$1string*   
Expression de chaîne d’un nombre à convertir. Si *num\$1string* est vide ( `''` ) ou commence par le caractère null (`'\0'`), la valeur convertie est `0`. Si *num\$1string* est une colonne contenant une valeur NULL, STRTOL renvoie `NULL`. La chaîne peut commencer par n’importe quelle quantité d’espace vide, éventuellement suivie d’un signe plus « `+` » ou moins « `-` » pour indiquer si elle est positive ou négative. La valeur par défaut est « `+` ». Si la *base* est `16`, la chaîne peut éventuellement commencer par « `0x` ». 

*base*  
`INTEGER` entre 2 et 36.

## Type de retour
<a name="r_STRTOL-return-type"></a>

BIGINT  
Si *num\$1string* a pour valeur null, la fonction renvoie `NULL`.

## Exemples
<a name="r_STRTOL-examples"></a>

Pour convertir des paires de valeur de chaîne et de base en entiers, utilisez les exemples suivants.

```
SELECT STRTOL('0xf',16);

+--------+
| strtol |
+--------+
|     15 |
+--------+

SELECT STRTOL('abcd1234',16);

+------------+
|   strtol   |
+------------+
| 2882343476 |
+------------+

SELECT STRTOL('1234567', 10);

+---------+
| strtol  |
+---------+
| 1234567 |
+---------+

SELECT STRTOL('1234567', 8);

+--------+
| strtol |
+--------+
| 342391 |
+--------+

SELECT STRTOL('110101', 2);

+--------+
| strtol |
+--------+
|     53 |
+--------+

SELECT STRTOL('\0', 2);

+--------+
| strtol |
+--------+
|      0 |
+--------+
```

# Fonction SUBSTRING
<a name="r_SUBSTRING"></a>

Renvoie le sous-ensemble d’une chaîne sur la base de la position de départ spécifiée.

Si l’entrée est une chaîne de caractères, la position de départ et le nombre de caractères extraits sont basés sur les caractères, pas les octets, afin que les caractères à plusieurs octets soient comptés comme des caractères uniques. Si l’entrée est une expression binaire, la position de départ et la sous-chaîne extraite sont basées sur des octets. Vous ne pouvez pas spécifier de longueur négative, mais vous pouvez spécifier une position de début négative.

## Syntaxe
<a name="r_SUBSTRING-synopsis"></a>

```
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
```

```
SUBSTRING(character_string, start_position, number_characters )
```

```
SUBSTRING(binary_expression, start_byte, number_bytes )
```

```
SUBSTRING(binary_expression, start_byte )
```

## Arguments
<a name="r_SUBSTRING-arguments"></a>

 *character\$1string*   
Chaîne à rechercher. Les types de données non-caractères sont traités comme une chaîne. 

 *start\$1position*   
Position au sein de la chaîne à laquelle commencer l’extraction, à partir de 1. La position de début *start\$1position* est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. Ce numéro peut être négatif.

 *number\$1characters*   
Nombre de caractères à extraire (longueur de la sous-chaîne). Le nombre de caractères *number\$1characters* est basé sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. Ce numéro ne peut pas être négatif.

 *binary\$1expression*   
binary\$1expression du type de données VARBYTE à rechercher. 

 *start\$1byte*   
Position au sein de l’expression binaire à laquelle commencer l’extraction, à partir de 1. Ce numéro peut être négatif.

 *number\$1bytes*   
Nombre d’octets à extraire, c’est-à-dire la longueur de la sous-chaîne. Ce numéro ne peut pas être négatif.

## Type de retour
<a name="r_SUBSTRING-return-type"></a>

VARCHAR ou VARBYTE selon l’entrée.

## Notes d’utilisation
<a name="r_SUBSTRING_usage_notes"></a>

Vous trouverez ci-dessous quelques exemples de la façon dont vous pouvez utiliser *start\$1position* et *number\$1characters* pour extraire des sous-chaînes à partir de différentes positions d’une chaîne.

L’exemple suivant renvoie une chaîne de quatre caractères commençant par le sixième caractère. 

```
select substring('caterpillar',6,4);
substring
-----------
pill
(1 row)
```

Si *start\$1position* \$1 *number\$1characters* dépasse la longueur de la *chaîne*, SUBSTRING renvoie une sous-chaîne commençant par *start\$1position* jusqu’à la fin de la chaîne. Par exemple : 

```
select substring('caterpillar',6,8);
substring
-----------
pillar
(1 row)
```

Si `start_position` est négatif ou égal à 0, la fonction SUBSTRING renvoie une sous-chaîne commençant au premier caractère de la chaîne d’une longueur de `start_position` \$1 `number_characters` -1. Par exemple :

```
select substring('caterpillar',-2,6);
substring
-----------
cat
(1 row)
```

Si `start_position` \$1 `number_characters` -1 est inférieur ou égal à zéro, SUBSTRING renvoie une chaîne vide. Par exemple :

```
select substring('caterpillar',-5,4);
substring
-----------

(1 row)
```

## Exemples
<a name="r_SUBSTRING-examples"></a>

L’exemple suivant renvoie le mois de la chaîne LISTTIME dans la table LISTING : 

```
select listid, listtime,
substring(listtime, 6, 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

L’exemple suivant est le même que ci-dessus, mais utilise l’option FROM...FOR : 

```
select listid, listtime,
substring(listtime from 6 for 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

Vous ne pouvez pas utiliser SUBSTRING pour extraire de manière prévisible le préfixe d’une chaîne pouvant contenir des caractères à plusieurs octets, car vous devez spécifier la longueur d’une chaîne de plusieurs octets basée sur le nombre d’octets, pas sur le nombre de caractères. Pour extraire le segment de début d’une chaîne en fonction de la longueur en octets, vous pouvez utiliser la fonction CAST sur la chaîne au format VARCHAR(*byte\$1length*) pour tronquer la chaîne, où *byte\$1length* est la longueur requise. L’exemple suivant extrait les 5 premiers octets de la chaîne `'Fourscore and seven'`.

```
select cast('Fourscore and seven' as varchar(5));

varchar
-------
Fours
```

L’exemple suivant illustre une position de départ négative d’une valeur binaire `abc`. Comme la position de départ est -3, la sous-chaîne est extraite du début de la valeur binaire. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.

```
select substring('abc'::varbyte, -3);

 substring
-----------
 616263
```

L’exemple suivant montre un 1 pour la position de départ d’une valeur binaire `abc`. Comme aucune longueur n’est spécifiée, la chaîne est extraite de la position de départ jusqu’à la fin de la chaîne. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.

```
select substring('abc'::varbyte, 1);

 substring
-----------
 616263
```

L’exemple suivant montre un 3 pour la position de départ d’une valeur binaire `abc`. Comme aucune longueur n’est spécifiée, la chaîne est extraite de la position de départ jusqu’à la fin de la chaîne. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.

```
select substring('abc'::varbyte, 3);

 substring
-----------
 63
```

L’exemple suivant montre un 2 pour la position de départ d’une valeur binaire `abc`. La chaîne est extraite de la position de départ à la position 10, mais la fin de la chaîne est à la position 3. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.

```
select substring('abc'::varbyte, 2, 10);

 substring
-----------
 6263
```

L’exemple suivant montre un 2 pour la position de départ d’une valeur binaire `abc`. La chaîne est extraite de la position de départ pour 1 octet. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.

```
select substring('abc'::varbyte, 2, 1);

 substring
-----------
 62
```

L’exemple suivant renvoie le prénom `Ana` qui apparaît après le dernier espace de la chaîne d’entrée `Silva, Ana`.

```
select reverse(substring(reverse('Silva, Ana'), 1, position(' ' IN reverse('Silva, Ana'))))

 reverse
-----------
 Ana
```

# Fonction TEXTLEN
<a name="r_TEXTLEN"></a>

Synonyme de la fonction LEN. 

Consultez [Fonction LEN](r_LEN.md). 

# Fonction TRANSLATE
<a name="r_TRANSLATE"></a>

Pour une expression données, remplace toutes les occurrences de caractères spécifiés par des produits de remplacement spécifiés. Les caractères existants sont mappés à des caractères de remplacement en fonction de leurs positions dans les arguments *characters\$1to\$1replace* et *characters\$1to\$1substitute*. Si le nombre de caractères spécifiés dans l’argument *characters\$1to\$1replace* est supérieur à celui de l’argument *characters\$1to\$1substitute*, les caractères supplémentaires depuis l’argument *characters\$1to\$1replace* sont omis dans la valeur de retour.

TRANSLATE est similaire à la [Fonction REPLACE](r_REPLACE.md) et la [Fonction REGEXP\$1REPLACE](REGEXP_REPLACE.md), sauf que REPLACE remplace une chaîne entière par une autre chaîne et que REGEXP\$1REPLACE vous permet de rechercher un modèle d’expression régulière dans une chaîne, tandis que TRANSLATE fait plusieurs remplacements de caractère unique.

Si un argument a la valeur null, le retour est `NULL`.

## Syntaxe
<a name="r_TRANSLATE-synopsis"></a>

```
TRANSLATE( expression, characters_to_replace, characters_to_substitute )
```

## Arguments
<a name="r_TRANSLATE-arguments"></a>

 *expression*   
Expression à traduire.

 *characters\$1to\$1replace*   
Chaîne contenant les caractères à remplacer.

 *characters\$1to\$1substitute*   
Chaîne contenant les caractères à remplacer.

## Type de retour
<a name="r_TRANSLATE-return-type"></a>

VARCHAR

## Exemples
<a name="r_TRANSLATE-examples"></a>

Pour remplacer plusieurs caractères dans une chaîne, utilisez l’exemple suivant. 

```
SELECT TRANSLATE('mint tea', 'inea', 'osin');

+-----------+
| translate |
+-----------+
| most tin  |
+-----------+
```

Les exemples suivants utilisent les données de la table USERS de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour remplacer le signe arobase (@) par un point dans toutes les valeurs d’une colonne, utilisez l’exemple suivant. 

```
SELECT email, TRANSLATE(email, '@', '.') as obfuscated_email
FROM users LIMIT 10;

+---------------------------------------+---------------------------------------+
|                 email                 |           obfuscated_email            |
+---------------------------------------+---------------------------------------+
| Cum@accumsan.com                      | Cum.accumsan.com                      |
| lorem.ipsum@Vestibulumante.com        | lorem.ipsum.Vestibulumante.com        |
| non.justo.Proin@ametconsectetuer.edu  | non.justo.Proin.ametconsectetuer.edu  |
| non.ante.bibendum@porttitortellus.org | non.ante.bibendum.porttitortellus.org |
| eros@blanditatnisi.org                | eros.blanditatnisi.org                |
| augue@Donec.ca                        | augue.Donec.ca                        |
| cursus@pedeacurna.edu                 | cursus.pedeacurna.edu                 |
| at@Duis.com                           | at.Duis.com                           |
| quam@facilisisvitaeorci.ca            | quam.facilisisvitaeorci.ca            |
| mi.lorem@nunc.edu                     | mi.lorem.nunc.edu                     |
+---------------------------------------+---------------------------------------+
```

 Pour remplacer des espaces par des traits de soulignement et supprimer les points de toutes les valeurs d’une colonne, utilisez l’exemple suivant. 

```
SELECT city, TRANSLATE(city, ' .', '_') 
FROM users
WHERE city LIKE 'Sain%' OR city LIKE 'St%'
GROUP BY city
ORDER BY city;

+----------------+---------------+
|      city      |   translate   |
+----------------+---------------+
| Saint Albans   | Saint_Albans  |
| Saint Cloud    | Saint_Cloud   |
| Saint Joseph   | Saint_Joseph  |
| Saint Louis    | Saint_Louis   |
| Saint Paul     | Saint_Paul    |
| St. George     | St_George     |
| St. Marys      | St_Marys      |
| St. Petersburg | St_Petersburg |
| Stafford       | Stafford      |
| Stamford       | Stamford      |
| Stanton        | Stanton       |
| Starkville     | Starkville    |
| Statesboro     | Statesboro    |
| Staunton       | Staunton      |
| Steubenville   | Steubenville  |
| Stevens Point  | Stevens_Point |
| Stillwater     | Stillwater    |
| Stockton       | Stockton      |
| Sturgis        | Sturgis       |
+----------------+---------------+
```

# Fonction TRIM
<a name="r_TRIM"></a>

Tronque une chaîne en supprimant les espaces ou les caractères spécifiés.

## Syntaxe
<a name="r_TRIM-synopsis"></a>

```
TRIM( [ BOTH | LEADING | TRAILING ] [trim_chars FROM ] string )
```

## Arguments
<a name="r_TRIM-arguments"></a>

 BOTH \$1 LEADING \$1 TRAILING   
(Facultatif) Spécifie l’emplacement à partir duquel les caractères doivent être tronqués. Utilisez BOTH pour supprimer les caractères de début et de fin, utilisez LEADING pour supprimer uniquement les caractères de début et utilisez TRAILING pour supprimer uniquement les caractères de fin. Si ce paramètre est omis, les caractères de début et de fin sont tronqués.

 *trim\$1chars*   
(Facultatif) Caractères à tronquer à partir de la chaîne. Si ce paramètre est oublié, les blancs sont tronqués.

 *string*   
Chaîne à tronquer. 

## Type de retour
<a name="r_TRIM-return-type"></a>

La fonction TRIM renvoie une chaîne `VARCHAR` ou `CHAR`. Si vous utilisez la fonction TRIM avec une commande SQL, Amazon Redshift convertit implicitement les résultats en `VARCHAR`. Si vous utilisez la fonction TRIM dans la liste SELECT dune fonction SQL et qu’Amazon Redshift ne convertit pas implicitement les résultats, vous devrez peut-être effectuer une conversion explicite pour éviter une erreur de décalage de type de données. Pour plus d’informations sur les conversions explicites, consultez les fonctions [Fonction CAST](r_CAST_function.md) et [Fonction CONVERT](r_CONVERT_function.md).

## Exemples
<a name="r_TRIM-example"></a>

Pour tronquer les espaces de début et de fin de la chaîne ` dog `, utilisez l’exemple suivant. 

```
SELECT TRIM('    dog    ');

+-------+
| btrim |
+-------+
| dog   |
+-------+
```

Pour tronquer les espaces de début et de fin de la chaîne ` dog `, utilisez l’exemple suivant. 

```
SELECT TRIM(BOTH FROM '    dog    ');

+-------+
| btrim |
+-------+
| dog   |
+-------+
```

Pour supprimer les guillemets doubles ouvrants de la chaîne `"dog"`, utilisez l’exemple suivant.

```
SELECT TRIM(LEADING '"' FROM'"dog"');

+-------+
| ltrim |
+-------+
| dog"  |
+-------+
```

Pour supprimer les guillemets doubles fermants de la chaîne `"dog"`, utilisez l’exemple suivant. 

```
SELECT TRIM(TRAILING '"' FROM'"dog"');

+-------+
| rtrim |
+-------+
| "dog  |
+-------+
```

TRIM supprime les caractères de *trim\$1chars* qui apparaissent au début ou à la fin de l’argument *string*. L’exemple suivant tronque les caractères « C », « D » et « G » lorsqu’ils figurent au début ou à la fin de VENUENAME, qui est une colonne `VARCHAR`. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

```
SELECT venueid, venuename, TRIM('CDG' FROM venuename)
FROM venue
WHERE venuename LIKE '%Park'
ORDER BY 2
LIMIT 7;

+---------+----------------------------+---------------------------+
| venueid |         venuename          |           btrim           |
+---------+----------------------------+---------------------------+
|     121 | AT&T Park                  | AT&T Park                 |
|     109 | Citizens Bank Park         | itizens Bank Park         |
|     102 | Comerica Park              | omerica Park              |
|       9 | Dick's Sporting Goods Park | ick's Sporting Goods Park |
|      97 | Fenway Park                | Fenway Park               |
|     112 | Great American Ball Park   | reat American Ball Park   |
|     114 | Miller Park                | Miller Park               |
+---------+----------------------------+---------------------------+
```

# Fonction UPPER
<a name="r_UPPER"></a>

Convertit la valeur en majuscules. UPPER prend en charge les caractères à plusieurs octets UTF-8, à concurrence de quatre octets au maximum par caractère.

## Syntaxe
<a name="r_UPPER-synopsis"></a>

```
UPPER(string)
```

## Arguments
<a name="r_UPPER-arguments"></a>

 *string*   
Le paramètre d’entrée est une chaîne `VARCHAR` ou tout autre type de données, tel que `CHAR`, qui peut être implicitement converti en `VARCHAR`. 

## Type de retour
<a name="r_UPPER-return-type"></a>

La fonction UPPER renvoie une chaîne de caractères qui est du même type que la chaîne d’entrée. Par exemple, la fonction renvoie une chaîne `VARCHAR` si l’entrée est une chaîne `VARCHAR`.

## Exemples
<a name="r_UPPER-examples"></a>

L’exemple suivant utilise les données de la table CATEGORY de l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md). 

Pour convertir le champ CATNAME en majuscules, utilisez ce qui suit. 

```
SELECT catname, UPPER(catname) 
FROM category 
ORDER BY 1,2;

+-----------+-----------+
|  catname  |   upper   |
+-----------+-----------+
| Classical | CLASSICAL |
| Jazz      | JAZZ      |
| MLB       | MLB       |
| MLS       | MLS       |
| Musicals  | MUSICALS  |
| NBA       | NBA       |
| NFL       | NFL       |
| NHL       | NHL       |
| Opera     | OPERA     |
| Plays     | PLAYS     |
| Pop       | POP       |
+-----------+-----------+
```

# Fonctions d’informations sur le type SUPER
<a name="c_Type_Info_Functions"></a>

Vous trouverez ci-dessous une description des fonctions d’informations de type pour SQL prises en charge par Amazon Redshift pour dériver les informations dynamiques à partir des entrées du type de données `SUPER`.

**Topics**
+ [Fonction DECIMAL\$1PRECISION](r_decimal_precision.md)
+ [Fonction DECIMAL\$1SCALE](r_decimal_scale.md)
+ [Fonction IS\$1ARRAY](r_is_array.md)
+ [Fonction IS\$1BIGINT](r_is_bigint.md)
+ [Fonction IS\$1BOOLEAN](r_is_boolean.md)
+ [Fonction IS\$1CHAR](r_is_char.md)
+ [Fonction IS\$1DECIMAL](r_is_decimal.md)
+ [Fonction IS\$1FLOAT](r_is_float.md)
+ [Fonction IS\$1INTEGER](r_is_integer.md)
+ [Fonction IS\$1OBJECT](r_is_object.md)
+ [Fonction IS\$1SCALAR](r_is_scalar.md)
+ [Fonction IS\$1SMALLINT](r_is_smallint.md)
+ [Fonction IS\$1VARCHAR](r_is_varchar.md)
+ [Fonction JSON\$1SIZE](r_json_size.md)
+ [Fonction JSON\$1TYPEOF](r_json_typeof.md)
+ [SIZE](r_SIZE.md)

# Fonction DECIMAL\$1PRECISION
<a name="r_decimal_precision"></a>

Vérifie la précision du nombre total maximal de chiffres décimaux à stocker. Ce nombre comprend les chiffres qui se situent à gauche et à droite de la virgule décimale. La plage de précision va de 1 à 38, avec une valeur par défaut de 38.

## Syntaxe
<a name="r_decimal_precision-synopsis"></a>

```
DECIMAL_PRECISION(super_expression)
```

## Arguments
<a name="r_decimal_precision-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_decimal_precision-returns"></a>

`INTEGER`

## Exemples
<a name="r_decimal_precision_example"></a>

Pour appliquer la fonction DECIMAL\$1PRECISION à la table t, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (3.14159);

SELECT DECIMAL_PRECISION(s) FROM t;

+-------------------+
| decimal_precision |
+-------------------+
|                 6 |
+-------------------+
```

# Fonction DECIMAL\$1SCALE
<a name="r_decimal_scale"></a>

Vérifie le nombre de chiffres décimaux à stocker à droite de la virgule. La plage de l’échelle est comprise entre 0 et le point de précision, avec une valeur par défaut de 0.

## Syntaxe
<a name="r_decimal_scale-synopsis"></a>

```
DECIMAL_SCALE(super_expression)
```

## Arguments
<a name="r_decimal_scale-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_decimal_scale-returns"></a>

`INTEGER`

## Exemples
<a name="r_decimal_scale_example"></a>

Pour appliquer la fonction DECIMAL\$1SCALE à la table t, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (3.14159);

SELECT DECIMAL_SCALE(s) FROM t;

+---------------+
| decimal_scale |
+---------------+
|             5 |
+---------------+
```

# Fonction IS\$1ARRAY
<a name="r_is_array"></a>

Vérifie si une variable est un tableau. La fonction renvoie `true` si la variable est un tableau. La fonction inclut également les tableaux vides. Sinon, la fonction renvoie `false` pour toutes les autres valeurs, y compris null.

## Syntaxe
<a name="r_is_array-synopsis"></a>

```
IS_ARRAY(super_expression)
```

## Arguments
<a name="r_is_array-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_array-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_array_example"></a>

Pour vérifier si `[1,2]` est un tableau à l’aide de la fonction IS\$1ARRAY, utilisez l’exemple suivant.

```
SELECT IS_ARRAY(JSON_PARSE('[1,2]'));

+----------+
| is_array |
+----------+
| true     |
+----------+
```

# Fonction IS\$1BIGINT
<a name="r_is_bigint"></a>

Vérifie si une valeur est de type `BIGINT`. La fonction IS\$1BIGINT renvoie `true` pour les nombres d’échelle 0 dans la plage de 64 bits. Sinon, la fonction renvoie `false` pour toutes les autres valeurs, y compris null et les nombres à virgule flottante.

La fonction IS\$1BIGINT est un sur-ensemble de IS\$1INTEGER.

## Syntaxe
<a name="r_is_bigint-synopsis"></a>

```
IS_BIGINT(super_expression)
```

## Arguments
<a name="r_is_bigint-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_bigint-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_bigint_example"></a>

Pour vérifier si `5` est de type `BIGINT` à l’aide de la fonction IS\$1BIGINT, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_BIGINT(s) FROM t;

+---+-----------+
| s | is_bigint |
+---+-----------+
| 5 | true      |
+---+-----------+
```

# Fonction IS\$1BOOLEAN
<a name="r_is_boolean"></a>

Vérifie si une valeur est de type `BOOLEAN`. La fonction IS\$1BOOLEAN renvoie `true` pour les booléens JSON constants. La fonction renvoie `false` pour toutes les autres valeurs, y compris null.

## Syntaxe
<a name="r_is_boolean-synopsis"></a>

```
IS_BOOLEAN(super_expression)
```

## Arguments
<a name="r_is_boolean-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_boolean-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_boolean_example"></a>

Pour vérifier si `TRUE` est de type `BOOLEAN` à l’aide de la fonction IS\$1BOOLEAN, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (TRUE);

SELECT s, IS_BOOLEAN(s) FROM t;

+------+------------+
|  s   | is_boolean |
+------+------------+
| true | true       |
+------+------------+
```

# Fonction IS\$1CHAR
<a name="r_is_char"></a>

Vérifie si une valeur est de type `CHAR`. La fonction IS\$1CHAR renvoie `true` pour les chaînes qui contiennent uniquement des caractères ASCII, car le type CHAR ne peut stocker que des caractères au format ASCII. La fonction renvoie `false` pour toutes les autres valeurs.

## Syntaxe
<a name="r_is_char-synopsis"></a>

```
IS_CHAR(super_expression)
```

## Arguments
<a name="r_is_char-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_char-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_char_example"></a>

Pour vérifier si `t` est de type `CHAR` à l’aide de la fonction IS\$1CHAR, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES ('t');

SELECT s, IS_CHAR(s) FROM t;

+-----+---------+
|  s  | is_char |
+-----+---------+
| "t" | true    |
+-----+---------+
```

# Fonction IS\$1DECIMAL
<a name="r_is_decimal"></a>

Vérifie si une valeur est de type `DECIMAL`. La fonction IS\$1DECIMAL renvoie `true` pour les nombres qui ne sont pas à virgule flottante. La fonction renvoie `false` pour toutes les autres valeurs, y compris null. 

La fonction IS\$1DECIMAL est un sur-ensemble de IS\$1BIGINT.

## Syntaxe
<a name="r_is_decimal-synopsis"></a>

```
IS_DECIMAL(super_expression)
```

## Arguments
<a name="r_is_decimal-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_decimal-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_decimal_example"></a>

Pour vérifier si `1.22` est de type `DECIMAL` à l’aide de la fonction IS\$1DECIMAL, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (1.22);

SELECT s, IS_DECIMAL(s) FROM t;

+------+------------+
|  s   | is_decimal |
+------+------------+
| 1.22 | true       |
+------+------------+
```

# Fonction IS\$1FLOAT
<a name="r_is_float"></a>

Vérifie si une valeur est un nombre à virgule flottante. La fonction IS\$1FLOAT renvoie `true` pour les nombres à virgule flottante (`FLOAT4` et `FLOAT8`). La fonction renvoie `false` pour toutes les autres valeurs.

L’ensemble IS\$1DECIMAL et l’ensemble IS\$1FLOAT sont dissociés.

## Syntaxe
<a name="r_is_float-synopsis"></a>

```
IS_FLOAT(super_expression)
```

## Arguments
<a name="r_is_float-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_float-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_float_example"></a>

Pour vérifier si `2.22::FLOAT` est de type `FLOAT` à l’aide de la fonction IS\$1FLOAT, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES(2.22::FLOAT);

SELECT s, IS_FLOAT(s) FROM t;

+---------+----------+
|    s    | is_float |
+---------+----------+
| 2.22e+0 | true     |
+---------+----------+
```

# Fonction IS\$1INTEGER
<a name="r_is_integer"></a>

Renvoie `true` pour les nombres d’échelle 0 dans la plage de 32 bits, et `false` pour toutes les autres valeurs (y compris null et les nombres à virgule flottante).

La fonction IS\$1INTEGER est un sur-ensemble de la fonction IS\$1SMALLINT.

## Syntaxe
<a name="r_is_integer-synopsis"></a>

```
IS_INTEGER(super_expression)
```

## Arguments
<a name="r_is_integer-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_integer-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_integer_example"></a>

Pour vérifier si `5` est de type `INTEGER` à l’aide de la fonction IS\$1INTEGER, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_INTEGER(s) FROM t;

+---+------------+
| s | is_integer |
+---+------------+
| 5 | true       |
+---+------------+
```

# Fonction IS\$1OBJECT
<a name="r_is_object"></a>

Vérifie si une variable est un objet. La fonction IS\$1OBJECT renvoie `true` pour les objets, y compris les objets vides. La fonction renvoie `false` pour toutes les autres valeurs, y compris null.

## Syntaxe
<a name="r_is_object-synopsis"></a>

```
IS_OBJECT(super_expression)
```

## Arguments
<a name="r_is_object-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_object-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_object_example"></a>

Pour vérifier si `{"name": "Joe"}` est un objet à l’aide de la fonction IS\$1OBJECT, utilisez l’exemple suivant.

```
CREATE TABLE t(s super);

INSERT INTO t VALUES (JSON_PARSE('{"name": "Joe"}'));

SELECT s, IS_OBJECT(s) FROM t;

+----------------+-----------+
|       s        | is_object |
+----------------+-----------+
| {"name":"Joe"} | true      |
+----------------+-----------+
```

# Fonction IS\$1SCALAR
<a name="r_is_scalar"></a>

Vérifie si une variable est un scalaire. La fonction IS\$1SCALAR renvoie `true` pour toute valeur qui n’est pas un tableau ou un objet. La fonction renvoie `false` pour toutes les autres valeurs, y compris null.

L’ensemble IS\$1ARRAY, IS\$1OBJECT et IS\$1SCALAR couvre toutes les valeurs à l’exception des valeurs null.

## Syntaxe
<a name="r_is_scalar-synopsis"></a>

```
IS_SCALAR(super_expression)
```

## Arguments
<a name="r_is_scalar-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_scalar-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_scalar_example"></a>

Pour vérifier si `{"name": "Joe"}` est un scalaire à l’aide de la fonction IS\$1SCALAR, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (JSON_PARSE('{"name": "Joe"}'));

SELECT s, IS_SCALAR(s.name) FROM t;

+----------------+-----------+
|       s        | is_scalar |
+----------------+-----------+
| {"name":"Joe"} | true      |
+----------------+-----------+
```

# Fonction IS\$1SMALLINT
<a name="r_is_smallint"></a>

Vérifie si une variable est de type `SMALLINT`. La fonction IS\$1SMALLINT renvoie `true` pour les nombres d’échelle 0 dans la plage de 16 bits. La fonction renvoie `false` pour toutes les autres valeurs, y compris null et les nombres à virgule flottante.

## Syntaxe
<a name="r_is_smallint-synopsis"></a>

```
IS_SMALLINT(super_expression)
```

## Arguments
<a name="r_is_smallint-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Return
<a name="r_is_smallint-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_smallint_example"></a>

Pour vérifier si `5` est de type `SMALLINT` à l’aide de la fonction IS\$1SMALLINT, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_SMALLINT(s) FROM t;

+---+-------------+
| s | is_smallint |
+---+-------------+
| 5 | true        |
+---+-------------+
```

# Fonction IS\$1VARCHAR
<a name="r_is_varchar"></a>

Vérifie si une variable est de type `VARCHAR`. La fonction IS\$1VARCHAR renvoie `true` pour toutes les chaînes. La fonction renvoie `false` pour toutes les autres valeurs.

La fonction IS\$1VARCHAR est un sur-ensemble de la fonction IS\$1CHAR.

## Syntaxe
<a name="r_is_varchar-synopsis"></a>

```
IS_VARCHAR(super_expression)
```

## Arguments
<a name="r_is_varchar-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_is_varchar-returns"></a>

`BOOLEAN`

## Exemples
<a name="r_is_varchar_example"></a>

Pour vérifier si `abc` est de type `VARCHAR` à l’aide de la fonction IS\$1VARCHAR, utilisez l’exemple suivant.

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES ('abc');

SELECT s, IS_VARCHAR(s) FROM t;

+-------+------------+
|   s   | is_varchar |
+-------+------------+
| "abc" | true       |
+-------+------------+
```

# Fonction JSON\$1SIZE
<a name="r_json_size"></a>

La fonction JSON\$1SIZE renvoie le nombre d’octets présents dans l’expression `SUPER` donnée lorsqu’elle est sérialisée en chaîne. 

## Syntaxe
<a name="r_json_size-synopsis"></a>

```
JSON_SIZE(super_expression)
```

## Arguments
<a name="r_json_size-arguments"></a>

*super\$1expression*  
Constante ou expression `SUPER`.

## Type de retour
<a name="r_json_size-returns"></a>

`INTEGER`  
La fonction JSON\$1SIZE renvoie un `INTEGER` indiquant le nombre d’octets présents dans la chaîne en entrée. Cette valeur est différente du nombre de caractères. Par exemple, le caractère UTF-8 ⬤, un point noir, a une taille de 3 octets bien qu’il s’agisse d’un seul caractère.

## Notes d’utilisation
<a name="r_json_size-usage_notes"></a>

JSON\$1SIZE(x) est fonctionnellement identique à OCTET\$1LENGTH(JSON\$1SERIALIZE). Notez toutefois que JSON\$1SERIALIZE renvoie une erreur quand l’expression `SUPER` fournie dépasse la limite `VARCHAR` du système lorsqu’elle est sérialisée. JSON\$1SIZE ne présente pas cette limitation.

## Exemples
<a name="r_json_size_example"></a>

Pour renvoyer la longueur d’une valeur `SUPER` sérialisée en chaîne, utilisez l’exemple suivant.

```
SELECT JSON_SIZE(JSON_PARSE('[10001,10002,"⬤"]'));

+-----------+
| json_size |
+-----------+
|        19 |
+-----------+
```

Notez que l’expression `SUPER` fournie comporte 17 caractères, mais que ⬤ est un caractère de 3 octets, si bien que JSON\$1SIZE renvoie `19`.

# Fonction JSON\$1TYPEOF
<a name="r_json_typeof"></a>

La fonction scalaire JSON\$1TYPEOF renvoie un `VARCHAR` avec les valeurs boolean, number, string, object, array ou null, selon le type dynamique de la valeur `SUPER`. 

## Syntaxe
<a name="r_json_typeof-synopsis"></a>

```
JSON_TYPEOF(super_expression)
```

## Arguments
<a name="r_json_typeof-arguments"></a>

*super\$1expression*  
Expression ou colonne `SUPER`.

## Type de retour
<a name="r_json_typeof-returns"></a>

`VARCHAR`

## Exemples
<a name="r_json_typeof_example"></a>

Pour vérifier le type de JSON pour le tableau `[1,2]` à l’aide de la fonction JSON\$1TYPEOF, utilisez l’exemple suivant.

```
SELECT JSON_TYPEOF(ARRAY(1,2));

+-------------+
| json_typeof |
+-------------+
| array       |
+-------------+
```

Pour vérifier le type de JSON pour l’objet `{"name":"Joe"}` à l’aide de la fonction JSON\$1TYPEOF, utilisez l’exemple suivant.

```
SELECT JSON_TYPEOF(JSON_PARSE('{"name":"Joe"}'));

+-------------+
| json_typeof |
+-------------+
| object      |
+-------------+
```

# SIZE
<a name="r_SIZE"></a>

 Renvoie la taille binaire en mémoire d’une constante ou d’une expression de type `SUPER` sous la forme d’un `INTEGER`. 

## Syntaxe
<a name="r_SIZE-synopsis"></a>

```
SIZE(super_expression)
```

## Arguments
<a name="r_SIZE-parameters"></a>

*super\$1expression*  
 Constante ou expression de type `SUPER`. 

## Type de retour
<a name="r_SIZE-returns"></a>

`INTEGER`

## Exemples
<a name="r_SIZE-examples"></a>

 Pour utiliser SIZE pour obtenir la taille en mémoire de plusieurs expressions de type `SUPER`, utilisez l’exemple suivant. 

```
CREATE TABLE test_super_size(a SUPER);
            
INSERT INTO test_super_size 
VALUES
  (null),
  (TRUE),
  (JSON_PARSE('[0,1,2,3]')),
  (JSON_PARSE('{"a":0,"b":1,"c":2,"d":3}'))
;

SELECT a, SIZE(a) 
FROM test_super_size 
ORDER BY 2, 1;

+---------------------------+------+
|             a             | size |
+---------------------------+------+
| true                      |    4 |
| NULL                      |    4 |
| [0,1,2,3]                 |   23 |
| {"a":0,"b":1,"c":2,"d":3} |   52 |
+---------------------------+------+
```

# Fonctions et opérateurs VARBYTE
<a name="varbyte-functions"></a>

Les fonctions et opérateurs Amazon Redshift prenant en charge le type de données VARBYTE incluent :
+ [Opérateurs VARBYTE](r_VARBYTE_OPERATORS.md)
+ [FROM\$1HEX](r_FROM_HEX.md)
+ [FROM\$1VARBYTE](r_FROM_VARBYTE.md)
+ [GETBIT](r_GETBIT.md)
+ [TO\$1HEX](r_TO_HEX.md)
+ [TO\$1VARBYTE](r_TO_VARBYTE.md)
+ [CONCAT](r_CONCAT.md)
+ [LEN](r_LEN.md)
+ [Fonction LENGTH](r_LENGTH.md)
+ [OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [Fonction SUBSTRING](r_SUBSTRING.md)

# Opérateurs VARBYTE
<a name="r_VARBYTE_OPERATORS"></a>

 Le tableau suivant répertorie les opérateurs VARBYTE. L'opérateur fonctionne avec une valeur binaire de type de données VARBYTE. Si une entrée ou les deux ont une valeur null, le résultat a une valeur null.

## Opérateurs pris en charge
<a name="r_VARBYTE_OPERATORS-supported-operators"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_VARBYTE_OPERATORS.html)

## Exemples
<a name="r_VARBYTE_OPERATORS-examples"></a>

Dans les exemples suivants, la valeur de `'a'::VARBYTE` est `61` et la valeur de `'b'::VARBYTE` est `62`. L'élément `::` convertit les chaînes en type de données `VARBYTE`. Pour plus d'informations sur la conversion des types de données, consultez [CAST](r_CAST_function.md).

Pour déterminer si `'a'` est inférieur à `'b'` à l'aide de l'opérateur `<`, utilisez l'exemple suivant.

```
SELECT 'a'::VARBYTE < 'b'::VARBYTE AS less_than;
               
+-----------+
| less_than |
+-----------+
| true      |
+-----------+
```

Pour déterminer si `'a'` est égal à `'b'` à l'aide de l'opérateur `=`, utilisez l'exemple suivant.

```
SELECT 'a'::VARBYTE = 'b'::VARBYTE AS equal;
               
+-------+
| equal |
+-------+
| false |
+-------+
```

Pour concaténer deux valeurs binaires à l'aide de l'opérateur `||`, utilisez l'exemple suivant.

```
SELECT 'a'::VARBYTE || 'b'::VARBYTE AS concat;
               
+--------+
| concat |
+--------+
|   6162 |
+--------+
```

Pour concaténer deux valeurs binaires à l'aide de l'opérateur `+`, utilisez l'exemple suivant.

```
SELECT 'a'::VARBYTE + 'b'::VARBYTE AS concat;
               
+--------+
| concat |
+--------+
|   6162 |
+--------+
```

Pour annuler chaque bit de la valeur binaire d'entrée à l'aide de la fonction FROM\$1VARBYTE, utilisez l'exemple suivant. La chaîne `'a'` a pour valeur `01100001`. Pour de plus amples informations, consultez [FROM\$1VARBYTE](r_FROM_VARBYTE.md).

```
SELECT FROM_VARBYTE(~'a'::VARBYTE, 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     10011110 |
+--------------+
```

Pour appliquer l'opérateur `&` sur les deux valeurs binaires d'entrée, utilisez l'exemple suivant. La chaîne `'a'` a pour valeur `01100001` et `'b'` a pour valeur `01100010`.

```
SELECT FROM_VARBYTE('a'::VARBYTE & 'b'::VARBYTE, 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     01100000 |
+--------------+
```

# Fonction FROM\$1HEX
<a name="r_FROM_HEX"></a>

FROM\$1HEX convertit une valeur hexadécimale en valeur binaire. 

## Syntaxe
<a name="r_FROM_HEX-synopsis"></a>

```
FROM_HEX(hex_string)
```

## Arguments
<a name="r_FROM_HEX-arguments"></a>

 *hex\$1string*   
Chaîne hexadécimale de type de données `VARCHAR` ou `TEXT` à convertir. Le format doit être une valeur littérale. 

## Type de retour
<a name="r_FROM_HEX-return-type"></a>

`VARBYTE`

## Exemples
<a name="r_FROM_HEX-examples"></a>

Pour convertir la représentation hexadécimale de `'6162'` en une valeur binaire, utilisez l'exemple suivant. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la valeur binaire.

```
SELECT FROM_HEX('6162');
               
+----------+
| from_hex |
+----------+
|     6162 |
+----------+
```

# Fonction FROM\$1VARBYTE
<a name="r_FROM_VARBYTE"></a>

FROM\$1VARBYTE convertit une valeur binaire en chaîne de caractères au format spécifié. 

## Syntaxe
<a name="r_FROM_VARBYTE-synopsis"></a>

```
FROM_VARBYTE(binary_value, format)
```

## Arguments
<a name="r_FROM_VARBYTE-arguments"></a>

 *binary\$1value*   
Valeur binaire du type de données `VARBYTE`. 

 *format*   
Format de la chaîne de caractères renvoyée. Les valeurs valides insensibles à la casse sont `hex`, `binary`, `utf8` (également `utf-8` et `utf_8`) et `base64`. 

## Type de retour
<a name="r_FROM_VARBYTE-return-type"></a>

`VARCHAR`

## Exemples
<a name="r_FROM_VARBYTE-examples"></a>

Pour convertir la valeur binaire `'ab'` en une valeur hexadécimale, utilisez l'exemple suivant. 

```
SELECT FROM_VARBYTE('ab', 'hex');
               
+--------------+
| from_varbyte |
+--------------+
|         6162 |
+--------------+
```

Pour renvoyer la représentation binaire de `'4d'`, utilisez l'exemple suivant. La représentation binaire de `'4d'` est la chaîne de caractères `01001101`.

```
SELECT FROM_VARBYTE(FROM_HEX('4d'), 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     01001101 |
+--------------+
```

# Fonction GETBIT
<a name="r_GETBIT"></a>

GETBIT renvoie la valeur de bit d'une valeur binaire à l'index spécifié. 

## Syntaxe
<a name="r_GETBIT-synopsis"></a>

```
GETBIT(binary_value, index)
```

## Arguments
<a name="r_GETBIT-arguments"></a>

 *binary\$1value*   
Valeur binaire du type de données `VARBYTE`. 

 *index*   
Numéro d'index du bit dans la valeur binaire renvoyée. La valeur binaire est un tableau de bits basé sur 0 qui est indexé du bit le plus à droite (bit le moins significatif) au bit le plus à gauche (bit le plus significatif).

## Type de retour
<a name="r_GETBIT-return-type"></a>

`INTEGER`

## Exemples
<a name="r_GETBIT-examples"></a>

Pour renvoyer le bit à l'index `2` de la valeur binaire `from_hex('4d')`, utilisez l'exemple suivant. La représentation binaire de `'4d'` est `01001101`.

```
SELECT GETBIT(FROM_HEX('4d'), 2);
               
+--------+
| getbit |
+--------+
|      1 |
+--------+
```

Pour renvoyer les bits aux huit emplacements d'index de la valeur binaire renvoyée par `from_hex('4d')`, utilisez l'exemple suivant. La représentation binaire de `'4d'` est `01001101`.

```
SELECT GETBIT(FROM_HEX('4d'), 7), GETBIT(FROM_HEX('4d'), 6),
  GETBIT(FROM_HEX('4d'), 5), GETBIT(FROM_HEX('4d'), 4),
  GETBIT(FROM_HEX('4d'), 3), GETBIT(FROM_HEX('4d'), 2),
  GETBIT(FROM_HEX('4d'), 1), GETBIT(FROM_HEX('4d'), 0);
               
+--------+--------+--------+--------+--------+--------+--------+--------+
| getbit | getbit | getbit | getbit | getbit | getbit | getbit | getbit |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      0 |      1 |      0 |      0 |      1 |      1 |      0 |      1 |
+--------+--------+--------+--------+--------+--------+--------+--------+
```

# Fonction TO\$1HEX
<a name="r_TO_HEX"></a>

TO\$1HEX convertit un nombre ou une valeur binaire en une représentation hexadécimale. 

## Syntaxe
<a name="r_TO_HEX-synopsis"></a>

```
TO_HEX(value)
```

## Arguments
<a name="r_TO_HEX-arguments"></a>

 *value*   
Nombre ou valeur binaire (`VARBYTE`) à convertir. 

## Type de retour
<a name="r_TO_HEX-return-type"></a>

`VARCHAR`

## Exemples
<a name="r_TO_HEX-examples"></a>

Pour convertir un nombre en sa représentation hexadécimale, utilisez l'exemple suivant. 

```
SELECT TO_HEX(2147676847);
               
+----------+
|  to_hex  |
+----------+
| 8002f2af |
+----------+
```

Pour convertir la représentation `VARBYTE` de `'abc'` en un nombre hexadécimal, utilisez l'exemple suivant. 

```
SELECT TO_HEX('abc'::VARBYTE);
               
+--------+
| to_hex |
+--------+
| 616263 |
+--------+
```

Pour créer une table, insérer la représentation `VARBYTE` de `'abc'` dans un nombre hexadécimal et sélectionner la colonne avec cette valeur, utilisez l'exemple suivant.

```
CREATE TABLE t (vc VARCHAR);
INSERT INTO t SELECT TO_HEX('abc'::VARBYTE);
SELECT vc FROM t;
 
+--------+
|   vc   |
+--------+
| 616263 |
+--------+
```

Pour montrer que, lors de la conversion d'une valeur `VARBYTE` en `VARCHAR`, le format est UTF-8, utilisez l'exemple suivant.

```
CREATE TABLE t (vc VARCHAR);
INSERT INTO t SELECT 'abc'::VARBYTE::VARCHAR;

SELECT vc FROM t;

+-----+
| vc  |
+-----+
| abc |
+-----+
```

# Fonction TO\$1VARBYTE
<a name="r_TO_VARBYTE"></a>

TO\$1VARBYTE convertit une chaîne dans un format spécifié en valeur binaire. 

## Syntaxe
<a name="r_TO_VARBYTE-synopsis"></a>

```
TO_VARBYTE(string, format)
```

## Arguments
<a name="r_TO_VARBYTE-arguments"></a>

 *chaîne*   
Chaîne `CHAR` ou `VARCHAR`. 

 *format*   
Format du fichier d'entrée. Les valeurs valides insensibles à la casse sont `hex`, `binary`, `utf8` (également `utf-8` et `utf_8`) et `base64`. 

## Type de retour
<a name="r_TO_VARBYTE-return-type"></a>

`VARBYTE`

## Exemples
<a name="r_TO_VARBYTE-examples"></a>

Pour convertir la valeur hexadécimale `6162` en une valeur binaire, utilisez l'exemple suivant. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la valeur binaire.

```
SELECT TO_VARBYTE('6162', 'hex');
               
+------------+
| to_varbyte |
+------------+
|       6162 |
+------------+
```

Pour renvoyer la représentation binaire de `4d`, utilisez l'exemple suivant. La représentation binaire de « 4d » est `01001101`.

```
SELECT TO_VARBYTE('01001101', 'binary');
               
+------------+
| to_varbyte |
+------------+
|         4d |
+------------+
```

Pour convertir la chaîne `'a'` dans UTF-8 en une valeur binaire, utilisez l'exemple suivant. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la valeur binaire.

```
SELECT TO_VARBYTE('a', 'utf8');
               
+------------+
| to_varbyte |
+------------+
|         61 |
+------------+
```

Pour convertir la chaîne `'4'` hexadécimale en une valeur binaire, utilisez l'exemple suivant. Si la longueur de la chaîne hexadécimale est un nombre impair, alors un `0` est ajouté pour former un nombre hexadécimal valide.

```
SELECT TO_VARBYTE('4', 'hex');
               
+------------+
| to_varbyte |
+------------+
|         04 |
+------------+
```

# Fonctions de fenêtrage
<a name="c_Window_functions"></a>

En utilisant les fonctions de fenêtrage, vous pouvez créer des requêtes d’analyse commerciale plus efficacement. Les fonctions de fenêtrage fonctionnent sur une partition ou « fenêtre » d’un ensemble de résultats et renvoient une valeur pour chaque ligne de cette fenêtre. En revanche, les fonctions non fenêtrées effectuent leurs calculs sur chaque ligne du jeu de résultats. Contrairement aux fonctions de groupe qui regroupent les lignes de résultats, les fonctions de fenêtrage conservent toutes les lignes de l’expression de table. 

 Les valeurs renvoyées sont calculées en utilisant les valeurs des ensembles de lignes de cette fenêtre. Pour chaque ligne de la table, la fenêtre définit un ensemble de lignes qui est utilisé pour calculer des attributs supplémentaires. Une fenêtre est définie à l’aide d’une spécification de fenêtrage (clause OVER) et s’appuie sur trois concepts principaux : 
+  Le *partitionnement de fenêtrage* qui constitue des groupes de lignes (clause PARTITION) 
+  L’*ordonnancement de fenêtrage*, qui définit un ordre ou une séquence de lignes dans chaque partition (clause ORDER BY) 
+  Les *cadres de fenêtrage*, qui sont définis par rapport à chaque ligne afin de limiter davantage l’ensemble de lignes (spécification ROWS) 

Les fonctions de fenêtrage constituent le dernier ensemble d’opérations effectuées dans une requête à l’exception de la clause ORDER BY finale. Toutes les jointures et toutes les clauses WHERE, GROUP BY et HAVING doivent être terminées avant que les fonctions de fenêtrage soient traitées. Par conséquent, les fonctions de fenêtrage peuvent s’afficher uniquement dans la liste de sélection ou la clause ORDER BY. Vous pouvez utiliser plusieurs fonctions de fenêtrage dans une seule requête avec différentes clauses de cadre. Vous pouvez également utiliser des fonctions de fenêtrage dans d’autres expressions scalaires, telles que CASE. 

Les fonctions de la fenêtre ne peuvent pas être imbriquées. Par exemple, une fonction d’agrégation [SUM](r_SUM.md) peut apparaître dans une fonction de fenêtre [SUM](r_WF_SUM.md), mais une fonction de fenêtre SUM ne peut pas apparaître dans une autre fonction de fenêtre SUM. Ce qui suit n’est pas pris en charge car une fonction de fenêtre est imbriquée dans une autre fonction de fenêtre.

```
SELECT SUM(SUM(selectcol) OVER (PARTITION BY ordercol)) OVER (Partition by ordercol) FROM t;
```

## Récapitulatif de la syntaxe de la fonction de fenêtrage
<a name="r_Window_function_synopsis"></a>

Les fonctions de fenêtre suivent la syntaxe standard suivante.

```
function (expression) OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list [ frame_clause ] ] )
```

 Ici, *function* est l’une des fonctions décrites dans cette section.

L’*expr\$1list* se présente comme suit.

```
expression | column_name [, expr_list ]
```

 L’*order\$1list* se présente comme suit. 

```
expression | column_name [ ASC | DESC ] 
[ NULLS FIRST | NULLS LAST ]
[, order_list ]
```

 La *frame\$1clause* se présente comme suit. 

```
ROWS
{ UNBOUNDED PRECEDING | unsigned_value PRECEDING | CURRENT ROW } |

{ BETWEEN
{ UNBOUNDED PRECEDING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW}
AND
{ UNBOUNDED FOLLOWING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW }}
```

### Arguments
<a name="r_Window_function_synopsis-arguments"></a>

 *fonction*   
La fonction de fenêtrage. Pour plus d’informations, consultez les descriptions de chaque fonction. 

OVER   
La clause qui définit la spécification du fenêtrage. La clause OVER est obligatoire pour les fonctions de fenêtrage et différencie les fonctions de fenêtrage d’autres fonctions SQL. 

PARTITION BY *expr\$1list*   
(Facultatif) La clause PARTITION BY subdivise le jeu de résultats en partitions, comme la clause GROUP BY. Si une clause de partition est présente, la fonction est calculée pour les lignes de chaque partition. Si aucune clause de partition n’est spécifiée, une seule partition contient la totalité de la table et la fonction est calculée pour cette table complète.   
Les fonctions de rang DENSE\$1RANK, NTILE, RANK et ROW\$1NUMBER, nécessitent une comparaison globale de toutes les lignes du jeu de résultats. Lorsqu’une clause PARTITION BY est utilisée, l’optimiseur de requête peut exécuter chaque agrégation en parallèle en répartissant la charge de travail sur plusieurs tranches selon les partitions. Si la clause PARTITION BY n’est pas présente, l’étape d’agrégation doit être exécutée en série sur une seule tranche, ce qui peut avoir une incidence négative importante sur les performances, surtout pour des clusters de grande taille.  
Amazon Redshift ne prend pas en charge les littéraux de chaîne dans les clauses PARTITION BY.

ORDER BY *order\$1list*   
(Facultatif) La fonction de fenêtrage est appliquée aux lignes de chaque partition triées selon la spécification d’ordre de ORDER BY. Cette clause ORDER BY est distincte et sans aucun lien avec une clause ORDER BY dans la *frame\$1clause*. La clause ORDER BY peut être utilisée sans la clause PARTITION BY.   
Pour les fonctions de rang, la clause ORDER BY identifie les mesures des valeurs de rang. Pour les fonctions d’agrégation, les lignes partitionnées doivent être ordonnées avant que la fonction d’agrégation soit calculée pour chaque cadre. Pour en savoir plus sur les types de fonction de fenêtrage, consultez [Fonctions de fenêtrage](#c_Window_functions).  
Les identificateurs de colonnes ou les expressions qui correspondent aux identificateurs de colonnes sont requis dans la liste d’ordre. Ni les constantes, ni les expressions constantes ne peuvent être utilisées pour remplacer les noms de colonnes.   
Les valeurs NULLS sont traitées comme leur propre groupe, triées et classées selon l’option NULLS FIRST ou NULLS LAST. Par défaut, les valeurs NULL sont triées et classées en dernier par ordre croissant (ASC) et triées et classées en premier par ordre décroissant (DESC).  
Amazon Redshift ne prend pas en charge les littéraux de chaîne dans les clauses ORDER BY.  
 Si la clause ORDER BY est omise, l’ordre des lignes est non déterministe.   
Dans un système parallèle tel qu’Amazon Redshift, quand une clause ORDER BY ne génère pas d’ordonnancement unique et total des données, l’ordre des lignes est non déterministe. Autrement dit, si l’expression ORDER BY produit des valeurs en double (ordonnancement partiel), l’ordre de renvoi de ces lignes peut varier d’une exécution d’Amazon Redshift à l’autre. De leur côté, les fonctions de fenêtrage peuvent renvoyer des résultats inattendus ou incohérents. Pour plus d'informations, consultez [Ordonnancement unique des données pour les fonctions de fenêtrage](#r_Examples_order_by_WF). 

 *column\$1name*   
Nom d’une colonne à partitionner ou à ordonner. 

ASC \$1 DESC   
Option qui définit l’ordre de tri de l’expression, comme suit :   
+ ASC : croissant (par exemple, de faible à élevé pour les valeurs numériques et de « A » à « Z » pour les chaînes de caractères). Si aucune option n’est spécifiée, les données sont triées dans l’ordre croissant par défaut.
+ DESC : descendantes (valeurs d’élevées à faibles pour les valeurs numériques ; de « Z » à « A » pour les chaînes). 

NULLS FIRST \$1 NULLS LAST  
Option qui spécifie si les valeurs NULLS devraient être classés en premier, avant les valeurs non NULL, ou en dernier, après les valeurs non NULL. Par défaut, les valeurs NULLS sont triées et classées en dernier par ordre croissant (ASC) et triées et classées en premier par ordre décroissant (DESC).

 *frame\$1clause*   
Pour les fonctions d’agrégation, la clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction lorsque vous utilisez ORDER BY. Elle vous permet d’inclure ou d’exclure des ensembles de lignes dans le résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés.  
La clause frame ne s’applique pas aux fonctions de classement. En outre, la clause de cadre n’est pas requise lorsqu’aucune clause ORDER BY n’est utilisée dans la clause OVER pour une fonction d’agrégation. Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise.  
Si aucune clause ORDER BY n’est spécifiée, le cadre implicite est sans limite : équivalent à ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. 

ROWS  
Cette clause définit le cadre de fenêtrage en spécifiant un décalage physique de la ligne actuelle.  
Cette clause spécifie les lignes de la fenêtre ou de la partition actuelle auxquelles la valeur de la ligne actuelle doit être associée. Elle utilise des arguments qui spécifient la position de la ligne, qui peut être avant ou après la ligne actuelle. Le point de référence de tous les cadres de fenêtrage est la ligne actuelle. Chaque ligne devient la ligne actuelle à son tour à mesure que le cadre de fenêtrage avance dans la partition.  
Le cadre peut être un simple ensemble de lignes allant jusqu’à et incluant la ligne actuelle.  

```
{UNBOUNDED PRECEDING | offset PRECEDING | CURRENT ROW}
```
Ou il peut s’agir d’un ensemble de lignes situées entre les deux limites.  

```
BETWEEN
{ UNBOUNDED PRECEDING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
AND
{ UNBOUNDED FOLLOWING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
```
UNBOUNDED PRECEDING indique que la fenêtre commence à la première ligne de la partition ; *offset* PRECEDING indique que la fenêtre commence un certain nombre de lignes équivalant à la valeur de décalage avant la ligne actuelle. UNBOUNDED PRECEDING est la valeur par défaut.  
CURRENT ROW indique que la fenêtre commence ou se termine à la ligne actuelle.   
UNBOUNDED FOLLOWING indique que la fenêtre se termine à la dernière ligne de la partition ; *offset* FOLLOWING indique que la fenêtre se termine un certain nombre de lignes équivalant à la valeur de décalage après la ligne actuelle.  
*offset* identifie un nombre physique de lignes avant ou après la ligne actuelle. Dans ce cas, *offset* doit être une constante ayant une valeur numérique positive. Par exemple, 5 FOLLOWING arrête les 5 lignes du cadre après la ligne actuelle.  
Là où BETWEEN n’est pas spécifié, le cadre est implicitement délimité par la ligne actuelle. Par exemple, `ROWS 5 PRECEDING` est égal à `ROWS BETWEEN 5 PRECEDING AND CURRENT ROW`. En outre, `ROWS UNBOUNDED FOLLOWING` est égal à `ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING`.  
Vous ne pouvez pas spécifier un cadre dans lequel la limite de début est supérieure à la limite de fin. Par exemple, vous ne pouvez pas spécifier l’un des cadres suivants.   

```
between 5 following and 5 preceding
between current row and 2 preceding
between 3 following and current row
```

## Ordonnancement unique des données pour les fonctions de fenêtrage
<a name="r_Examples_order_by_WF"></a>

Si une clause ORDER BY pour une fonction de fenêtrage ne génère pas d’ordonnancement unique et total des données, l’ordre des lignes est non déterministe. Si l’expression ORDER BY génère des valeurs en double (ordonnancement partiel), l’ordre de ces lignes qui est renvoyé peut varier lors de plusieurs exécutions. Dans ce cas, les fonctions de fenêtrage peuvent également renvoyer des résultats inattendus ou incohérents. 

Par exemple, la requête suivante renvoie des résultats différents sur plusieurs exécutions. Ces différents résultats se produisent parce que `order by dateid` ne produit pas d’ordonnancement unique des données pour la fonction de fenêtrage SUM. 

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |   1730.00 |     1730.00
1827 |    708.00 |     2438.00
1827 |    234.00 |     2672.00
...

select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |    234.00 |      234.00
1827 |    472.00 |      706.00
1827 |    347.00 |     1053.00
...
```

 Dans ce cas, l’ajout d’une seconde colonne ORDER BY à la fonction de fenêtrage peut permettre de résoudre le problème. 

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid, pricepaid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid | sumpaid
--------+-----------+---------
1827 |    234.00 |  234.00
1827 |    337.00 |  571.00
1827 |    347.00 |  918.00
...
```

## Fonctions prises en charge
<a name="r_Window_function_supported"></a>

Amazon Redshift prend en charge deux types de fonctions de fenêtrage : par regroupement et par rang.

Vous trouverez ci-dessous les fonctions d’agrégation prises en charge : 
+ [Fonction de fenêtrage AVG](r_WF_AVG.md)
+ [Fonction de fenêtrage COUNT](r_WF_COUNT.md)
+ [Fonction de fenêtrage CUME\$1DIST](r_WF_CUME_DIST.md)
+ [Fonction de fenêtrage DENSE\$1RANK](r_WF_DENSE_RANK.md)
+ [Fonction de fenêtrage FIRST\$1VALUE](r_WF_first_value.md)
+ [Fonction de fenêtrage LAG](r_WF_LAG.md) 
+ [Fonction de fenêtrage LAST\$1VALUE](r_WF_last_value.md)
+ [Fonction de fenêtrage LEAD](r_WF_LEAD.md) 
+ [Fonction de fenêtrage LISTAGG](r_WF_LISTAGG.md) 
+ [Fonction de fenêtrage MAX](r_WF_MAX.md) 
+ [Fonction de fenêtrage MEDIAN](r_WF_MEDIAN.md) 
+ [Fonction de fenêtrage MIN](r_WF_MIN.md) 
+ [Fonction de fenêtrage NTH\$1VALUE](r_WF_NTH.md) 
+ [Fonction de fenêtrage PERCENTILE\$1CONT](r_WF_PERCENTILE_CONT.md)
+ [Fonction de fenêtrage PERCENTILE\$1DISC](r_WF_PERCENTILE_DISC.md)
+ [Fonction de fenêtrage RATIO\$1TO\$1REPORT](r_WF_RATIO_TO_REPORT.md)
+ [Fonctions de fenêtrage STDDEV\$1SAMP et STDDEV\$1POP](r_WF_STDDEV.md) (STDDEV\$1SAMP et STDDEV sont synonymes) 
+ [Fonction de fenêtrage SUM](r_WF_SUM.md) 
+ [Fonctions de fenêtrage VAR\$1SAMP et VAR\$1POP](r_WF_VARIANCE.md) (VAR\$1SAMP et VARIANCE sont synonymes)

Vous trouverez ci-dessous les fonctions de classement prises en charge : 
+ [Fonction de fenêtrage DENSE\$1RANK](r_WF_DENSE_RANK.md) 
+ [Fonction de fenêtrage NTILE](r_WF_NTILE.md) 
+ [Fonction de fenêtrage PERCENT\$1RANK](r_WF_PERCENT_RANK.md)
+ [Fonction de fenêtrage RANK](r_WF_RANK.md) 
+ [Fonction de fenêtrage ROW\$1NUMBER](r_WF_ROW_NUMBER.md)

## Exemple de tableau contenant des exemples de fonctions de fenêtrage
<a name="r_Window_function_example"></a>

Vous trouverez des exemples de fonctions de fenêtrage spécifiques avec la description de chaque fonction. Certains exemples utilisent une table nommée WINSALES, qui contient 11 lignes, tel qu’illustré ci-dessous.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/c_Window_functions.html)

Le script suivant crée et remplit l’exemple de table WINSALES.

```
CREATE TABLE winsales(
  salesid int,
  dateid date,
  sellerid int,
  buyerid char(10),
  qty int,
  qty_shipped int);

INSERT INTO winsales VALUES
  (30001, '8/2/2003', 3, 'b', 10, 10),
  (10001, '12/24/2003', 1, 'c', 10, 10),
  (10005, '12/24/2003', 1, 'a', 30, null),	
  (40001, '1/9/2004', 4, 'a', 40, null),	
  (10006, '1/18/2004', 1, 'c', 10, null),	
  (20001, '2/12/2004', 2, 'b', 20, 20),
  (40005, '2/12/2004', 4, 'a', 10, 10),
  (20002, '2/16/2004', 2, 'c', 20, 20),
  (30003, '4/18/2004', 3, 'b', 15, null),
  (30004, '4/18/2004', 3, 'b', 20, null),	
  (30007, '9/7/2004', 3, 'c', 30, null);
```

# Fonction de fenêtrage AVG
<a name="r_WF_AVG"></a>

 La fonction de fenêtrage AVG renvoie la moyenne (arithmétique) des valeurs d’expression d’entrée. La fonction AVG utilise des valeurs numériques et ignore les valeurs NULL.

## Syntaxe
<a name="r_WF_AVG-synopsis"></a>

```
AVG ( [ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Arguments
<a name="r_WF_AVG-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. 

ALL   
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression pour le compte. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.

OVER   
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction AVG en termes d’une ou de plusieurs expressions.

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis).

## Types de données
<a name="c_Supported_data_types_wf_avg"></a>

Les types d’argument pris en charge par la fonction AVG sont SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL et DOUBLE PRECISION.

Les types de retour pris en charge par la fonction AVG sont les suivants : 
+ Arguments BIGINT for SMALLINT ou INTEGER
+ Arguments NUMERIC for BIGINT
+ DOUBLE PRECISION pour les arguments à virgule flottante

## Exemples
<a name="r_WF_AVG-examples"></a>

L’exemple suivant montre le calcul d’une moyenne mobile des quantités vendues par date, et le classement des résultats par ID de date et ID de vente : 

```
select salesid, dateid, sellerid, qty,
avg(qty) over
(order by dateid, salesid rows unbounded preceding) as avg
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | avg
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  10
10005 | 2003-12-24 |        1 |  30 |  16
40001 | 2004-01-09 |        4 |  40 |  22
10006 | 2004-01-18 |        1 |  10 |  20
20001 | 2004-02-12 |        2 |  20 |  20
40005 | 2004-02-12 |        4 |  10 |  18
20002 | 2004-02-16 |        2 |  20 |  18
30003 | 2004-04-18 |        3 |  15 |  18
30004 | 2004-04-18 |        3 |  20 |  18
30007 | 2004-09-07 |        3 |  30 |  19
(11 rows)
```

 Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

# Fonction de fenêtrage COUNT
<a name="r_WF_COUNT"></a>

 La fonction de fenêtrage COUNT compte les lignes définies par l’expression.

La fonction COUNT se décline en deux variations. COUNT(\$1) compte toutes les lignes de la table cible, qu’elles comprennent des valeurs null ou non. COUNT(expression) calcule le nombre de lignes avec des valeurs non NULL dans une colonne ou une expression spécifique.

## Syntaxe
<a name="r_WF_COUNT-synopsis"></a>

```
COUNT ( * | [ ALL ] expression) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Arguments
<a name="r_WF_COUNT-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. 

ALL   
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression pour le compte. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.

OVER   
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction COUNT en termes d’une ou de plusieurs expressions.

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis).

## Types de données
<a name="c_Supported_data_types_wf_count"></a>

La fonction COUNT prend en charge tous les types de données d’argument.

Le type de retour pris en charge par la fonction COUNT est BIGINT.

## Exemples
<a name="r_WF_COUNT-examples"></a>

 L’exemple suivant montre l’affichage de l’ID de ventes, la quantité et le nombre de toutes les lignes dès le début de la fenêtre de données : 

```
select salesid, qty,
count(*) over (order by salesid rows unbounded preceding) as count
from winsales
order by salesid;

salesid | qty | count
---------+-----+-----
10001 |  10 |   1
10005 |  30 |   2
10006 |  10 |   3
20001 |  20 |   4
20002 |  20 |   5
30001 |  10 |   6
30003 |  15 |   7
30004 |  20 |   8
30007 |  30 |   9
40001 |  40 |   10
40005 |  10 |   11
(11 rows)
```

Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

L’exemple suivant montre l’affichage de l’ID de ventes, la quantité et le nombre de lignes non null dès le début de la fenêtre de données. (Dans la table WINSALES, la colonne QTY\$1SHIPPED en contient.) NULLs 

```
select salesid, qty, qty_shipped,
count(qty_shipped)
over (order by salesid rows unbounded preceding) as count
from winsales
order by salesid;

salesid | qty | qty_shipped | count
---------+-----+-------------+-------
10001 |  10 |          10 |   1
10005 |  30 |             |   1
10006 |  10 |             |   1
20001 |  20 |          20 |   2
20002 |  20 |          20 |   3
30001 |  10 |          10 |   4
30003 |  15 |             |   4
30004 |  20 |             |   4
30007 |  30 |             |   4
40001 |  40 |             |   4
40005 |  10 |          10 |   5
(11 rows)
```

# Fonction de fenêtrage CUME\$1DIST
<a name="r_WF_CUME_DIST"></a>

Calcule la distribution cumulée d’une valeur au sein d’une fenêtre ou une partition. En supposant que l’ordre est croissant, la distribution cumulée est déterminée à l’aide de la formule suivante :

`count of rows with values <= x / count of rows in the window or partition`

où *x* est égal à la valeur de la ligne actuelle de la colonne spécifiée dans la clause ORDER BY. Le jeu de données suivant illustre l’utilisation de cette formule :

```
Row#	Value	  Calculation    CUME_DIST
1        2500	   (1)/(5)	   0.2
2        2600	   (2)/(5)	   0.4
3        2800	   (3)/(5)	   0.6
4        2900	   (4)/(5)	   0.8
5        3100	   (5)/(5)	   1.0
```

La plage de valeur de retour est comprise entre >0 et 1, inclus.

## Syntaxe
<a name="r_WF_CUME_DIST-synopsis"></a>

```
CUME_DIST ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## Arguments
<a name="r_WF_CUME_DIST-arguments"></a>

OVER  
Clause qui spécifie le partitionnement de fenêtrage. La clause OVER ne peut pas contenir de spécification de cadre de fenêtrage.

PARTITION BY *partition\$1expression*   
Facultatif. Expression qui définit la plage d’enregistrements de chaque groupe dans la clause OVER.

ORDER BY *order\$1list*   
Expression permettant de calculer la distribution cumulée. L’expression doit disposer d’un type de données numériques ou être convertible implicitement en une. Si ORDER BY n’est pas spécifié, la valeur de retour est 1 pour toutes les lignes.   
Si ORDER BY ne génère pas d’ordonnancement unique, l’ordre des lignes est non déterministe. Pour plus d'informations, consultez [Ordonnancement unique des données pour les fonctions de fenêtrage](c_Window_functions.md#r_Examples_order_by_WF). 

## Type de retour
<a name="r_WF_CUME_DIST-returns"></a>

FLOAT8

## Exemples
<a name="r_WF_CUME_DIST-examples"></a>

L’exemple suivant calcule la distribution cumulée de la quantité par vendeur :

```
select sellerid, qty, cume_dist() 
over (partition by sellerid order by qty) 
from winsales;

sellerid   qty	   cume_dist
--------------------------------------------------
1         10.00	   0.33
1         10.64	   0.67
1         30.37	   1
3         10.04	   0.25
3         15.15	   0.5
3         20.75	   0.75
3         30.55	   1
2         20.09	   0.5
2         20.12	   1
4         10.12	   0.5
4         40.23	   1
```

Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

# Fonction de fenêtrage DENSE\$1RANK
<a name="r_WF_DENSE_RANK"></a>

La fonction de fenêtrage DENSE\$1RANK détermine le rang d’une valeur dans un groupe de valeurs, en fonction de l’expression ORDER BY dans la clause OVER. Si la clause PARTITION BY facultative est présente, les rangs sont réinitialisés pour chaque groupe de lignes. Les lignes avec des valeurs égales pour les critères de rang reçoivent le même rang. La fonction DENSE\$1RANK diffère de RANK sur un point : si deux lignes ou plus sont à égalité, il n’y a pas d’écart dans la séquence des valeurs classées. Par exemple, si deux lignes sont classées `1`, le prochain rang est `2`. 

Vous pouvez avoir des fonctions de rang avec différentes clauses PARTITION BY et ORDER BY dans la même requête. 

## Syntaxe
<a name="r_WF_DENSE_RANK-synopsis"></a>

```
DENSE_RANK() OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## Arguments
<a name="r_WF_DENSE_RANK-arguments"></a>

( )   
La fonction ne prend pas d’arguments, mais les parenthèses vides sont obligatoires. 

OVER   
Clauses de fenêtrage pour la fonction DENSE\$1RANK. 

PARTITION BY *expr\$1list*   
(Facultatif) Une ou plusieurs expressions qui définissent le fenêtrage. 

ORDER BY *order\$1list*   
(Facultatif) Expression sur laquelle sont basées les valeurs de rang. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table. Si ORDER BY n’est pas spécifié, la valeur renvoyée est `1` pour toutes les lignes.   
Si ORDER BY ne génère pas d’ordonnancement unique, l’ordre des lignes est non déterministe. Pour plus d'informations, consultez [Ordonnancement unique des données pour les fonctions de fenêtrage](c_Window_functions.md#r_Examples_order_by_WF). 

## Type de retour
<a name="c_Supported_data_types_wf_dense_rank"></a>

`BIGINT`

## Exemples
<a name="r_WF_DENSE_RANK-examples"></a>

Les exemples suivants utilisent l’exemple de table pour les fonctions de fenêtrage. Pour plus d’informations, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

L’exemple suivant ordonne la table en fonction de la quantité vendue et affecte un rang dense et un rang standard à chaque ligne. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués. 

```
SELECT salesid, qty,
DENSE_RANK() OVER(ORDER BY qty DESC) AS d_rnk,
RANK() OVER(ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY 2,1;

+---------+-----+-------+-----+
| salesid | qty | d_rnk | rnk |
+---------+-----+-------+-----+
|   10001 |  10 |     5 |   8 |
|   10006 |  10 |     5 |   8 |
|   30001 |  10 |     5 |   8 |
|   40005 |  10 |     5 |   8 |
|   30003 |  15 |     4 |   7 |
|   20001 |  20 |     3 |   4 |
|   20002 |  20 |     3 |   4 |
|   30004 |  20 |     3 |   4 |
|   10005 |  30 |     2 |   2 |
|   30007 |  30 |     2 |   2 |
|   40001 |  40 |     1 |   1 |
+---------+-----+-------+-----+
```

Notez la différence entre les rangs affectés au même ensemble de lignes lorsque les fonctions DENSE\$1RANK et RANK sont utilisées côte à côte dans la même requête.

L’exemple suivant partitionne la table en fonction de sellerid, ordonne chaque partition selon la quantité et affecte un rang dense à chaque ligne. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués. 

```
SELECT salesid, sellerid, qty,
DENSE_RANK() OVER(PARTITION BY sellerid ORDER BY qty DESC) AS d_rnk
FROM winsales
ORDER BY 2,3,1;

+---------+----------+-----+-------+
| salesid | sellerid | qty | d_rnk |
+---------+----------+-----+-------+
|   10001 |        1 |  10 |     2 |
|   10006 |        1 |  10 |     2 |
|   10005 |        1 |  30 |     1 |
|   20001 |        2 |  20 |     1 |
|   20002 |        2 |  20 |     1 |
|   30001 |        3 |  10 |     4 |
|   30003 |        3 |  15 |     3 |
|   30004 |        3 |  20 |     2 |
|   30007 |        3 |  30 |     1 |
|   40005 |        4 |  10 |     2 |
|   40001 |        4 |  40 |     1 |
+---------+----------+-----+-------+
```

Pour utiliser correctement le dernier exemple, utilisez la commande suivante pour insérer une ligne dans la table WINSALES. Cette ligne possède les mêmes buyerid, sellerid et qtysold qu’une autre ligne. Cela entraîne une égalité entre deux lignes dans le dernier exemple et montre ainsi la différence entre les fonctions DENSE\$1RANK et RANK.

```
INSERT INTO winsales VALUES(30009, '2/2/2003', 3, 'b', 20, NULL);
```

L’exemple suivant partitionne la table en fonction de buyerid et sellerid, ordonne chaque partition selon la quantité et affecte un rang dense et un rang standard à chaque ligne. Les résultats sont triés après l’application de la fonction de fenêtrage. 

```
SELECT salesid, sellerid, qty, buyerid,
DENSE_RANK() OVER(PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS d_rnk,
RANK() OVER (PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY rnk;

+---------+----------+-----+---------+-------+-----+
| salesid | sellerid | qty | buyerid | d_rnk | rnk |
+---------+----------+-----+---------+-------+-----+
|   20001 |        2 |  20 | b       |     1 |   1 |
|   30007 |        3 |  30 | c       |     1 |   1 |
|   10006 |        1 |  10 | c       |     1 |   1 |
|   10005 |        1 |  30 | a       |     1 |   1 |
|   20002 |        2 |  20 | c       |     1 |   1 |
|   30009 |        3 |  20 | b       |     1 |   1 |
|   40001 |        4 |  40 | a       |     1 |   1 |
|   30004 |        3 |  20 | b       |     1 |   1 |
|   10001 |        1 |  10 | c       |     1 |   1 |
|   40005 |        4 |  10 | a       |     2 |   2 |
|   30003 |        3 |  15 | b       |     2 |   3 |
|   30001 |        3 |  10 | b       |     3 |   4 |
+---------+----------+-----+---------+-------+-----+
```

# Fonction de fenêtrage FIRST\$1VALUE
<a name="r_WF_first_value"></a>

 Étant donné un ensemble de lignes ordonné, FIRST\$1VALUE renvoie la valeur de l’expression spécifiée concernant la première ligne du cadre de fenêtrage d’un ensemble de lignes ordonné.

Pour savoir comment sélectionner la dernière ligne du cadre, consultez [Fonction de fenêtrage LAST\$1VALUE](r_WF_last_value.md).

## Syntaxe
<a name="r_WF_first_value-synopsis"></a>

```
FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Arguments
<a name="r_WF_first_value-arguments"></a>

 *expression*   
 Colonne cible ou expression sur laquelle la fonction opère. 

IGNORE NULLS   
Lorsque cette option est utilisée avec FIRST\$1VALUE, la fonction renvoie la première valeur du cadre qui n’est pas NULL (ou NULL si toutes les valeurs sont NULL).

RESPECT NULLS   
 Indique qu’Amazon Redshift doit contenir des valeurs null pour déterminer la ligne à utiliser. La clause RESPECT NULLS est prise en charge par défaut, si vous ne spécifiez pas IGNORE NULLS. 

OVER   
Présente les clauses de fenêtrage de la fonction. 

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction en termes d’une ou de plusieurs expressions. 

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY trie toute la table. Si vous spécifiez une clause ORDER BY, vous devez également spécifier une *frame\$1clause*.   
Les résultats de la fonction FIRST\$1VALUE dépendent de l’ordre des données. Les résultats sont non déterministes dans les cas suivants :   
+ Quand aucune clause ORDER BY n’est spécifiée et qu’une partition contient deux valeurs différentes pour une expression 
+ Lorsque l’expression a des valeurs différentes qui correspondent à la même valeur dans la liste ORDER BY. 

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis). 

## Type de retour
<a name="c_Supported_data_types_wf_first_value"></a>

Ces fonctions prennent en charge les expressions qui utilisent les types de données primitifs d’Amazon Redshift. Le type de retour est identique au type de données de l’*expression*.

## Exemples
<a name="r_WF_first_value-examples"></a>

Les exemples suivants utilisent la table VENUE de l’exemple de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

L’exemple suivant renvoie le nombre de places de chaque site dans la table VENUE, avec les résultats classés par capacité (d’élevée à faible). La fonction FIRST\$1VALUE permet de sélectionner le nom du lieu qui correspond à la première ligne du cadre : dans le cas présent, la ligne comportant le plus grand nombre de places. Les résultats sont partitionnés par État, lorsque la valeur VENUESTATE change, une nouvelle première valeur est donc sélectionnée. Le cadre de fenêtrage est illimité. La même première valeur est donc sélectionnée pour chaque ligne de chaque partition. 

Pour la Californie, `Qualcomm Stadium` possède le plus grand nombre de places (`70561`), ce nom est donc la première valeur de toutes les lignes dans la partition `CA`. 

```
select venuestate, venueseats, venuename,
first_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |         first_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Qualcomm Stadium
CA         |      69843 | Monster Park                   | Qualcomm Stadium
CA         |      63026 | McAfee Coliseum                | Qualcomm Stadium
CA         |      56000 | Dodger Stadium                 | Qualcomm Stadium
CA         |      45050 | Angel Stadium of Anaheim       | Qualcomm Stadium
CA         |      42445 | PETCO Park                     | Qualcomm Stadium
CA         |      41503 | AT&T Park                      | Qualcomm Stadium
CA         |      22000 | Shoreline Amphitheatre         | Qualcomm Stadium
CO         |      76125 | INVESCO Field                  | INVESCO Field
CO         |      50445 | Coors Field                    | INVESCO Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Dolphin Stadium
FL         |      73800 | Jacksonville Municipal Stadium | Dolphin Stadium
FL         |      65647 | Raymond James Stadium          | Dolphin Stadium
FL         |      36048 | Tropicana Field                | Dolphin Stadium
...
```

L’exemple suivant montre l’utilisation de l’option IGNORE NULLS et s’appuie sur l’ajout d’une nouvelle ligne sur la table VENUE : 

```
insert into venue values(2000,null,'Stanford','CA',90000);
```

Celle-ci contient une valeur NULL pour la colonne VENUENAME. Répétez à présent la requête FIRST\$1VALUE indiquée précédemment dans cette section : 

```
select venuestate, venueseats, venuename,
first_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |         venuename          | first_value
-----------+------------+----------------------------+-------------
CA         |      90000 | NULL                       | NULL
CA         |      70561 | Qualcomm Stadium           | NULL
CA         |      69843 | Monster Park               | NULL
...
```

Du fait que la nouvelle ligne contient la valeur VENUESEATS la plus élevée (`90000`) et que son VENUENAME a la valeur NULL, la fonction FIRST\$1VALUE renvoie NULL pour la partition `CA`. Pour ignorer les lignes comme celle-ci dans l’évaluation de la fonction, ajoutez l’option IGNORE NULLS à l’argument de la fonction : 

```
select venuestate, venueseats, venuename,
first_value(venuename) ignore nulls
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venuestate='CA')
order by venuestate;

venuestate | venueseats |         venuename          |   first_value
------------+------------+----------------------------+------------------
CA         |      90000 | NULL                       | Qualcomm Stadium
CA         |      70561 | Qualcomm Stadium           | Qualcomm Stadium
CA         |      69843 | Monster Park               | Qualcomm Stadium
...
```

# Fonction de fenêtrage LAG
<a name="r_WF_LAG"></a>

 La fonction de fenêtrage LAG renvoie les valeurs pour une ligne avec un décalage donné au-dessus (avant) de la ligne actuelle dans la partition. 

## Syntaxe
<a name="r_WF_LAG-synopsis"></a>

```
LAG (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## Arguments
<a name="r_WF_LAG-arguments"></a>

 *value\$1expr*   
 Colonne cible ou expression sur laquelle la fonction opère. 

 *offset*   
 Paramètre facultatif qui spécifie le nombre de lignes avant la ligne actuelle pour lesquelles renvoyer des valeurs. Le décalage peut être un nombre entier constant ou une expression qui a pour valeur un nombre entier. Si vous ne spécifiez pas de décalage, Amazon Redshift utilise `1` comme valeur par défaut. Un décalage de `0` indique la ligne actuelle. 

IGNORE NULLS   
Spécification facultative qui indique qu’Amazon Redshift doit ignorer les valeurs null pour déterminer les lignes à utiliser. Les valeurs NULL sont incluses si IGNORE NULLS n’est pas répertorié.   
Vous pouvez utiliser une expression NVL ou COALESCE pour remplacer les valeurs NULL par une autre valeur. Pour plus d'informations, consultez [Fonctions NVL et COALESCE](r_NVL_function.md). 

RESPECT NULLS   
 Indique qu’Amazon Redshift doit contenir des valeurs null pour déterminer la ligne à utiliser. La clause RESPECT NULLS est prise en charge par défaut, si vous ne spécifiez pas IGNORE NULLS. 

OVER   
Spécifie le partitionnement de fenêtrage et d’ordonnancement. La clause OVER ne peut pas contenir de spécification de cadre de fenêtrage. 

PARTITION BY *window\$1partition*   
Argument facultatif qui définit la plage d’enregistrements de chaque groupe de la clause OVER. 

ORDER BY *window\$1ordering*   
Trie les lignes dans chaque partition. 

La fonction de fenêtrage LAG prend en charge les expressions qui utilisent l’un des types de données Amazon Redshift. Le type de retour est identique au type *value\$1expr*. 

## Exemples
<a name="r_WF_LAG-examples"></a>

 L’exemple suivant présente la quantité de billets vendus à l’acheteur ayant l’ID d’acheteur 3 et l’heure à laquelle l’acheteur 3 a acheté les billets. Pour comparer chaque vente à la vente précédente de l’acheteur 3, la requête renvoie la quantité précédente vendue pour chaque vente. Dans la mesure où il n’y a aucun achat avant le 16/01/2008, la première quantité précédente vendue a la valeur null : 

```
select buyerid, saletime, qtysold,
lag(qtysold,1) over (order by buyerid, saletime) as prev_qtysold
from sales where buyerid = 3 order by buyerid, saletime;

buyerid |      saletime       | qtysold | prev_qtysold
---------+---------------------+---------+--------------
3 | 2008-01-16 01:06:09 |       1 |
3 | 2008-01-28 02:10:01 |       1 |            1
3 | 2008-03-12 10:39:53 |       1 |            1
3 | 2008-03-13 02:56:07 |       1 |            1
3 | 2008-03-29 08:21:39 |       2 |            1
3 | 2008-04-27 02:39:01 |       1 |            2
3 | 2008-08-16 07:04:37 |       2 |            1
3 | 2008-08-22 11:45:26 |       2 |            2
3 | 2008-09-12 09:11:25 |       1 |            2
3 | 2008-10-01 06:22:37 |       1 |            1
3 | 2008-10-20 01:55:51 |       2 |            1
3 | 2008-10-28 01:30:40 |       1 |            2
(12 rows)
```

# Fonction de fenêtrage LAST\$1VALUE
<a name="r_WF_last_value"></a>

 Pour un ensemble de lignes ordonnées, la fonction LAST\$1VALUE renvoie la valeur de l’expression par rapport à la dernière ligne du cadre. 

Pour savoir comment sélectionner la première ligne du cadre, consultez [Fonction de fenêtrage FIRST\$1VALUE](r_WF_first_value.md).

## Syntaxe
<a name="r_WF_last_value-synopsis"></a>

```
LAST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Arguments
<a name="r_WF_last_value-arguments"></a>

 *expression*   
 Colonne cible ou expression sur laquelle la fonction opère. 

IGNORE NULLS   
La fonction renvoie la dernière valeur du cadre qui n’est pas NULL (ou NULL si toutes les valeurs sont NULL). 

RESPECT NULLS   
Indique qu’Amazon Redshift doit contenir des valeurs null pour déterminer la ligne à utiliser. La clause RESPECT NULLS est prise en charge par défaut, si vous ne spécifiez pas IGNORE NULLS. 

OVER   
Présente les clauses de fenêtrage de la fonction. 

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction en termes d’une ou de plusieurs expressions. 

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY trie toute la table. Si vous spécifiez une clause ORDER BY, vous devez également spécifier une *frame\$1clause*.   
Les résultats dépendent de l’ordre des données. Les résultats sont non déterministes dans les cas suivants :   
+ Quand aucune clause ORDER BY n’est spécifiée et qu’une partition contient deux valeurs différentes pour une expression 
+ Lorsque l’expression a des valeurs différentes qui correspondent à la même valeur dans la liste ORDER BY. 

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis). 

## Type de retour
<a name="c_Supported_data_types_wf_last_value"></a>

Ces fonctions prennent en charge les expressions qui utilisent les types de données primitifs d’Amazon Redshift. Le type de retour est identique au type de données de l’*expression*.

## Exemples
<a name="r_WF_last_value-examples"></a>

Les exemples suivants utilisent la table VENUE de l’exemple de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

L’exemple suivant renvoie le nombre de places de chaque site dans la table VENUE, avec les résultats classés par capacité (d’élevée à faible). La fonction LAST\$1VALUE permet de sélectionner le nom du lieu qui correspond à la dernière ligne du cadre : dans le cas présent, il s’agit de la ligne présentant le plus petit nombre de places. Les résultats étant partitionnés par État, lorsque la valeur de VENUESTATE change, une nouvelle dernière valeur est sélectionnée. Comme le cadre de fenêtrage est illimité, la même dernière valeur est sélectionnée pour chaque ligne de chaque partition. 

Pour la Californie, `Shoreline Amphitheatre` est renvoyé pour chaque ligne de la partition, car il possède le plus petit nombre de places (`22000`). 

```
select venuestate, venueseats, venuename,
last_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |          last_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Shoreline Amphitheatre
CA         |      69843 | Monster Park                   | Shoreline Amphitheatre
CA         |      63026 | McAfee Coliseum                | Shoreline Amphitheatre
CA         |      56000 | Dodger Stadium                 | Shoreline Amphitheatre
CA         |      45050 | Angel Stadium of Anaheim       | Shoreline Amphitheatre
CA         |      42445 | PETCO Park                     | Shoreline Amphitheatre
CA         |      41503 | AT&T Park                      | Shoreline Amphitheatre
CA         |      22000 | Shoreline Amphitheatre         | Shoreline Amphitheatre
CO         |      76125 | INVESCO Field                  | Coors Field
CO         |      50445 | Coors Field                    | Coors Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Tropicana Field
FL         |      73800 | Jacksonville Municipal Stadium | Tropicana Field
FL         |      65647 | Raymond James Stadium          | Tropicana Field
FL         |      36048 | Tropicana Field                | Tropicana Field
...
```

# Fonction de fenêtrage LEAD
<a name="r_WF_LEAD"></a>

 La fonction de fenêtrage LEAD renvoie les valeurs pour une ligne avec un décalage donné au-dessous (après) de la ligne actuelle dans la partition. 

## Syntaxe
<a name="r_WF_LEAD-synopsis"></a>

```
LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## Arguments
<a name="r_WF_LEAD-arguments"></a>

 *value\$1expr*   
Colonne cible ou expression sur laquelle la fonction opère. 

 *offset*   
 Paramètre facultatif qui spécifie le nombre de lignes sous la ligne actuelle pour lesquelles renvoyer des valeurs. Le décalage peut être un nombre entier constant ou une expression qui a pour valeur un nombre entier. Si vous ne spécifiez pas de décalage, Amazon Redshift utilise `1` comme valeur par défaut. Un décalage de `0` indique la ligne actuelle. 

IGNORE NULLS   
Spécification facultative qui indique qu’Amazon Redshift doit ignorer les valeurs null pour déterminer les lignes à utiliser. Les valeurs NULL sont incluses si IGNORE NULLS n’est pas répertorié.   
Vous pouvez utiliser une expression NVL ou COALESCE pour remplacer les valeurs NULL par une autre valeur. Pour plus d'informations, consultez [Fonctions NVL et COALESCE](r_NVL_function.md). 

RESPECT NULLS   
 Indique qu’Amazon Redshift doit contenir des valeurs null pour déterminer la ligne à utiliser. La clause RESPECT NULLS est prise en charge par défaut, si vous ne spécifiez pas IGNORE NULLS. 

OVER   
Spécifie le partitionnement de fenêtrage et d’ordonnancement. La clause OVER ne peut pas contenir de spécification de cadre de fenêtrage. 

PARTITION BY *window\$1partition*   
Argument facultatif qui définit la plage d’enregistrements de chaque groupe de la clause OVER. 

ORDER BY *window\$1ordering*   
Trie les lignes dans chaque partition. 

La fonction de fenêtrage LEAD prend en charge les expressions qui utilisent l’un des types de données Amazon Redshift. Le type de retour est identique au type *value\$1expr*. 

## Exemples
<a name="r_WF_LEAD-examples"></a>

 L’exemple suivant fournit la commission pour les événements de la table SALES pour les billets ont été vendus sur le 1er janvier 2008 et le 2 janvier 2008 et la commission payée pour la vente des billets de la vente suivante. L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

```
SELECT eventid, commission, saletime, LEAD(commission, 1) over ( ORDER BY saletime ) AS next_comm
FROM sales
WHERE saletime BETWEEN '2008-01-09 00:00:00' AND '2008-01-10 12:59:59'
LIMIT 10;

+---------+------------+---------------------+-----------+
| eventid | commission |      saletime       | next_comm |
+---------+------------+---------------------+-----------+
|    1664 |       13.2 | 2008-01-09 01:00:21 |      69.6 |
|     184 |       69.6 | 2008-01-09 01:00:36 |     116.1 |
|    6870 |      116.1 | 2008-01-09 01:02:37 |      11.1 |
|    3718 |       11.1 | 2008-01-09 01:05:19 |     205.5 |
|    6772 |      205.5 | 2008-01-09 01:14:04 |      38.4 |
|    3074 |       38.4 | 2008-01-09 01:26:50 |     209.4 |
|    5254 |      209.4 | 2008-01-09 01:29:16 |      26.4 |
|    3724 |       26.4 | 2008-01-09 01:40:09 |      57.6 |
|    5303 |       57.6 | 2008-01-09 01:40:21 |      51.6 |
|    3678 |       51.6 | 2008-01-09 01:42:54 |      43.8 |
+---------+------------+---------------------+-----------+
```

 L’exemple suivant fournit la différence maximale entre la commission pour les événements de la table SALES et la commission payée pour la vente des billets de la vente suivante pour le même événement. Cet exemple montre comment utiliser LEAD avec une clause GROUP BY. Comme les fonctions de fenêtre ne sont pas autorisées dans les clauses d’agrégation, cet exemple utilise une sous-requête. L’exemple suivant utilise l’exemple de base de données TICKIT. Pour plus d’informations, consultez [Exemple de base de données](c_sampledb.md).

```
SELECT eventid, eventname, max(next_comm_diff) as max_commission_difference
FROM
(
    SELECT sales.eventid, eventname, commission - LEAD(commission, 1) over (ORDER BY sales.eventid, saletime) AS next_comm_diff
    FROM sales JOIN event ON sales.eventid = event.eventid
)
GROUP BY eventid, eventname
ORDER BY eventid

LIMIT 10

| eventid | eventname                   | max_commission_difference |
+---------+-----------------------------+---------------------------+
| 1       | Gotterdammerung             | 7.95                      |
| 2       | Boris Godunov               | 227.85                    |
| 3       | Salome                      | 1350.9                    |
| 4       | La Cenerentola (Cinderella) | 790.05                    |
| 5       | Il Trovatore                | 214.05                    |
| 6       | L Elisir d Amore            | 510.9                     |
| 7       | Doctor Atomic               | 180.6                     |
| 9       | The Fly                     | 147                       |
| 10      | Rigoletto                   | 186.6                     |
+---------+-----------------------------+---------------------------+
```

# Fonction de fenêtrage LISTAGG
<a name="r_WF_LISTAGG"></a>

Pour chaque groupe d’une requête, la fonction de fenêtrage LISTAGG trie les lignes du groupe conformément à l’expression ORDER BY, puis concatène les valeurs en une chaîne unique. 

## Syntaxe
<a name="r_WF_LISTAGG-synopsis"></a>

```
LISTAGG( [DISTINCT] expression [, 'delimiter' ] ) 
[ WITHIN GROUP (ORDER BY order_list) ] 
OVER ( [PARTITION BY partition_expression] )
```

## Arguments
<a name="r_WF_LISTAGG-arguments"></a>

DISTINCT  
(Facultatif) Clause qui supprime toutes les valeurs en double dans l’expression spécifiée avant de procéder à la concaténation. Les espaces de fin étant ignorés, les chaînes `'a'` et `'a '` sont considérées comme doublons. LISTAGG utilise la première valeur rencontrée. Pour plus d'informations, consultez [Signification des blancs de fin](r_Character_types.md#r_Character_types-significance-of-trailing-blanks).

  


*aggregate\$1expression*   
 Toute expression valide (par exemple, un nom de colonne) qui fournit les valeurs à regrouper. Les valeurs NULL et les chaînes vides sont ignorées. 

 *delimiter*   
(Facultatif) Constante de chaîne qui sépare les valeurs concaténées. La valeur par défaut est NULL.

 WITHIN GROUP (ORDER BY *order\$1list*)   
(Facultatif) Clause qui spécifie l’ordre de tri des valeurs regroupées. Déterministe uniquement si ORDER BY fournit un ordonnancement unique. La valeur par défaut consiste à regrouper toutes les lignes et à renvoyer une valeur unique.

 OVER   
 Clause qui spécifie le partitionnement de fenêtrage. La clause OVER ne peut pas contenir d’ordre de fenêtrage ou de spécification de cadre de fenêtrage.

 PARTITION BY *partition\$1expression*   
(Facultatif) Définit la plage d’enregistrements de chaque groupe dans la clause OVER.

## Renvoie
<a name="r_WF_LISTAGG-data-types"></a>

Si le jeu de résultats est supérieur à 16 000 000 octets, LISTAGG renvoie l'erreur suivante :

```
Invalid operation: Result size exceeds LISTAGG limit
```

## Exemples
<a name="r_WF_LISTAGG-examples"></a>

Les exemples suivants utilisent la table WINSALES. Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

L'exemple suivant renvoie une liste de vendeurs IDs, classée par numéro de vendeur. 

```
select listagg(sellerid) 
within group (order by sellerid)
over() from winsales;

  listagg
------------
 11122333344
...
...
 11122333344
 11122333344
   (11 rows)
```

L'exemple suivant renvoie une liste de vendeurs IDs pour l'acheteur B, classée par date. 

```
select listagg(sellerid) 
within group (order by dateid)
over () as seller
from winsales
where buyerid = 'b' ;

  seller
---------
    3233
    3233
    3233
    3233
```

L’exemple suivant renvoie une liste des dates de ventes de l’acheteur B séparées par des barres virgules.

```
select listagg(dateid,',') 
within group (order by sellerid desc,salesid asc)
over () as dates
from winsales
where buyerid  = 'b';

             dates                                      
-------------------------------------------
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
```

L’exemple suivant utilise DISTINCT pour renvoyer une liste de dates de vente uniques pour l’acheteur B.

```
select listagg(distinct dateid,',') 
within group (order by sellerid desc,salesid asc)
over () as dates
from winsales
where buyerid  = 'b';

           dates
--------------------------------
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
```

L'exemple suivant renvoie une liste des ventes séparées par des IDs virgules pour chaque numéro d'acheteur.

```
select buyerid, 
listagg(salesid,',')
within group (order by salesid)
over (partition by buyerid) as sales_id
from winsales
order by buyerid;

+---------+-------------------------+
| buyerid |        sales_id         |
+---------+-------------------------+
| a       | 10005,40001,40005       |
| a       | 10005,40001,40005       |
| a       | 10005,40001,40005       |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
+---------+-------------------------+
```

L'exemple suivant illustre la prise en charge de LISTAGG avec des résultats concaténés allant jusqu'à 16 000 000 octets :

```
CREATE TABLE large_data (
    id INT,
    content VARCHAR(65535)
);

INSERT INTO large_data VALUES 
    (1, REPEAT('A', 65535)),
    (2, REPEAT('B', 65535)),
    (3, REPEAT('C', 65535));

SELECT LEN(LISTAGG(content, ',') WITHIN GROUP (ORDER BY id)) AS total_length
FROM large_data;

 total_length
--------------
       196607
```

# Fonction de fenêtrage MAX
<a name="r_WF_MAX"></a>

 La fonction de fenêtrage MAX renvoie le maximum de valeurs d’expression d’entrée. La fonction MAX utilise des valeurs numériques et ignore les valeurs NULL. 

## Syntaxe
<a name="r_WF_MAX-synopsis"></a>

```
MAX ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Arguments
<a name="r_WF_MAX-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. 

ALL   
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.

OVER   
 Clause qui spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction MAX en termes d’une ou de plusieurs expressions.

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis).

## Types de données
<a name="r_WF_MAX-data-types"></a>

Accepte n’importe quel type de données comme entrée. Renvoie le même type de données que *expression*.

## Exemples
<a name="r_WF_MAX-examples"></a>

L’exemple suivant montre l’affichage de l’ID de ventes, la quantité et la quantité maximale dès le début de la fenêtre de données : 

```
select salesid, qty,
max(qty) over (order by salesid rows unbounded preceding) as max
from winsales
order by salesid;

salesid | qty | max
---------+-----+-----
10001 |  10 |  10
10005 |  30 |  30
10006 |  10 |  30
20001 |  20 |  30
20002 |  20 |  30
30001 |  10 |  30
30003 |  15 |  30
30004 |  20 |  30
30007 |  30 |  30
40001 |  40 |  40
40005 |  10 |  40
(11 rows)
```

Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

L’exemple suivant montre l’affichage de l’ID de vente, la quantité et la quantité maximale dans un cadre limité : 

```
select salesid, qty,
max(qty) over (order by salesid rows between 2 preceding and 1 preceding) as max
from winsales
order by salesid;

salesid | qty | max
---------+-----+-----
10001 |  10 |
10005 |  30 |  10
10006 |  10 |  30
20001 |  20 |  30
20002 |  20 |  20
30001 |  10 |  20
30003 |  15 |  20
30004 |  20 |  15
30007 |  30 |  20
40001 |  40 |  30
40005 |  10 |  40
(11 rows)
```

# Fonction de fenêtrage MEDIAN
<a name="r_WF_MEDIAN"></a>

Calcule la valeur médiane de la plage de valeurs dans une fenêtre ou une partition. Les valeurs NULL de la plage sont ignorées.

MEDIAN est une fonction de distribution inverse qui suppose un modèle de distribution continue.

## Syntaxe
<a name="r_WF_MEDIAN-synopsis"></a>

```
MEDIAN ( median_expression )
OVER ( [ PARTITION BY partition_expression ] )
```

## Arguments
<a name="r_WF_MEDIAN-arguments"></a>

 *median\$1expression*   
Expression, comme un nom de colonne, qui fournit les valeurs pour lesquelles déterminer la médiane. L’expression doit disposer d’un type de données numériques ou datetime ou être convertible implicitement en une.

OVER   
Clause qui spécifie le partitionnement de fenêtrage. La clause OVER ne peut pas contenir d’ordre de fenêtrage ou de spécification de cadre de fenêtrage.

PARTITION BY *partition\$1expression*   
Facultatif. Expression qui définit la plage d’enregistrements de chaque groupe dans la clause OVER.

## Types de données
<a name="r_WF_MEDIAN-data-types"></a>

Le type de retour est déterminé par le type de données de *median\$1expression*. Le tableau suivant illustre le type de retour de chaque type de données *median\$1expression*.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_WF_MEDIAN.html)

## Notes d’utilisation
<a name="r_WF_MEDIAN-data-usage-notes"></a>

Si l’argument *median\$1expression* est un type de données DECIMAL défini avec la précision maximale de 38 chiffres, il est possible que MEDIAN renvoie un résultat inexact ou une erreur. Si la valeur de retour de la fonction MEDIAN dépasse 38 chiffres, le résultat est tronqué pour s’adapter, ce qui entraîne une perte de précision. Si, au cours de l’interpolation, un résultat intermédiaire dépasse la précision maximale, un dépassement de capacité numérique se produit et la fonction renvoie une erreur. Pour éviter ces conditions, nous vous recommandons d’utiliser un type de données avec une précision inférieure ou l’argument *median\$1expression* avec une précision inférieure. 

Par exemple, une fonction SUM avec un argument DECIMAL renvoie une précision par défaut de 38 chiffres. L’échelle du résultat est identique à celle de l’argument. Par conséquent, par exemple, une fonction SUM appliquée à une colonne DECIMAL(5,2) renvoie un type de données DECIMAL(38,2).

L’exemple suivant utilise une fonction SUM dans l’argument *median\$1expression* d’une fonction MEDIAN. Le type de données de la colonne PRICEPAID est DECIMAL (8,2), la fonction SUM renvoie donc DECIMAL(38,2).

```
select salesid, sum(pricepaid), median(sum(pricepaid)) 
over() from sales where salesid < 10 group by salesid;
```

Pour éviter une perte potentielle de précision ou une erreur de dépassement de capacité, convertissez le résultat en un type de données DECIMAL avec une précision inférieure, comme dans l’exemple suivant.

```
select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2)) 
over() from sales where salesid < 10 group by salesid;
```

## Exemples
<a name="r_WF_MEDIAN-examples"></a>

 L’exemple suivant calcule le volume de ventes médian de chaque vendeur : 

```
select sellerid, qty, median(qty) 
over (partition by sellerid) 
from winsales
order by sellerid;


sellerid	qty	median
---------------------------
1		10	10.0
1		10	10.0
1		30	10.0
2		20	20.0
2		20	20.0
3		10	17.5
3		15	17.5
3		20	17.5
3		30	17.5
4		10	25.0
4		40	25.0
```

Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

# Fonction de fenêtrage MIN
<a name="r_WF_MIN"></a>

 La fonction de fenêtrage MIN renvoie le minimum de valeurs d’expression d’entrée. La fonction MIN utilise des valeurs numériques et ignore les valeurs NULL. 

## Syntaxe
<a name="r_WF_MIN-synopsis"></a>

```
MIN ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## Arguments
<a name="r_WF_MIN-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. 

ALL   
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.

OVER   
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction MIN en termes d’une ou de plusieurs expressions.

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis).

## Types de données
<a name="r_WF_MIN-data-types"></a>

Accepte n’importe quel type de données comme entrée. Renvoie le même type de données que *expression*.

## Exemples
<a name="r_WF_MIN-examples"></a>

L’exemple suivant montre l’affichage de l’ID de ventes, la quantité et la quantité minimale dès le début de la fenêtre de données : 

```
select salesid, qty,
min(qty) over
(order by salesid rows unbounded preceding)
from winsales
order by salesid;

salesid | qty | min
---------+-----+-----
10001 |  10 |  10
10005 |  30 |  10
10006 |  10 |  10
20001 |  20 |  10
20002 |  20 |  10
30001 |  10 |  10
30003 |  15 |  10
30004 |  20 |  10
30007 |  30 |  10
40001 |  40 |  10
40005 |  10 |  10
(11 rows)
```

 Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

L’exemple suivant montre l’affichage de l’ID de vente, la quantité et la quantité minimale dans un cadre limité : 

```
select salesid, qty,
min(qty) over
(order by salesid rows between 2 preceding and 1 preceding) as min
from winsales
order by salesid;

salesid | qty | min
---------+-----+-----
10001 |  10 |
10005 |  30 |  10
10006 |  10 |  10
20001 |  20 |  10
20002 |  20 |  10
30001 |  10 |  20
30003 |  15 |  10
30004 |  20 |  10
30007 |  30 |  15
40001 |  40 |  20
40005 |  10 |  30
(11 rows)
```

# Fonction de fenêtrage NTH\$1VALUE
<a name="r_WF_NTH"></a>

 La fonction de fenêtrage NTH\$1VALUE renvoie la valeur d’expression de la ligne spécifiée du cadre de fenêtrage associée à la première ligne de la fenêtre. 

## Syntaxe
<a name="r_WF_NTH-synopsis"></a>

```
NTH_VALUE (expr, offset)
[ IGNORE NULLS | RESPECT NULLS ]
OVER
( [ PARTITION BY window_partition ]
[ ORDER BY window_ordering 
                        frame_clause ] )
```

## Arguments
<a name="r_WF_NTH-arguments"></a>

 *expr*   
 Colonne cible ou expression sur laquelle la fonction opère. 

 *offset*   
 Détermine le nombre de lignes associé à la première ligne dans la fenêtre pour laquelle renvoyer l’expression. *offset* peut être une constante ou une expression et doit être un nombre entier positif qui est supérieur à 0. 

IGNORE NULLS   
Spécification facultative qui indique qu’Amazon Redshift doit ignorer les valeurs null pour déterminer les lignes à utiliser. Les valeurs NULL sont incluses si IGNORE NULLS n’est pas répertorié. 

RESPECT NULLS   
 Indique qu’Amazon Redshift doit contenir des valeurs null pour déterminer la ligne à utiliser. La clause RESPECT NULLS est prise en charge par défaut, si vous ne spécifiez pas IGNORE NULLS. 

OVER   
Spécifie le partitionnement, l’ordonnancement et le cadre de fenêtrage. 

PARTITION BY *window\$1partition*   
Définit la plage d’enregistrements de chaque groupe dans la clause OVER. 

ORDER BY *window\$1ordering*   
Trie les lignes dans chaque partition. Si ORDER BY n’est pas spécifié, le cadre par défaut se compose de toutes les lignes de la partition. 

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis). 

La fonction de fenêtrage NTH\$1VALUE prend en charge les expressions qui utilisent l’un des types de données Amazon Redshift. Le type de retour est identique au type *expr*. 

## Exemples
<a name="r_WF_NTH-examples"></a>

L’exemple suivant présente le nombre de places dans le troisième plus grand site de Californie, de Floride et de New York, par rapport au nombre de places dans les autres sites de ces États : 

```
select venuestate, venuename, venueseats,
nth_value(venueseats, 3)
ignore nulls
over(partition by venuestate order by venueseats desc
rows between unbounded preceding and unbounded following)
as third_most_seats
from (select * from venue where venueseats > 0 and
venuestate in('CA', 'FL', 'NY'))
order by venuestate;

venuestate |           venuename            | venueseats | third_most_seats
------------+--------------------------------+------------+------------------
CA         | Qualcomm Stadium               |      70561 |            63026
CA         | Monster Park                   |      69843 |            63026
CA         | McAfee Coliseum                |      63026 |            63026
CA         | Dodger Stadium                 |      56000 |            63026
CA         | Angel Stadium of Anaheim       |      45050 |            63026
CA         | PETCO Park                     |      42445 |            63026
CA         | AT&T Park                      |      41503 |            63026
CA         | Shoreline Amphitheatre         |      22000 |            63026
FL         | Dolphin Stadium                |      74916 |            65647
FL         | Jacksonville Municipal Stadium |      73800 |            65647
FL         | Raymond James Stadium          |      65647 |            65647
FL         | Tropicana Field                |      36048 |            65647
NY         | Ralph Wilson Stadium           |      73967 |            20000
NY         | Yankee Stadium                 |      52325 |            20000
NY         | Madison Square Garden          |      20000 |            20000
(15 rows)
```

# Fonction de fenêtrage NTILE
<a name="r_WF_NTILE"></a>

 La fonction de fenêtrage NTILE sépare les lignes ordonnées de la partition selon le nombre de groupes de lignes classés de taille égale autant que possible et renvoie le groupe dans lequel se situe une ligne donnée. 

## Syntaxe
<a name="r_WF_NTILE-synopsis"></a>

```
NTILE (expr)
OVER ( 
[ PARTITION BY expression_list ] 
[ ORDER BY order_list ]
)
```

## Arguments
<a name="r_WF_NTILE-arguments"></a>

 *expr*   
Nombre de groupes de rang et doit se traduire par une valeur de nombre entier positif (supérieur à 0) pour chaque partition. L’argument *expr* ne doit pas autoriser la valeur NULL. 

OVER   
 Clause qui spécifie le partitionnement et l’ordonnancement de fenêtrage. La clause OVER ne peut pas contenir de spécification de cadre de fenêtrage. 

PARTITION BY *window\$1partition*   
Facultatif. Plage d’enregistrements de chaque groupe dans la clause OVER. 

ORDER BY *window\$1ordering*   
Facultatif. Expression qui trie les lignes dans chaque partition. Si la clause ORDER BY n’est pas spécifiée, le comportement de rang est identique.  
Si ORDER BY ne génère pas d’ordonnancement unique, l’ordre des lignes est non déterministe. Pour plus d'informations, consultez [Ordonnancement unique des données pour les fonctions de fenêtrage](c_Window_functions.md#r_Examples_order_by_WF). 

## Type de retour
<a name="r_WF_NTILE-return-type"></a>

BIGINT

## Exemples
<a name="r_WF_NTILE-examples"></a>

 L’exemple suivant répartit en quatre groupes de rangs le prix payé pour les billets de Hamlet le 26 août 2008. L’ensemble de résultats est de 17 lignes, classées presque uniformément de 1 à 4 : 

```
select eventname, caldate, pricepaid, ntile(4)
over(order by pricepaid desc) from sales, event, date
where sales.eventid=event.eventid and event.dateid=date.dateid and eventname='Hamlet'
and caldate='2008-08-26'
order by 4;

eventname |  caldate   | pricepaid | ntile
-----------+------------+-----------+-------
Hamlet    | 2008-08-26 |   1883.00 |     1
Hamlet    | 2008-08-26 |   1065.00 |     1
Hamlet    | 2008-08-26 |    589.00 |     1
Hamlet    | 2008-08-26 |    530.00 |     1
Hamlet    | 2008-08-26 |    472.00 |     1
Hamlet    | 2008-08-26 |    460.00 |     2
Hamlet    | 2008-08-26 |    355.00 |     2
Hamlet    | 2008-08-26 |    334.00 |     2
Hamlet    | 2008-08-26 |    296.00 |     2
Hamlet    | 2008-08-26 |    230.00 |     3
Hamlet    | 2008-08-26 |    216.00 |     3
Hamlet    | 2008-08-26 |    212.00 |     3
Hamlet    | 2008-08-26 |    106.00 |     3
Hamlet    | 2008-08-26 |    100.00 |     4
Hamlet    | 2008-08-26 |     94.00 |     4
Hamlet    | 2008-08-26 |     53.00 |     4
Hamlet    | 2008-08-26 |     25.00 |     4
(17 rows)
```

# Fonction de fenêtrage PERCENT\$1RANK
<a name="r_WF_PERCENT_RANK"></a>

Calcule le rang en pourcentage d’une ligne donnée. Le rang en pourcentage est déterminé à l’aide de la formule suivante :

`(x - 1) / (the number of rows in the window or partition - 1)`

où *x* est le rang de la ligne actuelle. Le jeu de données suivant illustre l’utilisation de cette formule :

```
Row#	Value	Rank	Calculation	PERCENT_RANK
1	15	1	(1-1)/(7-1)	0.0000
2	20	2	(2-1)/(7-1)	0.1666
3	20	2	(2-1)/(7-1)	0.1666
4	20	2	(2-1)/(7-1)	0.1666
5	30	5	(5-1)/(7-1)	0.6666
6	30	5	(5-1)/(7-1)	0.6666
7	40	7	(7-1)/(7-1)	1.0000
```

La plage de valeur de retour est comprise entre 0 et 1, inclus. La première ligne de n’importe quel jeu dispose d’une fonction PERCENT\$1RANK spécifiée sur 0.

## Syntaxe
<a name="r_WF_PERCENT_RANK-synopsis"></a>

```
PERCENT_RANK ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## Arguments
<a name="r_WF_PERCENT_RANK-arguments"></a>

( )   
La fonction ne prend pas d’arguments, mais les parenthèses vides sont obligatoires. 

OVER  
Clause qui spécifie le partitionnement de fenêtrage. La clause OVER ne peut pas contenir de spécification de cadre de fenêtrage.

PARTITION BY *partition\$1expression*   
Facultatif. Expression qui définit la plage d’enregistrements de chaque groupe dans la clause OVER.

ORDER BY *order\$1list*   
Facultatif. Expression permettant de calculer le rang en pourcentage. L’expression doit disposer d’un type de données numériques ou être convertible implicitement en une. Si ORDER BY n’est pas spécifié, la valeur de retour est 0 pour toutes les lignes.  
Si ORDER BY ne génère pas d’ordonnancement unique, l’ordre des lignes est non déterministe. Pour plus d'informations, consultez [Ordonnancement unique des données pour les fonctions de fenêtrage](c_Window_functions.md#r_Examples_order_by_WF). 

## Type de retour
<a name="r_WF_PERCENT_RANK-return-type"></a>

FLOAT8

## Exemples
<a name="r_WF_PERCENT_RANK-examples"></a>

L’exemple suivant calcule le rang en pourcentage des volumes de ventes de chaque vendeur :

```
select sellerid, qty, percent_rank() 
over (partition by sellerid order by qty) 
from winsales;

sellerid	qty		percent_rank
----------------------------------------
1		10.00		0.0
1		10.64		0.5
1		30.37		1.0
3		10.04		0.0
3		15.15		0.33
3		20.75		0.67
3		30.55		1.0
2		20.09		0.0
2		20.12		1.0
4		10.12		0.0
4		40.23		1.0
```

Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

# Fonction de fenêtrage PERCENTILE\$1CONT
<a name="r_WF_PERCENTILE_CONT"></a>

La fonction PERCENTILE\$1CONT est une fonction de distribution inverse qui suppose un modèle de distribution continue. Elle prend une valeur de centile et une spécification de tri, et renvoie une valeur interpolée qui entre dans la catégorie de la valeur de centile donnée en ce qui concerne la spécification de tri. 

PERCENTILE\$1CONT calcule une interpolation linéaire entre les valeurs après les avoir ordonnées. A l’aide de la valeur de centile `(P)` et le nombre de lignes non null `(N)` dans le groupe d’agrégation, la fonction calcule le nombre de lignes après l’ordonnancement des lignes en fonction de la spécification de tri. Ce nombre de lignes `(RN)` est calculé selon la formule `RN = (1+ (P*(N-1))`. Le résultat de la fonction d’agrégation est calculé par interpolation linéaire entre les valeurs des lignes aux numéros de ligne `CRN = CEILING(RN)` et `FRN = FLOOR(RN)`. 

Le résultat final sera le suivant.

Si `(CRN = FRN = RN)` le résultat est `(value of expression from row at RN)` 

Sinon, le résultat est le suivant :

`(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)`.

Vous pouvez uniquement spécifier la clause PARTITION dans la clause OVER. Si la PARTITION est sélectionnée, pour chaque ligne, PERCENTILE\$1CONT renvoie la valeur qui se situerait dans le centile spécifié parmi un ensemble de valeurs d’une partition donnée. 

## Syntaxe
<a name="r_WF_PERCENTILE_CONT-synopsis"></a>

```
PERCENTILE_CONT ( percentile )
WITHIN GROUP (ORDER BY expr)
OVER (  [ PARTITION BY expr_list ]  )
```

## Arguments
<a name="r_WF_PERCENTILE_CONT-arguments"></a>

 *percentile*   
Constante numérique comprise entre 0 et 1. Les valeurs NULL sont ignorées dans le calcul.

WITHIN GROUP ( ORDER BY *expr*)   
Spécifie date/time les valeurs numériques ou sur lesquelles trier et calculer le percentile. 

OVER   
Spécifie le partitionnement de fenêtrage. La clause OVER ne peut pas contenir d’ordre de fenêtrage ou de spécification de cadre de fenêtrage.

PARTITION BY *expr*   
Argument facultatif qui définit la plage d’enregistrements de chaque groupe de la clause OVER.

## Renvoie
<a name="r_WF_PERCENTILE_CONT-returns"></a>

Le type de retour est déterminé par le type de données de l’expression ORDER BY dans la clause WITHIN GROUP. Le tableau suivant illustre le type de retour de chaque type de données d’expression ORDER BY.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/redshift/latest/dg/r_WF_PERCENTILE_CONT.html)

## Notes d’utilisation
<a name="r_WF_PERCENTILE_CONT-usage-notes"></a>

Si l’expression ORDER BY est un type de données DECIMAL défini avec la précision maximale de 38 chiffres, il est possible que PERCENTILE\$1CONT renvoie un résultat inexact ou une erreur. Si la valeur de retour de la fonction PERCENTILE\$1CONT dépasse 38 chiffres, le résultat est tronqué pour s’adapter, ce qui entraîne une perte de précision. Si, au cours de l’interpolation, un résultat intermédiaire dépasse la précision maximale, un dépassement de capacité numérique se produit et la fonction renvoie une erreur. Pour éviter ces conditions, nous vous recommandons d’utiliser un type de données avec une précision inférieure ou l’expression ORDER BY avec une précision inférieure. 

Par exemple, une fonction SUM avec un argument DECIMAL renvoie une précision par défaut de 38 chiffres. L’échelle du résultat est identique à celle de l’argument. Par conséquent, par exemple, une fonction SUM appliquée à une colonne DECIMAL(5,2) renvoie un type de données DECIMAL(38,2). 

L’exemple suivant utilise une fonction SUM dans la clause ORDER BY d’une fonction PERCENTILE\$1CONT. Le type de données de la colonne PRICEPAID est DECIMAL (8,2), la fonction SUM renvoie donc DECIMAL(38,2). 

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid) desc) over()
from sales where salesid < 10 group by salesid;
```

Pour éviter une perte potentielle de précision ou une erreur de dépassement de capacité, convertissez le résultat en un type de données DECIMAL avec une précision inférieure, comme dans l’exemple suivant.

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid)::decimal(30,2) desc) over()
from sales where salesid < 10 group by salesid;
```

## Exemples
<a name="r_WF_PERCENTILE_CONT-examples"></a>

Les exemples suivants utilisent la table WINSALES. Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over() as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        1 |  10 |   20.0
        1 |  10 |   20.0
        3 |  10 |   20.0
        4 |  10 |   20.0
        3 |  15 |   20.0
        2 |  20 |   20.0
        3 |  20 |   20.0
        2 |  20 |   20.0
        3 |  30 |   20.0
        1 |  30 |   20.0
        4 |  40 |   20.0
(11 rows)
```

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over(partition by sellerid) as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        2 |  20 |   20.0
        2 |  20 |   20.0
        4 |  10 |   25.0
        4 |  40 |   25.0
        1 |  10 |   10.0
        1 |  10 |   10.0
        1 |  30 |   10.0
        3 |  10 |   17.5
        3 |  15 |   17.5
        3 |  20 |   17.5
        3 |  30 |   17.5
(11 rows)
```

L’exemple suivant applique les fonctions PERCENTILE\$1CONT et PERCENTILE\$1DISC sur la vente de billets pour les vendeurs de l’état du Washington. 

```
SELECT sellerid, state, sum(qtysold*pricepaid) sales, 
percentile_cont(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over(),
percentile_disc(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over()
from sales s, users u 
where s.sellerid = u.userid and state = 'WA' and sellerid < 1000
group by sellerid, state;

 sellerid | state |  sales  | percentile_cont | percentile_disc
----------+-------+---------+-----------------+-----------------
      127 | WA    | 6076.00 |         2044.20 |         1531.00
      787 | WA    | 6035.00 |         2044.20 |         1531.00
      381 | WA    | 5881.00 |         2044.20 |         1531.00
      777 | WA    | 2814.00 |         2044.20 |         1531.00
       33 | WA    | 1531.00 |         2044.20 |         1531.00
      800 | WA    | 1476.00 |         2044.20 |         1531.00
        1 | WA    | 1177.00 |         2044.20 |         1531.00
(7 rows)
```

# Fonction de fenêtrage PERCENTILE\$1DISC
<a name="r_WF_PERCENTILE_DISC"></a>

La fonction PERCENTILE\$1DISC est une fonction de distribution inverse qui suppose un modèle de distribution discrète. Elle prend une valeur de centile et une spécification de tri et renvoie un élément de l’ensemble donné. 

Pour une valeur de centile donnée P, PERCENTILE\$1DISC trie les valeurs de l’expression dans la clause ORDER BY et renvoie la valeur avec la valeur de distribution cumulée la plus petite (concernant la même spécification de tri) supérieure ou égale à P. 

Vous pouvez uniquement spécifier la clause PARTITION dans la clause OVER. 

## Syntaxe
<a name="r_WF_PERCENTILE_DISC-synopsis"></a>

```
PERCENTILE_DISC ( percentile )
WITHIN GROUP (ORDER BY expr)
OVER (  [ PARTITION BY expr_list ]  )
```

## Arguments
<a name="r_WF_PERCENTILE_DISC-arguments"></a>

 *percentile*   
Constante numérique comprise entre 0 et 1. Les valeurs NULL sont ignorées dans le calcul.

WITHIN GROUP ( ORDER BY *expr*)   
Spécifie date/time les valeurs numériques ou sur lesquelles trier et calculer le percentile. 

OVER   
Spécifie le partitionnement de fenêtrage. La clause OVER ne peut pas contenir d’ordre de fenêtrage ou de spécification de cadre de fenêtrage.

PARTITION BY *expr*   
Argument facultatif qui définit la plage d’enregistrements de chaque groupe de la clause OVER.

## Renvoie
<a name="r_WF_PERCENTILE_DISC-returns"></a>

Type de données identique à l’expression ORDER BY dans la clause WITHIN GROUP.

## Exemples
<a name="r_WF_PERCENTILE_DISC-examples"></a>

Les exemples suivants utilisent la table WINSALES. Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

```
SELECT sellerid, qty, PERCENTILE_DISC(0.5) 
WITHIN GROUP (ORDER BY qty) 
OVER() AS MEDIAN FROM winsales;

+----------+-----+--------+
| sellerid | qty | median |
+----------+-----+--------+
| 3        | 10  | 20     |
| 1        | 10  | 20     |
| 1        | 10  | 20     |
| 4        | 10  | 20     |
| 3        | 15  | 20     |
| 2        | 20  | 20     |
| 2        | 20  | 20     |
| 3        | 20  | 20     |
| 1        | 30  | 20     |
| 3        | 30  | 20     |
| 4        | 40  | 20     |
+----------+-----+--------+

SELECT sellerid, qty, PERCENTILE_DISC(0.5) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS MEDIAN FROM winsales;

+----------+-----+--------+
| sellerid | qty | median |
+----------+-----+--------+
| 4        | 10  | 10     |
| 4        | 40  | 10     |
| 3        | 10  | 15     |
| 3        | 15  | 15     |
| 3        | 20  | 15     |
| 3        | 30  | 15     |
| 2        | 20  | 20     |
| 2        | 20  | 20     |
| 1        | 10  | 10     |
| 1        | 10  | 10     |
| 1        | 30  | 10     |
+----------+-----+--------+
```

Pour rechercher PERCENTILE\$1DISC(0.25) et PERCENTILE\$1DISC(0.75) pour la quantité lorsqu’elle est partitionnée par ID de vendeur, utilisez les exemples suivants.

```
SELECT sellerid, qty, PERCENTILE_DISC(0.25) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS quartile1 FROM winsales;

+----------+-----+-----------+
| sellerid | qty | quartile1 |
+----------+-----+-----------+
| 4        | 10  | 10        |
| 4        | 40  | 10        |
| 2        | 20  | 20        |
| 2        | 20  | 20        |
| 3        | 10  | 10        |
| 3        | 15  | 10        |
| 3        | 20  | 10        |
| 3        | 30  | 10        |
| 1        | 10  | 10        |
| 1        | 10  | 10        |
| 1        | 30  | 10        |
+----------+-----+-----------+

SELECT sellerid, qty, PERCENTILE_DISC(0.75) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS quartile3 FROM winsales;

+----------+-----+-----------+
| sellerid | qty | quartile3 |
+----------+-----+-----------+
| 3        | 10  | 20        |
| 3        | 15  | 20        |
| 3        | 20  | 20        |
| 3        | 30  | 20        |
| 4        | 10  | 40        |
| 4        | 40  | 40        |
| 2        | 20  | 20        |
| 2        | 20  | 20        |
| 1        | 10  | 30        |
| 1        | 10  | 30        |
| 1        | 30  | 30        |
+----------+-----+-----------+
```

# Fonction de fenêtrage RANK
<a name="r_WF_RANK"></a>

 La fonction de fenêtrage RANK détermine le rang d’une valeur dans un groupe de valeurs, en fonction de l’expression ORDER BY dans la clause OVER. Si la clause PARTITION BY facultative est présente, les rangs sont réinitialisés pour chaque groupe de lignes. Les lignes avec des valeurs égales pour les critères de rang reçoivent le même rang. Amazon Redshift ajoute le nombre de lignes à égalité au rang à égalité pour calculer le rang suivant. Par conséquent, les rangs peuvent ne pas être des numéros consécutifs. Par exemple, si deux lignes sont classées 1, le prochain rang est 3. 

 La fonction RANK diffère de [Fonction de fenêtrage DENSE\$1RANK](r_WF_DENSE_RANK.md) sur un point : pour DENSE\$1RANK, si deux lignes ou plus sont à égalité, il n’y a aucun écart dans la séquence des valeurs classées. Par exemple, si deux lignes sont classées 1, le prochain rang est 2.

Vous pouvez avoir des fonctions de rang avec différentes clauses PARTITION BY et ORDER BY dans la même requête. 

## Syntaxe
<a name="r_WF_RANK-synopsis"></a>

```
RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## Arguments
<a name="r_WF_RANK-arguments"></a>

( )   
La fonction ne prend pas d’arguments, mais les parenthèses vides sont obligatoires. 

OVER   
Clauses de fenêtrage de la fonction RANK.

PARTITION BY *expr\$1list*   
Facultatif. Une ou plusieurs expressions qui définissent le fenêtrage. 

ORDER BY *order\$1list*   
Facultatif. Définit les colonnes sur lesquelles les valeurs de rang sont basées. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table. Si ORDER BY n’est pas spécifié, la valeur de retour est 1 pour toutes les lignes.   
Si ORDER BY ne génère pas d’ordonnancement unique, l’ordre des lignes est non déterministe. Pour plus d'informations, consultez [Ordonnancement unique des données pour les fonctions de fenêtrage](c_Window_functions.md#r_Examples_order_by_WF). 

## Type de retour
<a name="c_Supported_data_types_wf_rank"></a>

INTEGER

## Exemples
<a name="r_WF_RANK-examples"></a>

L’exemple suivant montre le classement de la table selon la quantité vendue (croissant par défaut) et l’affectation d’un rang à chaque ligne. 1 est la valeur classée la plus élevée. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués: 

```
select salesid, qty,
rank() over (order by qty) as rnk
from winsales
order by 2,1;

salesid | qty | rnk
--------+-----+-----
10001 |  10 |  1
10006 |  10 |  1
30001 |  10 |  1
40005 |  10 |  1
30003 |  15 |  5
20001 |  20 |  6
20002 |  20 |  6
30004 |  20 |  6
10005 |  30 |  9
30007 |  30 |  9
40001 |  40 |  11
(11 rows)
```

Notez que la clause ORDER BY externe de cet exemple inclut les colonnes 2 et 1 afin de garantir qu’Amazon Redshift renvoie systématiquement des résultats triés chaque fois que cette requête est exécutée. Par exemple, les lignes avec les ventes IDs 10001 et 10006 ont des valeurs QTY et RNK identiques. L’ordonnancement du résultat final défini par la colonne 1 garantit que la ligne 10001 précède toujours 10006. Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

Dans l’exemple suivant, l’ordonnancement est inversé pour la fonction de fenêtrage (`order by qty desc`). A présent, la valeur de rang la plus élevée s’applique à la valeur QTY la plus élevée. 

```
select salesid, qty,
rank() over (order by qty desc) as rank
from winsales
order by 2,1;

 salesid | qty | rank
---------+-----+-----
   10001 |  10 |   8
   10006 |  10 |   8
   30001 |  10 |   8
   40005 |  10 |   8
   30003 |  15 |   7
   20001 |  20 |   4
   20002 |  20 |   4
   30004 |  20 |   4
   10005 |  30 |   2
   30007 |  30 |   2
   40001 |  40 |   1
(11 rows)
```

Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

L’exemple suivant montre le partitionnement de la table en fonction de chaque SELLERID, le classement de chaque partition selon la quantité (par ordre décroissant) et l’affectation d’un rang à chaque ligne. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués. 

```
select salesid, sellerid, qty, rank() over
(partition by sellerid
order by qty desc) as rank
from winsales
order by 2,3,1;

salesid | sellerid | qty | rank
--------+----------+-----+-----
  10001 |        1 |  10 |  2
  10006 |        1 |  10 |  2
  10005 |        1 |  30 |  1
  20001 |        2 |  20 |  1
  20002 |        2 |  20 |  1
  30001 |        3 |  10 |  4
  30003 |        3 |  15 |  3
  30004 |        3 |  20 |  2
  30007 |        3 |  30 |  1
  40005 |        4 |  10 |  2
  40001 |        4 |  40 |  1
(11 rows)
```

# Fonction de fenêtrage RATIO\$1TO\$1REPORT
<a name="r_WF_RATIO_TO_REPORT"></a>

Calcule le ratio d’une valeur par rapport à la somme des valeurs dans une fenêtre ou une partition. La valeur de RATIO TO REPORT est déterminée à l’aide de la formule suivante :

`value of `*ratio\$1expression* `argument for the current row / sum of` *ratio\$1expression* `argument for the window or partition`

Le jeu de données suivant illustre l’utilisation de cette formule :

```
Row#	Value	Calculation	RATIO_TO_REPORT
1	2500	(2500)/(13900)	0.1798
2	2600	(2600)/(13900)	0.1870
3	2800	(2800)/(13900)	0.2014
4	2900	(2900)/(13900)	0.2086
5	3100	(3100)/(13900)	0.2230
```

La plage de valeur de retour est comprise entre 0 et 1, inclus. Si *ratio\$1expression* a la valeur NULL, la valeur renvoyée est `NULL`. Si une valeur dans *partition\$1expression* est unique, la fonction retournera `1` pour cette valeur.

## Syntaxe
<a name="r_WF_RATIO_TO_REPORT-synopsis"></a>

```
RATIO_TO_REPORT ( ratio_expression )
OVER ( [ PARTITION BY partition_expression ] )
```

## Arguments
<a name="r_WF_RATIO_TO_REPORT-arguments"></a>

*ratio\$1expression*   
Expression, comme un nom de colonne, qui fournit la valeur pour laquelle déterminer le ratio. L’expression doit disposer d’un type de données numériques ou être convertible implicitement en une.  
Vous ne pouvez pas utiliser d’autre fonction analytique dans *ratio\$1expression*.

OVER  
Clause qui spécifie le partitionnement de fenêtrage. La clause OVER ne peut pas contenir d’ordre de fenêtrage ou de spécification de cadre de fenêtrage.

PARTITION BY *partition\$1expression*   
Facultatif. Expression qui définit la plage d’enregistrements de chaque groupe dans la clause OVER.

## Type de retour
<a name="r_WF_RATIO_TO_REPORT-return-type"></a>

FLOAT8

## Exemples
<a name="r_WF_RATIO_TO_REPORT-examples"></a>

Les exemples suivants utilisent la table WINSALES. Pour en savoir plus sur la façon de créer la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

L'exemple suivant calcule la ratio-to-report valeur de chaque ligne de la quantité d'un vendeur par rapport au total de toutes les quantités du vendeur.

```
select sellerid, qty, ratio_to_report(qty) 
over()
from winsales
order by sellerid;

sellerid  qty    ratio_to_report
--------------------------------------
1         30     0.13953488372093023	
1         10     0.046511627906976744	
1         10     0.046511627906976744	
2         20     0.09302325581395349	
2         20     0.09302325581395349	
3         30     0.13953488372093023	
3         20     0.09302325581395349	
3         15     0.06976744186046512	
3         10     0.046511627906976744	
4         10     0.046511627906976744	
4         40     0.18604651162790697
```

L’exemple suivant calcule les ratios des volumes de ventes de chaque vendeur, par partition.

```
select sellerid, qty, ratio_to_report(qty) 
over(partition by sellerid) 
from winsales;

sellerid   qty    ratio_to_report
-------------------------------------------
2          20     0.5	
2          20     0.5	
4          40     0.8	
4          10     0.2	
1          10     0.2	
1          30     0.6	
1          10     0.2	
3          10     0.13333333333333333	
3          15     0.2	
3          20     0.26666666666666666	
3          30     0.4
```

# Fonction de fenêtrage ROW\$1NUMBER
<a name="r_WF_ROW_NUMBER"></a>

Attribue le nombre ordinal de la ligne actuelle au sein d’un groupe de lignes, en partant de 1, en fonction de l’expression ORDER BY de la clause OVER. Si la clause PARTITION BY facultative est présente, les nombres ordinaux sont réinitialisés pour chaque groupe de lignes. Les lignes avec des valeurs égales pour les expressions ORDER BY reçoivent des numéros de lignes différentes de manière non déterministe. 

## Syntaxe
<a name="r_WF_ROW_NUMBER-synopsis"></a>

```
ROW_NUMBER() OVER(
  [ PARTITION BY expr_list ]
  [ ORDER BY order_list ]
)
```

## Arguments
<a name="r_WF_ROW_NUMBER-arguments"></a>

( )   
La fonction ne prend pas d’arguments, mais les parenthèses vides sont obligatoires. 

OVER   
Clause de fonction de fenêtrage pour la fonction ROW\$1NUMBER. 

PARTITION BY *expr\$1list*   
Facultatif. Une ou plusieurs expressions de colonne qui répartissent les résultats dans des ensembles de lignes. 

ORDER BY *order\$1list*   
Facultatif. Une ou plusieurs expressions de colonne qui définissent l’ordre des lignes au sein d’un ensemble. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.   
Si ORDER BY ne génère pas d’ordonnancement unique ou n’est pas spécifiée, l’ordre des lignes est non déterministe. Pour plus d'informations, consultez [Ordonnancement unique des données pour les fonctions de fenêtrage](c_Window_functions.md#r_Examples_order_by_WF). 

## Type de retour
<a name="c_Supported_data_types_r_WF_ROW_NUMBER"></a>

BIGINT

## Exemples
<a name="r_WF_ROW_NUMBER-examples"></a>

Les exemples suivants utilisent la table `WINSALES`. Pour obtenir une description de la table `WINSALES`, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

L’exemple suivant ordonne la table par QTY (par ordre croissant), puis attribue un numéro de ligne à chaque ligne. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués. 

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
   ORDER BY qty ASC) AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10006 |        1 |  10 |   3
   40005 |        4 |  10 |   4
   30003 |        3 |  15 |   5
   20001 |        2 |  20 |   6
   20002 |        2 |  20 |   7
   30004 |        3 |  20 |   8
   10005 |        1 |  30 |   9
   30007 |        3 |  30 |  10
   40001 |        4 |  40 |  11
```

L’exemple suivant présente la partition de la table par SELLERID et classe chaque partition par QTY (en ordre croissant), puis affecte un numéro de ligne à chaque ligne. Les résultats sont triés une fois que les résultats de la fonction de fenêtrage sont appliqués. 

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
  PARTITION BY sellerid
  ORDER BY qty ASC) AS row_by_seller
FROM winsales
ORDER BY 2,4;

 salesid | sellerid | qty | row_by_seller
---------+----------+-----+-----
   10001 |        1 |  10 |   1
   10006 |        1 |  10 |   2
   10005 |        1 |  30 |   3
   20001 |        2 |  20 |   1
   20002 |        2 |  20 |   2
   30001 |        3 |  10 |   1
   30003 |        3 |  15 |   2
   30004 |        3 |  20 |   3
   30007 |        3 |  30 |   4
   40005 |        4 |  10 |   1
   40001 |        4 |  40 |   2
```

L’exemple suivant montre les résultats lorsque les clauses facultatives ne sont pas utilisées. 

```
SELECT salesid, sellerid, qty, ROW_NUMBER() OVER() AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10005 |        1 |  30 |   3
   40001 |        4 |  40 |   4
   10006 |        1 |  10 |   5
   20001 |        2 |  20 |   6
   40005 |        4 |  10 |   7
   20002 |        2 |  20 |   8
   30003 |        3 |  15 |   9
   30004 |        3 |  20 |  10
   30007 |        3 |  30 |  11
```

# Fonctions de fenêtrage STDDEV\$1SAMP et STDDEV\$1POP
<a name="r_WF_STDDEV"></a>

Les fonctions de fenêtrage STDDEV\$1SAMP et STDDEV\$1POP renvoient l’écart type entre l’échantillon et la population d’un ensemble de valeurs numériques (nombre entier, décimale ou à virgule flottante). Consultez également [Fonctions STDDEV\$1SAMP et STDDEV\$1POP](r_STDDEV_functions.md).

STDDEV\$1SAMP et STDDEV sont des synonymes de la même fonction.

## Syntaxe
<a name="r_WF_STDDEV-synopsis"></a>

```
STDDEV_SAMP | STDDEV | STDDEV_POP
( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Arguments
<a name="r_WF_STDDEV-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. 

ALL   
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.

OVER   
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction en termes d’une ou de plusieurs expressions. 

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis).

## Types de données
<a name="c_Supported_data_types_wf_stddev"></a>

Les types d’argument pris en charge par les fonctions STDDEV sont SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL et DOUBLE PRECISION.

Quel que soit le type de données de l’expression, le type de retour d’une fonction STDDEV est un nombre double précision.

## Exemples
<a name="r_wf_stddev-examples"></a>

L’exemple suivant illustre l’utilisation des fonctions STDDEV\$1POP et VAR\$1POP en tant que fonctions de fenêtrage. La requête calcule la variance et l’écart type de la population pour les valeurs PRICEPAID dans la table SALES. 

```
select salesid, dateid, pricepaid,
round(stddev_pop(pricepaid) over
(order by dateid, salesid rows unbounded preceding)) as stddevpop,
round(var_pop(pricepaid) over
(order by dateid, salesid rows unbounded preceding)) as varpop
from sales
order by 2,1;

salesid | dateid | pricepaid | stddevpop | varpop
--------+--------+-----------+-----------+---------
  33095 |   1827 |    234.00 |         0 |       0
  65082 |   1827 |    472.00 |       119 |   14161
  88268 |   1827 |    836.00 |       248 |   61283
  97197 |   1827 |    708.00 |       230 |   53019
 110328 |   1827 |    347.00 |       223 |   49845
 110917 |   1827 |    337.00 |       215 |   46159
 150314 |   1827 |    688.00 |       211 |   44414
 157751 |   1827 |   1730.00 |       447 |  199679
 165890 |   1827 |   4192.00 |      1185 | 1403323
...
```

Les exemples de fonctions d’écart type et de variance peuvent être utilisés de la même manière. 

# Fonction de fenêtrage SUM
<a name="r_WF_SUM"></a>

 La fonction de fenêtrage SUM renvoie la somme des valeurs de la colonne d’entrée ou de l’expression. La fonction SUM utilise des valeurs numériques et ignore les valeurs NULL.

## Syntaxe
<a name="r_WF_SUM-synopsis"></a>

```
SUM ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Arguments
<a name="r_WF_SUM-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. 

ALL   
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.

OVER   
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction SUM en termes d’une ou de plusieurs expressions.

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis).

## Types de données
<a name="c_Supported_data_types_wf_sum"></a>

Les types d’argument pris en charge par la fonction SUM sont SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL et DOUBLE PRECISION.

Les types de retour pris en charge par la fonction SUM sont les suivants : 
+ Arguments BIGINT for SMALLINT ou INTEGER
+ Arguments NUMERIC for BIGINT
+ DOUBLE PRECISION pour les arguments à virgule flottante

## Exemples
<a name="r_WF_SUM-examples"></a>

L’exemple suivant montre la création d’une somme cumulée (évolutive) des volumes de ventes classés par date et par ID de ventes : 

```
select salesid, dateid, sellerid, qty,
sum(qty) over (order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  20
10005 | 2003-12-24 |        1 |  30 |  50
40001 | 2004-01-09 |        4 |  40 |  90
10006 | 2004-01-18 |        1 |  10 | 100
20001 | 2004-02-12 |        2 |  20 | 120
40005 | 2004-02-12 |        4 |  10 | 130
20002 | 2004-02-16 |        2 |  20 | 150
30003 | 2004-04-18 |        3 |  15 | 165
30004 | 2004-04-18 |        3 |  20 | 185
30007 | 2004-09-07 |        3 |  30 | 215
(11 rows)
```

 Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example).

L’exemple suivant montre la création d’une somme cumulée (évolutive) des volumes de ventes par date, le partitionnement des résultats par ID de vendeur et le classement des résultats par date et ID de ventes au sein de la partition : 

```
select salesid, dateid, sellerid, qty,
sum(qty) over (partition by sellerid
order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  10
10005 | 2003-12-24 |        1 |  30 |  40
40001 | 2004-01-09 |        4 |  40 |  40
10006 | 2004-01-18 |        1 |  10 |  50
20001 | 2004-02-12 |        2 |  20 |  20
40005 | 2004-02-12 |        4 |  10 |  50
20002 | 2004-02-16 |        2 |  20 |  40
30003 | 2004-04-18 |        3 |  15 |  25
30004 | 2004-04-18 |        3 |  20 |  45
30007 | 2004-09-07 |        3 |  30 |  75
(11 rows)
```

L’exemple suivant montre la numérotation séquentielle de toutes les lignes de l’ensemble de résultats, classées en fonction des colonnes SELLERID et SALESID : 

```
select salesid, sellerid, qty,
sum(1) over (order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;

salesid | sellerid |  qty | rownum
--------+----------+------+--------
10001 |        1 |   10 |     1
10005 |        1 |   30 |     2
10006 |        1 |   10 |     3
20001 |        2 |   20 |     4
20002 |        2 |   20 |     5
30001 |        3 |   10 |     6
30003 |        3 |   15 |     7
30004 |        3 |   20 |     8
30007 |        3 |   30 |     9
40001 |        4 |   40 |    10
40005 |        4 |   10 |    11
(11 rows)
```

Pour obtenir une description de la table WINSALES, consultez [Exemple de tableau contenant des exemples de fonctions de fenêtrage](c_Window_functions.md#r_Window_function_example). 

L’exemple suivant montre la numérotation séquentielle de toutes les lignes de l’ensemble de résultats, le partitionnement des résultats par SELLERID et le classement des résultats par SELLERID et SALESID au sein de la partition : 

```
select salesid, sellerid, qty,
sum(1) over (partition by sellerid
order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;

salesid | sellerid | qty | rownum
---------+----------+-----+--------
10001 |        1 |  10 |      1
10005 |        1 |  30 |      2
10006 |        1 |  10 |      3
20001 |        2 |  20 |      1
20002 |        2 |  20 |      2
30001 |        3 |  10 |      1
30003 |        3 |  15 |      2
30004 |        3 |  20 |      3
30007 |        3 |  30 |      4
40001 |        4 |  40 |      1
40005 |        4 |  10 |      2
(11 rows)
```

# Fonctions de fenêtrage VAR\$1SAMP et VAR\$1POP
<a name="r_WF_VARIANCE"></a>

 Les fonctions de fenêtrage VAR\$1SAMP et VAR\$1POP renvoient la variance entre l’échantillon et la population d’un ensemble de valeurs numériques (nombre entier, décimale ou à virgule flottante). Consultez également [Fonctions VAR\$1SAMP et VAR\$1POP](r_VARIANCE_functions.md).

VAR\$1SAMP et VARIANCE sont des synonymes de la même fonction. 

## Syntaxe
<a name="r_WF_VARIANCE-synopsis"></a>

```
VAR_SAMP | VARIANCE | VAR_POP
( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## Arguments
<a name="r_WF_VARIANCE-arguments"></a>

 *expression*   
Colonne cible ou expression sur laquelle la fonction opère. 

ALL   
Avec l’argument ALL, la fonction conserve toutes les valeurs en double de l’expression. La valeur par défaut est ALL. DISTINCT n’est pas pris en charge.

OVER   
Spécifie les clauses de fenêtrage des fonctions d’agrégation. La clause OVER différencie les fonctions d’agrégation de fenêtrage des fonctions d’agrégation d’un ensemble normal.

PARTITION BY *expr\$1list*   
Définit la fenêtre de la fonction en termes d’une ou de plusieurs expressions. 

ORDER BY *order\$1list*   
Trie les lignes dans chaque partition. Si aucune clause PARTITION BY n’est spécifiée, ORDER BY utilise toute la table.

 *frame\$1clause*   
Si une clause ORDER BY est utilisée pour une fonction d’agrégation, une clause de cadre explicite est requise. La clause de cadre affine l’ensemble de lignes dans la fenêtre d’une fonction, en incluant ou en excluant des ensembles de lignes du résultat ordonné. La clause de cadre se compose du mot-clé ROWS et des spécificateurs associés. Consultez [Récapitulatif de la syntaxe de la fonction de fenêtrage](c_Window_functions.md#r_Window_function_synopsis).

## Types de données
<a name="c_Supported_data_types_wf_variance"></a>

Les types d’argument pris en charge par les fonctions VARIANCE sont SMALLINT, INTEGER, BIGINT, NUMERIC, DECIMAL, REAL et DOUBLE PRECISION.

Quel que soit le type de données de l’expression, le type de retour d’une fonction VARIANCE est un nombre double précision.

# Fonctions d’administration système
<a name="r_System_administration_functions"></a>

**Topics**
+ [CHANGE\$1QUERY\$1PRIORITY](r_CHANGE_QUERY_PRIORITY.md)
+ [CHANGE\$1SESSION\$1PRIORITY](r_CHANGE_SESSION_PRIORITY.md)
+ [CHANGE\$1USER\$1PRIORITY](r_CHANGE_USER_PRIORITY.md)
+ [CURRENT\$1SETTING](r_CURRENT_SETTING.md)
+ [PG\$1CANCEL\$1BACKEND](PG_CANCEL_BACKEND.md)
+ [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md)
+ [REBOOT\$1CLUSTER](r_REBOOT_CLUSTER.md)
+ [SET\$1CONFIG](r_SET_CONFIG.md)

Amazon Redshift prend en charge plusieurs fonctions d’administration système.

# CHANGE\$1QUERY\$1PRIORITY
<a name="r_CHANGE_QUERY_PRIORITY"></a>

CHANGE\$1QUERY\$1PRIORITY permet aux super-utilisateurs de modifier la priorité d’une requête en cours d’exécution ou en attente de gestion de la charge de travail (WLM).

Cette fonction permet aux super-utilisateurs de modifier immédiatement la priorité de n’importe quelle requête du système. Seul(e) une requête, un utilisateur ou une séance peut s’exécuter avec la priorité `CRITICAL`.

## Syntaxe
<a name="r_CHANGE_QUERY_PRIORITY-synopsis"></a>

```
CHANGE_QUERY_PRIORITY(query_id, priority)
```

## Arguments
<a name="r_CHANGE_QUERY_PRIORITY-argument"></a>

 *query\$1id*   
L’identificateur de requête de la requête dont la priorité a été modifiée. Nécessite une valeur `INTEGER`.

 *priority*   
La nouvelle priorité à attribuer à la requête. Cet argument doit être une chaîne précisant la valeur `CRITICAL`, `HIGHEST`, `HIGH`, `NORMAL`, `LOW` ou `LOWEST`. 

## Type de retour
<a name="r_CHANGE_QUERY_PRIORITY-return-type"></a>

Aucune

## Exemples
<a name="r_CHANGE_QUERY_PRIORITY-example"></a>

Pour montrer la colonne `query_priority` dans la table système STV\$1WLM\$1QUERY\$1STATE, utilisez l’exemple suivant.

```
SELECT query, service_class, query_priority, state 
FROM stv_wlm_query_state WHERE service_class = 101;

+-------+---------------+----------------+---------+
| query | service_class | query_priority |  state  |
+-------+---------------+----------------+---------+
|  1076 |           101 | Lowest         | Running |
|  1075 |           101 | Lowest         | Running |
+-------+---------------+----------------+---------+
```

Pour montrer les résultats d’un super-utilisateur exécutant la fonction `change_query_priority` pour modifier la priorité et la définir sur `CRITICAL`, utilisez l’exemple suivant.

```
SELECT CHANGE_QUERY_PRIORITY(1076, 'Critical');
            
+-------------------------------------------------------------------------------+
|                             change_query_priority                             |
+-------------------------------------------------------------------------------+
| Succeeded to change query priority. Priority changed from Lowest to Critical. |
+-------------------------------------------------------------------------------+
```

# CHANGE\$1SESSION\$1PRIORITY
<a name="r_CHANGE_SESSION_PRIORITY"></a>

CHANGE\$1SESSION\$1PRIORITY permet aux super-utilisateurs de modifier immédiatement la priorité de n’importe quelle séance du système. Seul(e) une séance, un utilisateur ou une requête peut s’exécuter avec la priorité `CRITICAL`.

## Syntaxe
<a name="r_CHANGE_SESSION_PRIORITY-synopsis"></a>

```
CHANGE_SESSION_PRIORITY(pid, priority)
```

## Arguments
<a name="r_CHANGE_SESSION_PRIORITY-argument"></a>

 *pid*   
L’identificateur de processus de la séance dont la priorité a été modifiée. La valeur `-1` fait référence à la séance actuelle. Nécessite une valeur `INTEGER`.

 *priority*   
La nouvelle priorité à attribuer à la séance. Cet argument doit être une chaîne précisant la valeur `CRITICAL`, `HIGHEST`, `HIGH`, `NORMAL`, `LOW` ou `LOWEST`. 

## Type de retour
<a name="r_CHANGE_SESSION_PRIORITY-return-type"></a>

Aucune

## Exemples
<a name="r_CHANGE_SESSION_PRIORITY-example"></a>

Pour renvoyer l’identificateur de processus du processus serveur gérant la session actuelle, utilisez l’exemple suivant.

```
SELECT pg_backend_pid();
               
+----------------+
| pg_backend_pid |
+----------------+
|          30311 |
+----------------+
```

Dans cet exemple, la priorité est modifiée pour être définie sur `LOWEST` pour la session actuelle.

```
SELECT CHANGE_SESSION_PRIORITY(30311, 'Lowest');
               
+---------------------------------------------------------------------------------------+
|                                change_session_priority                                |
+---------------------------------------------------------------------------------------+
| Succeeded to change session priority. Changed session (pid:30311) priority to lowest. |
+---------------------------------------------------------------------------------------+
```

Dans cet exemple, la priorité est modifiée pour être définie sur `HIGH` pour la session actuelle.

```
SELECT CHANGE_SESSION_PRIORITY(-1, 'High');

+-------------------------------------------------------------------------------------------------+
|                                     change_session_priority                                     |
+-------------------------------------------------------------------------------------------------+
| Succeeded to change session priority. Changed session (pid:30311) priority from lowest to high. |
+-------------------------------------------------------------------------------------------------+
```

Pour créer une procédure stockée qui modifie une priorité de session, utilisez l’exemple suivant. L’autorisation d’exécuter cette procédure stockée est accordée à l’utilisateur de base de données `test_user`.

```
CREATE OR REPLACE PROCEDURE sp_priority_low(pid IN int, result OUT varchar)
AS $$
BEGIN
  SELECT CHANGE_SESSION_PRIORITY(pid, 'low') into result;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
GRANT EXECUTE ON PROCEDURE sp_priority_low(int) TO test_user;
```

Ensuite, l’utilisateur de base de données nommé `test_user` appelle la procédure.

```
CALL sp_priority_low(pg_backend_pid()); 

+------------------------------------------------------+
|                        result                        |
+------------------------------------------------------+
| Success. Change session (pid:13155) priority to low. |
+------------------------------------------------------+
```

# CHANGE\$1USER\$1PRIORITY
<a name="r_CHANGE_USER_PRIORITY"></a>

CHANGE\$1SESSION\$1PRIORITY permet aux super-utilisateurs de modifier la priorité de toutes les requêtes émises par un utilisateur en cours d’exécution ou en attente de gestion de la charge de travail (WLM). Seul(e) un utilisateur, une séance ou une requête peut s’exécuter avec la priorité `CRITICAL`.

## Syntaxe
<a name="r_CHANGE_USER_PRIORITY-synopsis"></a>

```
CHANGE_USER_PRIORITY(user_name, priority)
```

## Arguments
<a name="r_CHANGE_USER_PRIORITY-argument"></a>

 *user\$1name*   
L’utilisateur de base de données dont la priorité de requête a été modifiée. 

 *priority*   
La nouvelle priorité à attribuer à toutes les requêtes émises par `user_name`. Cet argument doit être une chaîne avec la valeur `CRITICAL`, `HIGHEST`, `HIGH`, `NORMAL`, `LOW`, `LOWEST` ou `RESET`. Seuls les super-utilisateurs peuvent modifier la priorité et la définir sur `CRITICAL`. La modification de la priorité sur `RESET` supprime le paramètre de priorité pour `user_name`.

## Type de retour
<a name="r_CHANGE_USER_PRIORITY-return-type"></a>

Aucune

## Exemples
<a name="r_CHANGE_USER_PRIORITY-example"></a>

Pour modifier la priorité pour l’utilisateur `analysis_user` sur `LOWEST`, utilisez l’exemple suivant.

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'lowest');

+-------------------------------------------------------------------------------------+
|                                change_user_priority                                 |
+-------------------------------------------------------------------------------------+
| Succeeded to change user priority. Changed user (analysis_user) priority to lowest. |
+-------------------------------------------------------------------------------------+
```

Pour modifier la priorité sur `LOW`, utilisez l’exemple suivant.

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'low');

+----------------------------------------------------------------------------------------------+
|                                     change_user_priority                                     |
+----------------------------------------------------------------------------------------------+
| Succeeded to change user priority. Changed user (analysis_user) priority from Lowest to low. |
+----------------------------------------------------------------------------------------------+
```

Pour réinitialiser la priorité, utilisez l’exemple suivant.

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'reset');

+-------------------------------------------------------+
|                 change_user_priority                  |
+-------------------------------------------------------+
| Succeeded to reset priority for user (analysis_user). |
+-------------------------------------------------------+
```

# CURRENT\$1SETTING
<a name="r_CURRENT_SETTING"></a>

 CURRENT\$1SETTING renvoie la valeur actuelle du paramètre de configuration spécifié.

Cette fonction est équivalente à la commande [MONTRER](r_SHOW.md).

## Syntaxe
<a name="r_CURRENT_SETTING-synopsis"></a>

```
current_setting('parameter')
```

L’instruction suivante renvoie la valeur actuelle de la variable de contexte de session spécifiée.

```
current_setting('variable_name')
current_setting('variable_name'[, error_if_undefined])
```

## Arguments
<a name="r_CURRENT_SETTING-argument"></a>

 *paramètre*   
Valeur de paramètre à afficher. Pour obtenir la liste des paramètres de configuration, consultez [Référence de configuration](cm_chap_ConfigurationRef.md)

 *variable\$1name*   
Nom de la variable à afficher. Il doit s’agir d’une constante de type chaîne pour les variables de contexte de session.

 *error\$1if\$1undefined*   
(Facultatif) Valeur booléenne qui spécifie le comportement si le nom de la variable n’existe pas. Quand error\$1if\$1undefined est défini sur `TRUE`, sa valeur par défaut, Amazon Redshift génère une erreur. Quand error\$1if\$1undefined est défini sur `FALSE`, Amazon Redshift renvoie `NULL`. Amazon Redshift prend en charge le paramètre *error\$1if\$1undefined* uniquement pour les variables de contexte de session. Cette valeur ne peut pas être utilisée lorsque l’entrée est un paramètre de configuration.

## Type de retour
<a name="r_CURRENT_SETTING-return-type"></a>

Renvoie une chaîne `CHAR` ou `VARCHAR`.

## Exemples
<a name="r_CURRENT_SETTING-example"></a>

Pour renvoyer le paramètre actuel pour le paramètre `query_group`, utilisez l’exemple suivant.

```
SELECT CURRENT_SETTING('query_group');

+-----------------+
| current_setting |
+-----------------+
| unset           |
+-----------------+
```

Pour renvoyer le paramètre actuel pour la variable `app_context.user_id`, utilisez l’exemple suivant.

```
SELECT CURRENT_SETTING('app_context.user_id', FALSE);
```

# PG\$1CANCEL\$1BACKEND
<a name="PG_CANCEL_BACKEND"></a>

Annule une requête. PG\$1CANCEL\$1BACKEND équivaut à la commande [ANNULER](r_CANCEL.md). Vous pouvez annuler les requêtes exécutées simultanément par votre utilisateur. Les super-utilisateurs peuvent annuler n’importe quelle requête.

## Syntaxe
<a name="PG_CANCEL_BACKEND-synopsis"></a>

```
pg_cancel_backend( pid )
```

## Arguments
<a name="PG_CANCEL_BACKEND-arguments"></a>

 *pid*   
ID de processus (PID) de la requête à annuler. Vous ne pouvez pas annuler une requête en spécifiant un ID de requête ; vous devez spécifier l’ID de processus de la requête. Nécessite une valeur `INTEGER`.

## Type de retour
<a name="PG_CANCEL_BACKEND-return-type"></a>

Aucune

## Notes d’utilisation
<a name="PG_CANCEL_BACKEND-usage-notes"></a>

Si les requêtes de plusieurs séances détiennent des verrous sur la même table, vous pouvez utiliser la fonction [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md) pour mettre fin à l’une des séances, ce qui oblige toutes les transactions en cours d’exécution dans la séance terminée à libérer tous les verrous et à annuler la transaction. Interrogez la table de catalogue PG\$1\$1LOCKS afin d’afficher les verrous actuellement détenus. Si vous ne pouvez pas annuler une requête, car elle se trouve dans un bloc de transaction (BEGIN ... END), vous pouvez mettre fin à la séance dans laquelle s’exécute la requête à l’aide de la fonction PG\$1TERMINATE\$1BACKEND. 

## Exemples
<a name="PG_CANCEL_BACKEND-example"></a>

Pour annuler une requête en cours d’exécution, récupérez d’abord l’ID de processus de la requête que vous voulez annuler. Pour déterminer le processus IDs de toutes les requêtes en cours d'exécution, exécutez la commande suivante. 

```
SELECT pid, TRIM(starttime) AS start, 
duration, TRIM(user_name) AS user,
SUBSTRING(query,1,40) AS querytxt
FROM stv_recents
WHERE status = 'Running';

+-----+------------------------+----------+--------+-----------------------------+
| pid |       starttime        | duration |  user  |          querytxt           |
+-----+------------------------+----------+--------+-----------------------------+
| 802 | 2013-10-14 09:19:03.55 |      132 | dwuser | select venuename from venue |
| 834 | 2013-10-14 08:33:49.47 |  1250414 | dwuser | select * from listing;      |
| 964 | 2013-10-14 08:30:43.29 |   326179 | dwuser | select sellerid from sales  |
+-----+------------------------+----------+--------+-----------------------------+
```

Pour annuler la requête dotée de l’ID de processus 802, utilisez l’exemple suivant.

```
SELECT PG_CANCEL_BACKEND(802);
```

# PG\$1TERMINATE\$1BACKEND
<a name="PG_TERMINATE_BACKEND"></a>

Met fin à une séance. Vous pouvez mettre fin à une séance appartenant à votre utilisateur. Un super-utilisateur peut mettre fin à n’importe quelle séance.

## Syntaxe
<a name="PG_TERMINATE_BACKEND-synopsis"></a>

```
pg_terminate_backend( pid )
```

## Arguments
<a name="PG_TERMINATE_BACKEND-arguments"></a>

*pid*  
L’ID du processus de la séance pour être arrêté. Nécessite une valeur `INTEGER`.

## Type de retour
<a name="PG_TERMINATE_BACKEND-return-type"></a>

Aucune

## Notes d’utilisation
<a name="PG_TERMINATE_BACKEND-usage-notes"></a>

 Si vous êtes sur le point d’atteindre la limite de connexions simultanées, utilisez PG\$1TERMINATE\$1BACKEND pour mettre fin aux séances inactives et libérer les connexions. Pour plus d’informations, consultez [Limites d’Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html). 

Si les requêtes de plusieurs séances détiennent des verrous sur la même table, vous pouvez utiliser la fonction PG\$1TERMINATE\$1BACKEND pour mettre fin à l’une des séances, ce qui oblige toutes les transactions en cours d’exécution dans la séance terminée à libérer tous les verrous et à annuler la transaction. Interrogez la table de catalogue PG\$1LOCKS afin d’afficher les verrous actuellement détenus. 

Si une requête ne se trouve dans un bloc de transaction (BEGIN... END), vous pouvez annuler la requête à l’aide de la commande [ANNULER](r_CANCEL.md) ou de la fonction [PG\$1CANCEL\$1BACKEND](PG_CANCEL_BACKEND.md). 

## Exemples
<a name="PG_TERMINATE_BACKEND-example"></a>

Pour interroger la table SVV\$1TRANSACTIONS afin d’afficher tous les verrous en vigueur pour les transactions actuelles, utilisez l’exemple suivant.

```
SELECT * FROM svv_transactions;

+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
| txn_owner | txn_db |  xid  | pid  |      txn_start      |    lock_mode    | lockable_object_type | relation | granted |
+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |    51940 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |    52000 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |   108623 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | ExclusiveLock   | transactionid        |          | true    |
+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
```

Pour terminer la session détenant les verrous, utilisez l’exemple suivant.

```
SELECT PG_TERMINATE_BACKEND(8585); 
```

# REBOOT\$1CLUSTER
<a name="r_REBOOT_CLUSTER"></a>

Redémarrez le cluster Amazon Redshift sans fermer les connexions au cluster. Vous devez être un super-utilisateur de la base de données pour exécuter cette commande.

Une fois ce redémarrage logiciel terminé, le cluster Amazon Redshift renvoie une erreur à l’application utilisateur et demande à l’application utilisateur de soumettre à nouveau toutes les transactions ou requêtes interrompues par le redémarrage logiciel.

## Syntaxe
<a name="r_REBOOT_CLUSTER-synopsis"></a>

```
SELECT REBOOT_CLUSTER();
```

# SET\$1CONFIG
<a name="r_SET_CONFIG"></a>

Définit un paramètre de configuration sur un nouveau paramètre.

 Cette fonction est équivalente à la commande SET dans SQL.

## Syntaxe
<a name="r_SET_CONFIG-synopsis"></a>

```
SET_CONFIG('parameter', 'new_value' , is_local)
```

L’instruction suivante définit une variable de contexte de session sur un nouveau paramètre.

```
set_config('variable_name', 'new_value' , is_local)
```

## Arguments
<a name="r_SET_CONFIG-parameters"></a>

 *paramètre*   
Paramètre à définir.

 *variable\$1name*   
Nom de la variable à définir.

 *new\$1value*   
Nouvelle valeur du paramètre.

 *is\$1local*   
Si la valeur du paramètre est définie sur true, elle s’applique uniquement à la transaction en cours. Les valeurs valides sont `true` ou `1` et `false` ou `0`. 

## Type de retour
<a name="r_SET_CONFIG-return-type"></a>

Renvoie une chaîne `CHAR` ou `VARCHAR`.

## Exemples
<a name="r_SET_CONFIG-examples"></a>

Pour définir la valeur du paramètre `query_group` sur `test` pour la transaction en cours uniquement, utilisez l’exemple suivant. 

```
SELECT SET_CONFIG('query_group', 'test', true);

+------------+
| set_config |
+------------+
| test       |
+------------+
```

Pour définir des variables de contexte de session, utilisez l’exemple suivant. 

```
SELECT SET_CONFIG(‘app.username’, ‘cuddy’, FALSE);
```

# Fonctions d’informations système
<a name="r_System_information_functions"></a>

Amazon Redshift prend en charge de nombreuses fonctions d’informations système.

**Topics**
+ [ACTUEL\$1 AWS\$1ACCOUNT](r_CURRENT_AWS_ACCOUNT.md)
+ [CURRENT\$1DATABASE](r_CURRENT_DATABASE.md)
+ [CURRENT\$1NAMESPACE](r_CURRENT_NAMESPACE.md)
+ [CURRENT\$1SCHEMA](r_CURRENT_SCHEMA.md)
+ [CURRENT\$1SCHEMAS](r_CURRENT_SCHEMAS.md)
+ [CURRENT\$1SESSION\$1ARN](r_CURRENT_SESSION_ARN.md)
+ [CURRENT\$1USER](r_CURRENT_USER.md)
+ [CURRENT\$1USER\$1ID](r_CURRENT_USER_ID.md)
+ [DEFAULT\$1IAM\$1ROLE](r_DEFAULT_IAM_ROLE.md)
+ [GET\$1MOUNTED\$1ROLE](GET_MOUNTED_ROLE.md)
+ [HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md)
+ [HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md)
+ [HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md)
+ [HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md)
+ [LAST\$1USER\$1QUERY\$1ID](LAST_USER_QUERY_ID.md)
+ [PG\$1BACKEND\$1PID](PG_BACKEND_PID.md)
+ [PG\$1GET\$1COLS](PG_GET_COLS.md)
+ [PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md)
+ [PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md)
+ [PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS](PG_GET_LATE_BINDING_VIEW_COLS.md)
+ [PG\$1GET\$1SESSION\$1ROLES](PG_GET_SESSION_ROLES.md)
+ [PG\$1LAST\$1COPY\$1COUNT](PG_LAST_COPY_COUNT.md)
+ [PG\$1LAST\$1COPY\$1ID](PG_LAST_COPY_ID.md)
+ [PG\$1LAST\$1UNLOAD\$1ID](PG_LAST_UNLOAD_ID.md)
+ [PG\$1LAST\$1QUERY\$1ID](PG_LAST_QUERY_ID.md)
+ [PG\$1LAST\$1UNLOAD\$1COUNT](PG_LAST_UNLOAD_COUNT.md)
+ [Fonction SLICE\$1NUM](r_SLICE_NUM.md)
+ [USER](r_USER.md)
+ [ROLE\$1IS\$1MEMBER\$1OF](r_ROLE_IS_MEMBER_OF.md)
+ [USER\$1IS\$1MEMBER\$1OF](r_USER_IS_MEMBER_OF.md)
+ [VERSION](r_VERSION.md)

# ACTUEL\$1 AWS\$1ACCOUNT
<a name="r_CURRENT_AWS_ACCOUNT"></a>

Renvoie le AWS compte associé au cluster Amazon Redshift qui a soumis une requête.

## Syntaxe
<a name="r_CURRENT_AWS_ACCOUNT-synopsis"></a>

```
current_aws_account
```

## Type de retour
<a name="r_CURRENT_AWS_ACCOUNT-return-type"></a>

Renvoie un entier. 

## Exemple
<a name="r_CURRENT_AWS_ACCOUNT-example"></a>

La requête suivante renvoie le nom de la base de données actuelle. 

```
select user, current_aws_account; 
current_user | current_account
-------------+--------------- 
dwuser       | 987654321

(1 row)
```

# CURRENT\$1DATABASE
<a name="r_CURRENT_DATABASE"></a>

Renvoie le nom de la base de données à laquelle vous êtes actuellement connecté. 

## Syntaxe
<a name="r_CURRENT_DATABASE-synopsis"></a>

```
current_database()
```

## Type de retour
<a name="r_CURRENT_DATABASE-return-type"></a>

Renvoie une chaîne CHAR ou VARCHAR. 

## Exemple
<a name="r_CURRENT_DATABASE-example"></a>

La requête suivante renvoie le nom de la base de données actuelle. 

```
select current_database();

current_database
------------------
tickit
(1 row)
```

# CURRENT\$1NAMESPACE
<a name="r_CURRENT_NAMESPACE"></a>

Renvoie l’espace de noms du cluster Amazon Redshift actuel. L’espace de noms de cluster Amazon Redshift est l’ID unique du cluster Amazon Redshift.

## Syntaxe
<a name="r_CURRENT_NAMESPACE-synopsis"></a>

```
current_namespace
```

## Type de retour
<a name="r_CURRENT_NAMESPACE-return-type"></a>

Renvoie une chaîne CHAR ou VARCHAR. 

## Exemple
<a name="r_CURRENT_NAMESPACE-example"></a>

La requête suivante renvoie le nom de l’espace de noms actuel : 

```
select user, current_namespace; 
current_user | current_namespace
-------------+-------------------------------------
dwuser       | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8

(1 row)
```

# CURRENT\$1SCHEMA
<a name="r_CURRENT_SCHEMA"></a>

Renvoie le nom du schéma devant le chemin de recherche. Ce schéma sera utilisé pour les tables ou autres objets nommés qui sont créés sans spécifier de schéma cible. 

## Syntaxe
<a name="r_CURRENT_SCHEMA-synopsis"></a>

**Note**  
Il s’agit d’une fonction de nœud principal. Cette fonction renvoie une erreur si elle fait référence à une table créée par l’utilisateur, à une table système STL ou STV ou à une vue système SVV ou SVL.

```
current_schema()
```

## Type de retour
<a name="r_CURRENT_SCHEMA-return-type"></a>

CURRENT\$1SCHEMA renvoie une chaîne CHAR ou VARCHAR. 

## Exemples
<a name="r_CURRENT_SCHEMA-examples"></a>

La requête suivante renvoie le schéma actuel : 

```
select current_schema();

current_schema
----------------
public
(1 row)
```

# CURRENT\$1SCHEMAS
<a name="r_CURRENT_SCHEMAS"></a>

Renvoie un tableau des noms de n’importe quel schéma dans le chemin d’accès actuel. Le chemin de recherche actuelle est défini dans le paramètre search\$1path. 

## Syntaxe
<a name="r_CURRENT_SCHEMAS-synopsis"></a>

**Note**  
Il s’agit d’une fonction de nœud principal. Cette fonction renvoie une erreur si elle fait référence à une table créée par l’utilisateur, à une table système STL ou STV ou à une vue système SVV ou SVL.

```
current_schemas(include_implicit)
```

## Argument
<a name="r_CURRENT_SCHEMAS-argument"></a>

 *include\$1implicit*   
Si la valeur est définie sur true, indique que le chemin de recherche doit inclure des schémas de système inclus implicitement. Les valeurs valides sont `true` et `false`. Généralement, s’il est défini sur `true`, ce paramètre renvoie le schéma `pg_catalog` en plus du schéma actuel. 

## Type de retour
<a name="r_CURRENT_SCHEMAS-return-type"></a>

Renvoie une chaîne CHAR ou VARCHAR. 

## Exemples
<a name="r_CURRENT_SCHEMAS-examples"></a>

L’exemple suivant renvoie les noms des schémas dans le chemin de recherche actuel, sans inclure implicitement les schémas de système : 

```
select current_schemas(false);

current_schemas
-----------------
{public}
(1 row)
```

L’exemple suivant renvoie les noms des schémas dans le chemin de recherche actuel, en incluant implicitement les schémas de système : 

```
select current_schemas(true);

current_schemas
---------------------
{pg_catalog,public}
(1 row)
```

# CURRENT\$1SESSION\$1ARN
<a name="r_CURRENT_SESSION_ARN"></a>

Renvoie l’ARN de l’utilisateur global actuellement autorisé. Les utilisateurs globaux se présentent avec la même identité sur les comptes Redshift, les clusters et les groupes de travail sans serveur. Les utilisateurs globaux se connectent via le centre d’identité IAM ou via l’authentification de session basée sur IAM. Les utilisateurs du lac de données sont des utilisateurs AWS globaux. 

Cette fonction est généralement utilisée dans le contexte de l'utilisation de vues multidialectes AWS Glue . Pour plus d’informations sur la gestion des identités avec IAM Identity Center et Redshift, consultez [Connexion de Redshift à IAM Identity Center pour offrir aux utilisateurs une expérience d’authentification unique](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html). Pour plus d'informations sur les vues Glue multidialectes, [créez des vues dans le catalogue de AWS Glue données](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).

## Syntaxe
<a name="r_CURRENT_SESSION_ARN-synopsis"></a>

```
current_session_arn()
```

## Type de retour
<a name="r_CURRENT_SESSION_ARN-return-type"></a>

Renvoie une chaîne VARCHAR de l’utilisateur authentifié globalement ou une valeur null.

## Notes d’utilisation
<a name="r_CURRENT_SESSION_ARN-usage"></a>

Les utilisateurs locaux ne sont pas pris en charge et entraînent une réponse null.

## Exemple
<a name="r_CURRENT_SESSION_ARN-example"></a>

La requête suivante renvoie le nom de la session ARN actuelle : 

```
SELECT current_session_arn();

current_session_arn
--------------
arn:aws:iam::123456789012:user/user
(1 row)
```

# CURRENT\$1USER
<a name="r_CURRENT_USER"></a>

Renvoie le nom de l’utilisateur actuel de la base de données qui s’applique à la vérification des autorisations. Généralement, ce nom d’utilisateur sera identique à celui de l’utilisateur de la séance. Toutefois, cela peut parfois être modifié par les super-utilisateurs. 

**Note**  
N’utilisez pas de parenthèses de fin lorsque vous appelez CURRENT\$1USER. 

## Syntaxe
<a name="r_CURRENT_USER-synopsis"></a>

```
current_user
```

## Type de retour
<a name="r_CURRENT_USER-return-type"></a>

CURRENT\$1USER renvoie un type de données NAME et peut être converti en chaîne CHAR ou VARCHAR. 

## Notes d’utilisation
<a name="r_CURRENT_USER-usage"></a>

Si une procédure stockée a été créée à l’aide de l’option SECURITY DEFINER de la commande CREATE\$1PROCEDURE, lors de l’appel de la fonction CURRENT\$1USER depuis la procédure stockée, Amazon Redshift renvoie le nom d’utilisateur du propriétaire de la procédure stockée.

## Exemple
<a name="r_CURRENT_USER-example"></a>

La requête suivante renvoie le nom de l’utilisateur de la base de données actuelle : 

```
select current_user;

current_user
--------------
dwuser
(1 row)
```

# CURRENT\$1USER\$1ID
<a name="r_CURRENT_USER_ID"></a>

Renvoie l’identifiant unique de l’utilisateur Amazon Redshift connecté à la séance en cours.

## Syntaxe
<a name="r_CURRENT_USER_ID-synopsis"></a>

```
CURRENT_USER_ID
```

## Type de retour
<a name="r_CURRENT_USER_ID-return-type"></a>

La fonction CURRENT\$1USER\$1ID renvoie un nombre entier. 

## Exemples
<a name="r_CURRENT_USER_ID-examples"></a>

L’exemple suivant renvoie le nom d’utilisateur et l’ID de l’utilisateur actuel de cette séance : 

```
select user, current_user_id;

 current_user | current_user_id
--------------+-----------------
   dwuser     |               1
(1 row)
```

# DEFAULT\$1IAM\$1ROLE
<a name="r_DEFAULT_IAM_ROLE"></a>

Renvoie le rôle IAM par défaut actuellement associé au cluster Amazon Redshift. La fonction ne renvoie rien si aucun rôle IAM par défaut n’est associé. 

## Syntaxe
<a name="r_DEFAULT_IAM_ROLE-synopsis"></a>

```
select default_iam_role();
```

## Type de retour
<a name="r_DEFAULT_IAM_ROLE-return-type"></a>

Renvoie une chaîne VARCHAR. 

## Exemple
<a name="r_DEFAULT_IAM_ROLE-example"></a>

L’exemple suivant renvoie le rôle IAM par défaut actuellement associé au cluster Amazon Redshift spécifié, 

```
select default_iam_role();
              default_iam_role
-----------------------------------------------
 arn:aws:iam::123456789012:role/myRedshiftRole
(1 row)
```

# GET\$1MOUNTED\$1ROLE
<a name="GET_MOUNTED_ROLE"></a>

 Lorsqu'elle est invoquée dans le cadre d'une AWS Glue vue multidialectale, elle permet de renvoyer le rôle IAM utilisé pour monter le schéma ou la base de données de Lake Formation. Multidialecte signifie que le SQL est pris en charge par plusieurs moteurs de requêtes, tels qu’Amazon EMR et Redshift. Pour plus d'informations sur les vues Glue multidialectes, voir [Création de vues dans le catalogue de AWS Glue données](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html).



## Syntaxe
<a name="GET_MOUNTED_ROLE-synopsis"></a>

```
get_mounted_role()
```

## Type de retour
<a name="GET_MOUNTED_ROLE-return-type"></a>

Renvoie une chaîne VARCHAR ou une valeur null.

## Notes d’utilisation
<a name="GET_MOUNTED_ROLE-usage"></a>

Cette fonction renvoie la valeur null pour tout cas d’utilisation en dehors d’une vue externe Lake Formation.

## Exemple
<a name="GET_MOUNTED_ROLE-example"></a>

La requête suivante renvoie l’identité pour monter la ressource Lake Formation.

```
CREATE EXTERNAL PROTECTED VIEW external_schema.remote_view AS 
SELECT mycol, get_mounted_role() FROM external_schema.remote_table;

mycol | get_mounted_role
----------------------------
1       arn:aws:iam::123456789012:role/salesrole
(1 row)
```

# HAS\$1ASSUMEROLE\$1PRIVILEGE
<a name="r_HAS_ASSUMEROLE_PRIVILEGE"></a>

Renvoie la valeur booléenne `true` (`t`) si l’utilisateur a le rôle IAM spécifié avec le privilège d’exécuter la commande spécifiée. La fonction renvoie `false` (`f`) si l’utilisateur n’a pas le rôle IAM spécifié avec le privilège d’exécuter la commande spécifiée. Pour plus d’informations sur les privilèges, consultez [GRANT](r_GRANT.md). 

## Syntaxe
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-synopsis"></a>

```
has_assumerole_privilege( [ user, ] iam_role_arn, cmd_type)
```

## Arguments
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-arguments"></a>

 *user*   
Nom de l’utilisateur pour vérifier les privilèges du rôle IAM. Le comportement par défaut consiste à vérifier l’utilisateur actuel. Les super-utilisateurs et les utilisateurs peuvent utiliser cette fonction. Toutefois, les utilisateurs ne peuvent afficher que leurs propres privilèges.

 *iam\$1role\$1arn*   
Rôle IAM auquel les privilèges de commande ont été accordés. 

 *cmd\$1type*   
Commande pour laquelle l’accès a été accordé. Les valeurs possibles sont les suivantes :   
+ COPY
+ UNLOAD
+ EXTERNAL FUNCTION
+ CREATE MODEL

## Type de retour
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-return-type"></a>

BOOLEAN

## Exemple
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-example"></a>

La requête suivante confirme que l’utilisateur `reg_user1` a le privilège pour le rôle `Redshift-S3-Read` d’exécuter la commande COPY.

```
select has_assumerole_privilege('reg_user1', 'arn:aws:iam::123456789012:role/Redshift-S3-Read', 'copy');
```

```
has_assumerole_privilege
------------------------
true
(1 row)
```

# HAS\$1DATABASE\$1PRIVILEGE
<a name="r_HAS_DATABASE_PRIVILEGE"></a>

Renvoie la valeur `true` si le privilège est spécifié pour l’utilisateur pour la base de données spécifiée. Pour plus d’informations sur les privilèges, consultez [GRANT](r_GRANT.md). 

## Syntaxe
<a name="r_HAS_DATABASE_PRIVILEGE-synopsis"></a>

**Note**  
Il s’agit d’une fonction de nœud principal. Cette fonction renvoie une erreur si elle fait référence à une table créée par l’utilisateur, à une table système STL ou STV ou à une vue système SVV ou SVL.

```
has_database_privilege( [ user, ] database, privilege)
```

## Arguments
<a name="r_HAS_DATABASE_PRIVILEGE-arguments"></a>

 *user*   
Nom de l’utilisateur pour vérifier les privilèges de base de données. Le comportement par défaut consiste à vérifier l’utilisateur actuel. 

 *database*   
Base de données associée au privilège. 

 *privilege*   
Privilège à vérifier. Les valeurs possibles sont les suivantes :   
+ CREATE
+ TEMPORARY
+ TEMP

## Type de retour
<a name="r_HAS_DATABASE_PRIVILEGE-return-type"></a>

Renvoie une chaîne CHAR ou VARCHAR. 

## Exemple
<a name="r_HAS_DATABASE_PRIVILEGE-example"></a>

La requête suivante confirme que l’utilisateur GUEST dispose du privilège TEMP sur la base de données TICKIT.

```
select has_database_privilege('guest', 'tickit', 'temp');

has_database_privilege
------------------------
true
(1 row)
```

# HAS\$1SCHEMA\$1PRIVILEGE
<a name="r_HAS_SCHEMA_PRIVILEGE"></a>

Renvoie la valeur `true` si le privilège est spécifié pour l’utilisateur pour le schéma spécifié. Pour plus d’informations sur les privilèges, consultez [GRANT](r_GRANT.md).

## Syntaxe
<a name="r_HAS_SCHEMA_PRIVILEGE-synopsis"></a>

**Note**  
Il s’agit d’une fonction de nœud principal. Cette fonction renvoie une erreur si elle fait référence à une table créée par l’utilisateur, à une table système STL ou STV ou à une vue système SVV ou SVL.

```
has_schema_privilege( [ user, ] schema, privilege)
```

## Arguments
<a name="r_HAS_SCHEMA_PRIVILEGE-arguments"></a>

 *user*   
Nom de l’utilisateur pour vérifier les privilèges de schéma. Le comportement par défaut consiste à vérifier l’utilisateur actuel. 

 *schéma*   
Schéma associé au privilège. 

 *privilege*   
Privilège à vérifier. Les valeurs possibles sont les suivantes :   
+ CREATE
+ USAGE
+ ALTER
+ DROP

## Type de retour
<a name="r_HAS_SCHEMA_PRIVILEGE-return-type"></a>

Renvoie une chaîne CHAR ou VARCHAR. 

## Exemple
<a name="r_HAS_SCHEMA_PRIVILEGE-example"></a>

La requête suivante confirme que l’utilisateur GUEST dispose du privilège CREATE concernant le schéma PUBLIC : 

```
select has_schema_privilege('guest', 'public', 'create');

has_schema_privilege
----------------------
true
(1 row)
```

# HAS\$1TABLE\$1PRIVILEGE
<a name="r_HAS_TABLE_PRIVILEGE"></a>

Renvoie `true` si l’utilisateur dispose du privilège spécifié pour la table indiquée et renvoie `false` dans le cas inverse.

## Syntaxe
<a name="r_HAS_TABLE_PRIVILEGE-synopsis"></a>

**Note**  
Il s’agit d’une fonction de nœud principal. Cette fonction renvoie une erreur si elle fait référence à une table créée par l’utilisateur, à une table système STL ou STV ou à une vue système SVV ou SVL. Pour plus d’informations sur les privilèges, consultez [GRANT](r_GRANT.md).

```
has_table_privilege( [ user, ] table, privilege)
```

## Arguments
<a name="r_HAS_TABLE_PRIVILEGE-arguments"></a>

 *user*   
Nom de l’utilisateur pour vérifier les privilèges de table. Le comportement par défaut consiste à vérifier l’utilisateur actuel. 

 *table*   
Table associée au privilège. 

 *privilege*   
Privilège à vérifier. Les valeurs possibles sont les suivantes :   
+ SELECT
+ INSERT
+ UPDATE
+ DELETE
+ DROP
+ REFERENCES

## Type de retour
<a name="r_HAS_TABLE_PRIVILEGE-return-type"></a>

BOOLEAN

## Exemples
<a name="r_HAS_TABLE_PRIVILEGE-examples"></a>

La requête suivante trouve que l’utilisateur GUEST ne dispose pas du privilège SELECT sur la table LISTING. 

```
select has_table_privilege('guest', 'listing', 'select');

has_table_privilege
---------------------
false
```

La requête suivante répertorie les privilèges des tables, notamment les privilèges de sélection, d’insertion, de mise à jour et de suppression, en utilisant les résultats des tables de catalogue pg\$1tables et pg\$1user. Il s’agit uniquement d’un exemple. Il se peut que vous deviez spécifier un nom de schéma et des noms de tables à partir de votre base de données. Pour plus d’informations, consultez [Interrogation des tables catalogue](c_join_PG.md).

```
SELECT 
     tablename
     ,usename
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del
FROM
(SELECT * from pg_tables
WHERE schemaname = 'public' and tablename in ('event','listing')) as tables
,(SELECT * FROM pg_user) AS users;

tablename | usename   |  sel   |  ins  |  upd  | del
----------+-----------+--------+-------+-------+-------
event     |  john     |  true  | true  | true  | true	
event     |  sally    |  false | false | false | false	
event     |  elsa     |  false | false | false | false	
listing   |  john     |  true  | true  | true  | true	
listing   |  sally    |  false | false | false | false	
listing   |  elsa     |  false | false | false | false
```

La requête précédente contient également une jointure croisée. Pour plus d’informations, consultez [Exemples de clause JOIN](r_Join_examples.md). Pour interroger des tables qui ne se trouvent pas dans la schéma `public`, retirez la condition `schemaname` de la clause WHERE et utilisez l’exemple suivant avant d’exécuter votre requête.

```
SET SEARCH_PATH to 'schema_name';
```

# LAST\$1USER\$1QUERY\$1ID
<a name="LAST_USER_QUERY_ID"></a>

Renvoie l’ID de la requête d’utilisateur exécutée le plus récemment au cours de la session en cours. Si aucune requête n’a été exécutée dans la session en cours, last\$1user\$1query\$1id renvoie -1. La fonction ne renvoie pas l’ID de requête pour les requêtes qui s’exécutent exclusivement sur le nœud principal. Pour plus d’informations, consultez [Fonctions exécutées uniquement sur le nœud principal](c_SQL_functions_leader_node_only.md).

## Syntaxe
<a name="LAST_USER_QUERY_ID-synopsis"></a>

```
last_user_query_id()
```

## Type de retour
<a name="LAST_USER_QUERY_ID-return-type"></a>

Renvoie un entier. 

## Exemple
<a name="LAST_USER_QUERY_ID-example"></a>

La requête suivante renvoie l’ID de la dernière requête exécutée par un utilisateur dans la session en cours. 

```
select last_user_query_id();
```

Voici les résultats.

```
last_user_query_id
-----------------------
    5437
(1 row)
```

La requête suivante renvoie l’ID de la requête et le texte de la requête exécutée le plus récemment par un utilisateur dans la session en cours.

```
select query_id, query_text from sys_query_history where query_id = last_user_query_id();
```

Voici les résultats.

```
 query_id, query_text
---------+-------------------------------------------------------------------------------------------------------------
 5556975 | select last_user_query_id() limit 100 --RequestID=<unique request ID>; TraceID=<unique trace ID>
```

# PG\$1BACKEND\$1PID
<a name="PG_BACKEND_PID"></a>

Renvoie l’ID de processus (PID) du processus serveur gérant la séance actuelle.

**Note**  
Le PID n’est pas unique au monde. Il peut être réutilisé au fil du temps.

## Syntaxe
<a name="PG_BACKEND_PID-synopsis"></a>

```
pg_backend_pid()
```

## Type de retour
<a name="PG_BACKEND_PID-return-type"></a>

Renvoie un entier.

## Exemple
<a name="PG_BACKEND_PID-example"></a>

Vous pouvez faire coïncider PG\$1BACKEND\$1PID avec des tables de journal afin de récupérer des informations pour la séance en cours. Par exemple, la requête suivante renvoie l’ID de requête et une partie du texte de la requête pour des requêtes exécutées dans la séance en cours.

```
select query, substring(text,1,40)
from stl_querytext
where pid =  PG_BACKEND_PID()
order by query desc;

 query |                substring
-------+------------------------------------------
 14831 | select query, substring(text,1,40) from
 14827 | select query, substring(path,0,80) as pa
 14826 | copy category from 's3://dw-tickit/manif
 14825 | Count rows in target table
 14824 | unload ('select * from category') to 's3
(5 rows)
```

Vous pouvez faire coïncider PG\$1BACKEND\$1PID avec la colonne de pid dans les tables de journal suivantes (les exceptions sont entre parenthèses) :
+ [STL\$1CONNECTION\$1LOG](r_STL_CONNECTION_LOG.md)
+ [STL\$1DDLTEXT](r_STL_DDLTEXT.md)
+ [STL\$1ERROR](r_STL_ERROR.md)
+ [STL\$1QUERY](r_STL_QUERY.md)
+ [STL\$1QUERYTEXT](r_STL_QUERYTEXT.md)
+ [STL\$1SESSIONS](r_STL_SESSIONS.md) (process)
+ [STL\$1TR\$1CONFLICT](r_STL_TR_CONFLICT.md)
+ [STL\$1UTILITYTEXT](r_STL_UTILITYTEXT.md)
+ [STV\$1ACTIVE\$1CURSORS](r_STV_ACTIVE_CURSORS.md)
+ [STV\$1INFLIGHT](r_STV_INFLIGHT.md)
+ [STV\$1LOCKS](r_STV_LOCKS.md) (lock\$1owner\$1pid)
+ [STV\$1RECENTS](r_STV_RECENTS.md) (process\$1id)

# PG\$1GET\$1COLS
<a name="PG_GET_COLS"></a>

Renvoie les métadonnées de colonne pour une table ou une définition de vue.

## Syntaxe
<a name="PG_GET_COLS-synopsis"></a>

```
pg_get_cols('name')
```

## Arguments
<a name="PG_GET_COLS-arguments"></a>

 *nom*   
Nom de la table ou vue Amazon Redshift. Pour plus d’informations, consultez [Noms et identificateurs](r_names.md).

## Type de retour
<a name="PG_GET_COLS-return-type"></a>

VARCHAR 

## Notes d’utilisation
<a name="PG_GET_COLS-usage-notes"></a>

La fonction PG\$1GET\$1COLS renvoie une ligne par colonne dans la table ou la définition de vue. La ligne contient une liste séparée par des virgules contenant le nom du schéma, le nom de la relation, le nom de la colonne, le type de données et le numéro de la colonne. Le formatage du résultat du SQL dépend du client SQL utilisé.

## Exemples
<a name="PG_GET_COLS-example"></a>

Les exemples suivants renvoient les résultats d’une vue nommée `SALES_VW` dans le schéma `public` et d’une table nommée `sales` dans le schéma `mytickit1` créés par l’utilisateur dans la base de données connectée `dev`.

L’exemple suivant renvoie les métadonnées de colonne d’une vue appelée `SALES_VW`.

```
select pg_get_cols('sales_vw');

pg_get_cols                                                
-----------------------------------------------------------
(public,sales_vw,salesid,integer,1)                        
(public,sales_vw,listid,integer,2)                         
(public,sales_vw,sellerid,integer,3)                       
(public,sales_vw,buyerid,integer,4)                        
(public,sales_vw,eventid,integer,5)                        
(public,sales_vw,dateid,smallint,6)                        
(public,sales_vw,qtysold,smallint,7)                       
(public,sales_vw,pricepaid,"numeric(8,2)",8)               
(public,sales_vw,commission,"numeric(8,2)",9)              
(public,sales_vw,saletime,"timestamp without time zone",10)
```

L’exemple suivant renvoie les métadonnées de colonne de la vue `SALES_VW` dans un format de table.

```
select * from pg_get_cols('sales_vw') 
cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);

view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
public      | sales_vw  | salesid    | integer                     |       1
public      | sales_vw  | listid     | integer                     |       2
public      | sales_vw  | sellerid   | integer                     |       3
public      | sales_vw  | buyerid    | integer                     |       4
public      | sales_vw  | eventid    | integer                     |       5
public      | sales_vw  | dateid     | smallint                    |       6
public      | sales_vw  | qtysold    | smallint                    |       7
public      | sales_vw  | pricepaid  | numeric(8,2)                |       8
public      | sales_vw  | commission | numeric(8,2)                |       9
public      | sales_vw  | saletime   | timestamp without time zone |      10
```

L’exemple suivant renvoie les métadonnées de colonne de la table `SALES` dans le schéma `mytickit1` dans un format de table.

```
select * from pg_get_cols('"mytickit1"."sales"') 
cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);

view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
mytickit1   | sales     | salesid    | integer                     |       1
mytickit1   | sales     | listid     | integer                     |       2
mytickit1   | sales     | sellerid   | integer                     |       3
mytickit1   | sales     | buyerid    | integer                     |       4
mytickit1   | sales     | eventid    | integer                     |       5
mytickit1   | sales     | dateid     | smallint                    |       6
mytickit1   | sales     | qtysold    | smallint                    |       7
mytickit1   | sales     | pricepaid  | numeric(8,2)                |       8
mytickit1   | sales     | commission | numeric(8,2)                |       9
mytickit1   | sales     | saletime   | timestamp without time zone |      10
```

# PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE
<a name="PG_GET_GRANTEE_BY_IAMROLE"></a>

Renvoie tous les utilisateurs et groupes auxquels un rôle IAM spécifié est attribué.

## Syntaxe
<a name="PG_GET_GRANTEE_BY_IAMROLE-synopsis"></a>

```
pg_get_grantee_by_iam_role('iam_role_arn')
```

## Arguments
<a name="PG_GET_GRANTEE_BY_IAMROLE-arguments"></a>

 *iam\$1role\$1arn*   
Rôle IAM pour lequel renvoyer les utilisateurs et les groupes auxquels ce rôle a été attribué.

## Type de retour
<a name="PG_GET_GRANTEE_BY_IAMROLE-return-type"></a>

VARCHAR 

## Notes d’utilisation
<a name="PG_GET_GRANTEE_BY_IAMROLE-usage-notes"></a>

La fonction PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE renvoie une ligne pour chaque utilisateur ou groupe. Chaque ligne contient le nom du bénéficiaire, le type de bénéficiaire et le privilège accordé. Les valeurs possibles pour le type de bénéficiaire sont `p` pour le public, `u` pour l’utilisateur et `g` pour le groupe. 

Vous devez être un super-utilisateur pour utiliser cette fonction.

## Exemple
<a name="PG_GET_GRANTEE_BY_IAMROLE-example"></a>

L’exemple suivant indique que le rôle IAM `Redshift-S3-Write` est accordé à `group1` et `reg_user1`. Les utilisateurs dans `group_1` peuvent spécifier le rôle uniquement pour les opérations COPY, et l’utilisateur `reg_user1` peut spécifier le rôle uniquement pour effectuer des opérations UNLOAD.

```
select pg_get_grantee_by_iam_role('arn:aws:iam::123456789012:role/Redshift-S3-Write');
```

```
  pg_get_grantee_by_iam_role
-----------------------------
 (group_1,g,COPY)
 (reg_user1,u,UNLOAD)
```

L’exemple suivant de la fonction PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE met en forme le résultat sous la forme d’une table.

```
select grantee, grantee_type, cmd_type FROM pg_get_grantee_by_iam_role('arn:aws:iam::123456789012:role/Redshift-S3-Write') res_grantee(grantee text, grantee_type text, cmd_type text) ORDER BY 1,2,3;
```

```
  grantee  | grantee_type | cmd_type
-----------+--------------+----------
 group_1   | g            | COPY
 reg_user1 | u            | UNLOAD
```

# PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER
<a name="PG_GET_IAM_ROLE_BY_USER"></a>

Renvoie tous les rôles IAM et les privilèges de commande accordés à un utilisateur.

## Syntaxe
<a name="PG_GET_IAM_ROLE_BY_USER-synopsis"></a>

```
pg_get_iam_role_by_user('name')
```

## Arguments
<a name="PG_GET_IAM_ROLE_BY_USER-arguments"></a>

 *nom*   
Nom de l’utilisateur pour lequel renvoyer les rôles IAM.

## Type de retour
<a name="PG_GET_IAM_ROLE_BY_USER-return-type"></a>

VARCHAR 

## Notes d’utilisation
<a name="PG_GET_IAM_ROLE_BY_USER-usage-notes"></a>

La fonction PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER renvoie une ligne pour chaque ensemble de rôles et de privilèges de commande. La ligne contient une liste séparée par des virgules composée du nom d’utilisateur, du rôle IAM et de la commande. 

La valeur `default` dans le résultat indique que l’utilisateur peut spécifier n’importe quel rôle disponible pour exécuter la commande affichée.

Vous devez être un super-utilisateur pour utiliser cette fonction.

## Exemple
<a name="PG_GET_IAM_ROLE_BY_USER-example"></a>

L’exemple suivant indique que l’utilisateur `reg_user1` peut spécifier n’importe quel rôle IAM disponible pour effectuer des opérations COPY. L’utilisateur peut également spécifier le rôle `Redshift-S3-Write` pour les opérations UNLOAD.

```
select pg_get_iam_role_by_user('reg_user1');
```

```
                             pg_get_iam_role_by_user
---------------------------------------------------------------------------------
 (reg_user1,default,COPY)
 (reg_user1,arn:aws:iam::123456789012:role/Redshift-S3-Write,COPY|UNLOAD)
```

L’exemple suivant de la fonction PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER met en forme le résultat sous la forme d’une table.

```
select username, iam_role, cmd FROM pg_get_iam_role_by_user('reg_user1') res_iam_role(username text, iam_role text, cmd text);
```

```
 username  |                    iam_role                     | cmd
-----------+-------------------------------------------------+------
 reg_user1 | default                                         | None
 reg_user1 | arn:aws:iam::123456789012:role/Redshift-S3-Read | COPY
```

# PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS
<a name="PG_GET_LATE_BINDING_VIEW_COLS"></a>

Renvoie les métadonnées de colonne de toutes les vues à liaison tardive de la base de données. Pour plus d'informations, consultez [Vues à liaison tardive](r_CREATE_VIEW.md#r_CREATE_VIEW_late-binding-views)

## Syntaxe
<a name="PG_GET_LATE_BINDING_VIEW_COLS-synopsis"></a>

```
pg_get_late_binding_view_cols()
```

## Type de retour
<a name="PG_GET_LATE_BINDING_VIEW_COLS-return-type"></a>

VARCHAR 

## Notes d’utilisation
<a name="PG_GET_LATE_BINDING_VIEW_COLS-usage-notes"></a>

La fonction `PG_GET_LATE_BINDING_VIEW_COLS` renvoie une ligne pour chaque colonne des vues à liaison tardive. La ligne contient une liste séparée par des virgules contenant le nom du schéma, le nom de la relation, le nom de la colonne, le type de données et le numéro de la colonne.

## Exemple
<a name="PG_GET_LATE_BINDING_VIEW_COLS-example"></a>

L’exemple suivant renvoie les métadonnées de colonne de toutes les vues à liaison tardive.

```
select pg_get_late_binding_view_cols();

pg_get_late_binding_view_cols                               
------------------------------------------------------------
(public,myevent,eventname,"character varying(200)",1)       
(public,sales_lbv,salesid,integer,1)                        
(public,sales_lbv,listid,integer,2)                         
(public,sales_lbv,sellerid,integer,3)                       
(public,sales_lbv,buyerid,integer,4)                        
(public,sales_lbv,eventid,integer,5)                        
(public,sales_lbv,dateid,smallint,6)                        
(public,sales_lbv,qtysold,smallint,7)                       
(public,sales_lbv,pricepaid,"numeric(8,2)",8)               
(public,sales_lbv,commission,"numeric(8,2)",9)              
(public,sales_lbv,saletime,"timestamp without time zone",10)
(public,event_lbv,eventid,integer,1)                        
(public,event_lbv,venueid,smallint,2)                       
(public,event_lbv,catid,smallint,3)                         
(public,event_lbv,dateid,smallint,4)                        
(public,event_lbv,eventname,"character varying(200)",5)     
(public,event_lbv,starttime,"timestamp without time zone",6)
```

L’exemple suivant renvoie les métadonnées de colonne de toutes les vues à liaison tardive dans un format de tableau.

```
select * from pg_get_late_binding_view_cols() cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);
view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
public      | sales_lbv | salesid    | integer                     |       1
public      | sales_lbv | listid     | integer                     |       2
public      | sales_lbv | sellerid   | integer                     |       3
public      | sales_lbv | buyerid    | integer                     |       4
public      | sales_lbv | eventid    | integer                     |       5
public      | sales_lbv | dateid     | smallint                    |       6
public      | sales_lbv | qtysold    | smallint                    |       7
public      | sales_lbv | pricepaid  | numeric(8,2)                |       8
public      | sales_lbv | commission | numeric(8,2)                |       9
public      | sales_lbv | saletime   | timestamp without time zone |      10
public      | event_lbv | eventid    | integer                     |       1
public      | event_lbv | venueid    | smallint                    |       2
public      | event_lbv | catid      | smallint                    |       3
public      | event_lbv | dateid     | smallint                    |       4
public      | event_lbv | eventname  | character varying(200)      |       5
public      | event_lbv | starttime  | timestamp without time zone |       6
```

# PG\$1GET\$1SESSION\$1ROLES
<a name="PG_GET_SESSION_ROLES"></a>

Renvoie les rôles de session de l’utilisateur actuellement connecté. Les rôles de session d’un utilisateur sont les groupes définis par un fournisseur d’identité (IdP) pour l’utilisateur connecté. Par exemple, un fournisseur d’identité (IdP) tel que [Microsoft Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/services/active-directory/) vérifie l’identité de l’utilisateur et fournit tous les groupes externes auxquels l’utilisateur appartient pendant le processus de connexion de l’utilisateur. Ces groupes externes sont transformés en rôles Amazon Redshift et sont disponibles pendant la session en cours. Ces rôles sont appelés rôles de session. Un administrateur peut accorder des privilèges à un rôle de session de la même façon qu’aux autres rôles Amazon Redshift. Pour plus d’informations sur l’utilisation des rôles, consultez [Contrôle d’accès basé sur les rôles (RBAC)](t_Roles.md). Pour obtenir des informations sur la gestion des identités auprès d’un fournisseur d’identité (IdP), consultez [Fédération de fournisseurs d’identité natifs pour Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html) dans le *Guide de gestion Amazon Redshift*.

Pour voir les rôles définis dans le catalogue Amazon Redshift, interrogez la vue système [SVV\$1ROLES](r_SVV_ROLES.md).

## Syntaxe
<a name="PG_GET_LATE_BINDING_VIEW_COLS-synopsis"></a>

```
pg_get_session_roles()
```

## Type de retour
<a name="PG_GET_SESSION_ROLES-return-type"></a>

Ensemble de lignes composé de deux valeurs. La première valeur comporte deux parties séparées par deux points (:) et contient `idp-namespace:role-name`. `idp-namespace` est l’espace de noms du fournisseur d’identité (IdP). `role-name` est le nom du groupe externe figurant dans le fournisseur d’identité (IdP). La deuxième valeur contient un `role-id` qui est l’identifiant du rôle.

## Notes d’utilisation
<a name="PG_GET_SESSION_ROLES-usage-notes"></a>

La fonction `PG_GET_SESSION_ROLES` renvoie une ligne pour chaque rôle de session renvoyé.

## Exemples
<a name="PG_GET_SESSION_ROLES-example"></a>

L’exemple suivant renvoie une ligne pour chaque rôle à partir du fournisseur d’identité Azure Active Directory. Les colonnes renvoyées sont converties en `sess_roles` avec des colonnes `name` et `roleid`. Chaque `name` se compose de l’espace de noms Azure Active Directory et d’un nom de groupe dans Azure Active Directory.

```
SELECT * FROM pg_get_session_roles() AS sess_roles(name name, roleid integer);

name                  roleid
--------------------------------
my_aad:test_group_1   106204
my_aad:test_group_2   106205
my_aad:test_group_3   106206
my_aad:test_group_4   106207
my_aad:test_group_5   106208
```

L’exemple suivant renvoie une ligne pour chaque groupe IAM dont l’utilisateur IAM actuellement connecté est membre. Les colonnes renvoyées sont converties en `sess_roles` avec des colonnes `name` et `roleid`. Chaque `name` se compose de l’espace de noms IAM et du nom du groupe IAM.

```
SELECT * FROM pg_get_session_roles() AS sess_roles(name name, roleid integer);

name                  roleid
--------------------------------
IAM:myGroup           110332
```

# PG\$1LAST\$1COPY\$1COUNT
<a name="PG_LAST_COPY_COUNT"></a>

Renvoie le nombre de lignes qui ont été chargées par la dernière commande COPY exécutée au cours de la séance actuelle. PG\$1LAST\$1COPY\$1COUNT est mis à jour avec le dernier ID de COPY, qui est l’ID de la requête de la commande COPY ayant commencé le processus de chargement, même en cas d’échec de la charge. L’ID de requête et l’ID de COPY sont mis à jour lorsque la commande COPY commence le processus de chargement. 

Si la commande COPY échoue en raison d’une erreur de syntaxe ou de privilèges insuffisants, l’ID de COPY n’est pas mis à jour et PG\$1LAST\$1COPY\$1COUNT renvoie le nombre de la commande COPY précédente. Si aucune commande COPY n’a été exécutée dans la séance en cours, ou en cas d’échec de la dernière commande COPY pendant le chargement, PG\$1LAST\$1COPY\$1COUNT renvoie 0. Pour plus d'informations, consultez [PG\$1LAST\$1COPY\$1ID](PG_LAST_COPY_ID.md). 

## Syntaxe
<a name="PG_LAST_COPY_COUNT-synopsis"></a>

```
pg_last_copy_count()
```

## Type de retour
<a name="PG_LAST_COPY_COUNT-return-type"></a>

Renvoie BIGINT.

## Exemple
<a name="PG_LAST_COPY_COUNT-example"></a>

La requête suivante renvoie le nombre de lignes chargées par la dernière commande COPY dans la séance en cours.

```
select pg_last_copy_count();

pg_last_copy_count
--------------------
             192497
(1 row)
```

# PG\$1LAST\$1COPY\$1ID
<a name="PG_LAST_COPY_ID"></a>

Renvoie l’ID de requête de la commande COPY exécutée le plus récemment au cours de la séance actuelle. Si aucune commande COPY n’a été exécutée dans la séance en cours, PG\$1LAST\$1COPY\$1ID renvoie -1. 

 La valeur de PG\$1LAST\$1COPY\$1ID est mise à jour lorsque la commande COPY commence le processus de chargement. Si la commande COPY échoue en raison de données de chargement non valides, l’ID de COPY est mise à jour, vous pouvez donc utiliser PG\$1LAST\$1COPY\$1ID lorsque vous interrogez la table STL\$1LOAD\$1ERRORS. Si la transaction COPY est annulée, l’ID de COPY n’est pas mis à jour. 

L’ID de COPY n’est pas mis à jour si la commande COPY échoue en raison d’une erreur qui se produit avant que le processus de chargement commence, par exemple une erreur de syntaxe, une erreur d’accès, des informations d’identification non valides ou des privilèges insuffisants. L’ID de COPY n’est pas mis à jour en cas d’échec de COPY au cours de l’étape de compression d’analyse, qui commence après une connexion réussie, mais avant la charge des données.

## Syntaxe
<a name="PG_LAST_COPY_ID-synopsis"></a>

```
pg_last_copy_id()
```

## Type de retour
<a name="PG_LAST_COPY_ID-return-type"></a>

Renvoie un entier.

## Exemple
<a name="PG_LAST_COPY_ID-example"></a>

La requête suivante renvoie l’ID de requête de la dernière commande COPY dans la séance en cours.

```
select pg_last_copy_id();

pg_last_copy_id
---------------
          5437
(1 row)
```

La requête suivante joint STL\$1LOAD\$1ERRORS à STL\$1LOADERROR\$1DETAIL pour afficher les erreurs détaillées qui se sont produites pendant la charge la plus récente de la séance en cours :

```
select d.query, substring(d.filename,14,20), 
d.line_number as line, 
substring(d.value,1,16) as value,
substring(le.err_reason,1,48) as err_reason
from stl_loaderror_detail d, stl_load_errors le
where d.query = le.query
and d.query = pg_last_copy_id(); 

 query |    substring      | line |  value   |                    err_reason
-------+-------------------+------+----------+-------------------------------------------------
    558| allusers_pipe.txt |  251 | 251      | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | ZRU29FGR | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | Kaitlin  | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | Walter   | String contains invalid or unsupported UTF8 code
```

# PG\$1LAST\$1UNLOAD\$1ID
<a name="PG_LAST_UNLOAD_ID"></a>

Renvoie l’ID de requête de la commande UNLOAD exécutée le plus récemment dans la séance en cours. Si aucune commande UNLOAD n’a été exécutée dans la séance en cours, PG\$1LAST\$1UNLOAD\$1ID renvoie -1. 

 La valeur de PG\$1LAST\$1UNLOAD\$1ID est mise à jour lorsque la commande UNLOAD commence le processus de chargement. Si la commande UNLOAD échoue en raison de données de chargement non valides, l’ID UNLOAD est mis à jour de sorte que vous pouvez l’utiliser pour des recherches ultérieures. Si la transaction UNLOAD est annulée, l’ID UNLOAD n’est pas mis à jour. 

L’ID UNLOAD n’est pas mis à jour si la commande UNLOAD échoue en raison d’une erreur qui se produit avant que le processus de chargement commence, par exemple une erreur de syntaxe, une erreur d’accès, des informations d’identification non valides ou des privilèges insuffisants. 

## Syntaxe
<a name="PG_LAST_UNLOAD_ID-synopsis"></a>

```
PG_LAST_UNLOAD_ID()
```

## Type de retour
<a name="PG_LAST_UNLOAD_ID-return-type"></a>

Renvoie un entier.

## Exemple
<a name="PG_LAST_UNLOAD_ID-example"></a>

La requête suivante renvoie l’ID de requête de la dernière commande UNLOAD dans la séance en cours.

```
select PG_LAST_UNLOAD_ID();

PG_LAST_UNLOAD_ID
---------------
          5437
(1 row)
```

# PG\$1LAST\$1QUERY\$1ID
<a name="PG_LAST_QUERY_ID"></a>

Renvoie l'ID de la requête exécutée le plus récemment au cours de la séance actuelle. Si aucune requête n’a été exécutée dans la séance en cours, PG\$1LAST\$1QUERY\$1ID renvoie -1. PG\$1LAST\$1QUERY\$1ID ne renvoie pas l’ID de requête pour les requêtes qui s’exécutent exclusivement sur le nœud principal. Pour plus d'informations, consultez [Fonctions exécutées uniquement sur le nœud principal](c_SQL_functions_leader_node_only.md).

## Syntaxe
<a name="PG_LAST_QUERY_ID-synopsis"></a>

```
pg_last_query_id()
```

## Type de retour
<a name="PG_LAST_QUERY_ID-return-type"></a>

Renvoie un entier. 

## Exemple
<a name="PG_LAST_QUERY_ID-example"></a>

La requête suivante renvoie l’ID de la dernière requête exécutée dans la séance en cours. 

```
select pg_last_query_id();
```

Voici les résultats.

```
pg_last_query_id
----------------
           5437
(1 row)
```

La requête suivante renvoie l’ID de la requête et le texte de la requête exécutée le plus récemment dans la séance en cours.

```
select query, trim(querytxt) as sqlquery
from stl_query
where query = pg_last_query_id();
```

Voici les résultats.

```
query | sqlquery
------+--------------------------------------------------
 5437 | select name, loadtime from stl_file_scan where loadtime > 1000000;
(1 rows)
```

# PG\$1LAST\$1UNLOAD\$1COUNT
<a name="PG_LAST_UNLOAD_COUNT"></a>

Renvoie le nombre de lignes qui ont été déchargées par la dernière commande UNLOAD exécutée au cours de la séance actuelle. PG\$1LAST\$1UNLOAD\$1COUNT est mis à jour avec l’ID de requête de la dernière commande UNLOAD, même si l’opération a échoué. L’ID de requête est mis à jour lorsque la commande UNLOAD est exécutée. Si UNLOAD échoue en raison d’une erreur de syntaxe ou de privilèges insuffisants, PG\$1LAST\$1UNLOAD\$1COUNT renvoie le nombre de la commande UNLOAD précédente. Si aucune commande UNLOAD na été exécutée dans la séance en cours, ou en cas d’échec de la dernière commande UNLOAD pendant l’opération de déchargement, PG\$1LAST\$1UNLOAD\$1COUNT renvoie 0. 

## Syntaxe
<a name="PG_LAST_UNLOAD_COUNT-synopsis"></a>

```
pg_last_unload_count()
```

## Type de retour
<a name="PG_LAST_UNLOAD_COUNT-return-type"></a>

Renvoie BIGINT.

## Exemple
<a name="PG_LAST_UNLOAD_COUNT-example"></a>

La requête suivante renvoie le nombre de lignes déchargées par la dernière commande UNLOAD dans la séance en cours.

```
select pg_last_unload_count();

pg_last_unload_count
--------------------
             192497
(1 row)
```

# Fonction SLICE\$1NUM
<a name="r_SLICE_NUM"></a>

Renvoie un nombre entier correspondant au nombre de tranches dans le cluster où se trouvent les données d’une ligne. SLICE\$1NUM ne prend aucun paramètre. 

## Syntaxe
<a name="r_SLICE_NUM-syntax"></a>

```
SLICE_NUM()
```

## Type de retour
<a name="r_SLICE_NUM-return-type"></a>

La fonction SLICE\$1NUM renvoie un nombre entier. 

## Exemples
<a name="r_SLICE_NUM-examples"></a>

L’exemple suivant illustre les tranches contenant des données pour les dix premières lignes EVENT de la table EVENTS : 

```
select distinct eventid, slice_num() from event order by eventid limit 10;

 eventid | slice_num
---------+-----------
       1 |         1
       2 |         2
       3 |         3
       4 |         0
       5 |         1
       6 |         2
       7 |         3
       8 |         0
       9 |         1
      10 |         2
(10 rows)
```

L’exemple suivant renvoie un code (10000) pour illustrer qu’une requête sans instruction FROM s’exécute sur le nœud principal : 

```
select slice_num();
slice_num
-----------
10000
(1 row)
```

# USER
<a name="r_USER"></a>

Synonyme de CURRENT\$1USER. Consultez [CURRENT\$1USER](r_CURRENT_USER.md). 

# ROLE\$1IS\$1MEMBER\$1OF
<a name="r_ROLE_IS_MEMBER_OF"></a>

Renvoie la valeur true si le rôle est membre d’un autre rôle. Les super-utilisateurs peuvent vérifier l’appartenance de tous les rôles. Les utilisateurs standard disposant de l’autorisation ACCESS SYSTEM TABLE peuvent vérifier l’appartenance de tous les utilisateurs. Dans le cas contraire, les utilisateurs standard ne peuvent vérifier que les rôles auxquels ils ont accès. Amazon Redshift provoque une erreur si les rôles fournis n’existent pas ou si l’utilisateur actuel n’a pas accès au rôle.

**Considérations relatives au partage des données**

Lorsqu'un cluster de consommateurs interroge un objet partagé qui fait référence à cette fonction, tel qu'une vue, une politique RLS ou une politique DDM, la fonction évalue en fonction du contexte de sécurité du cluster de consommateurs. Les utilisateurs locaux, les rôles et les appartenances aux groupes du consommateur déterminent le résultat, et non ceux définis sur le cluster de producteurs. Si vous avez l'intention d'appliquer le même contexte d'autorisations que celui mis en œuvre sur le producteur, assurez-vous que les noms de rôle, les noms de groupe et les appartenances d'utilisateurs correspondants existent sur le cluster de consommateurs et correspondent à ceux du producteur.

## Syntaxe
<a name="r_ROLE_IS_MEMBER_OF-synopsis"></a>

```
role_is_member_of( role_name,  granted_role_name)
```

## Arguments
<a name="r_ROLE_IS_MEMBER_OF-arguments"></a>

 *role\$1name*   
Nom du rôle.

 *granted\$1role\$1name*   
Nom du rôle accordé.

## Type de retour
<a name="r_ROLE_IS_MEMBER_OF-return-type"></a>

Renvoie une valeur BOOLÉENNE.

## Exemple
<a name="r_ROLE_IS_MEMBER_OF-example"></a>

La requête suivante confirme que le rôle n’est pas membre de role1 ou de role2.

```
SELECT role_is_member_of('role1', 'role2');

 role_is_member_of
-------------------
             False
```

# USER\$1IS\$1MEMBER\$1OF
<a name="r_USER_IS_MEMBER_OF"></a>

**Important**  
À compter du 16 février 2026, Amazon Redshift ne prendra plus en charge l’utilisation de `user_is_member_of` et des fonctions associées permettant d’accéder aux informations relatives aux utilisateurs, aux rôles ou aux groupes des consommateurs via l’unité de partage des données.

Renvoie la valeur true si l’utilisateur est membre d’un groupe ou rôle. Les super-utilisateurs peuvent vérifier l’appartenance de tous les utilisateurs. Les utilisateurs standard membres du rôle sys:secadmin ou sys:superuser peuvent vérifier l’appartenance de tous les utilisateurs. Dans le cas contraire, les utilisateurs standard peuvent uniquement se vérifier eux-mêmes. Amazon Redshift envoie une erreur si les identités fournies n’existent pas ou si l’utilisateur actuel n’a pas accès au rôle.

**Considérations relatives au partage des données**

Lorsqu'un cluster de consommateurs interroge un objet partagé qui fait référence à cette fonction, tel qu'une vue, une politique RLS ou une politique DDM, la fonction évalue en fonction du contexte de sécurité du cluster de consommateurs. Les utilisateurs locaux, les rôles et les appartenances aux groupes du consommateur déterminent le résultat, et non ceux définis sur le cluster de producteurs. Si vous avez l'intention d'appliquer le même contexte d'autorisations que celui mis en œuvre sur le producteur, assurez-vous que les noms de rôle, les noms de groupe et les appartenances d'utilisateurs correspondants existent sur le cluster de consommateurs et correspondent à ceux du producteur.

## Syntaxe
<a name="r_USER_IS_MEMBER_OF-synopsis"></a>

```
user_is_member_of( user_name,  role_name | group_name)
```

## Arguments
<a name="r_USER_IS_MEMBER_OF-arguments"></a>

 *user\$1name*   
Le nom de l’utilisateur.

 *role\$1name*   
Nom du rôle.

 *nom\$1groupe*   
Nom du groupe.

## Type de retour
<a name="r_USER_IS_MEMBER_OF-return-type"></a>

Renvoie une valeur BOOLÉENNE.

## Exemple
<a name="r_USER_IS_MEMBER_OF-example"></a>

La requête suivante confirme que l’utilisateur n’est pas membre de role1.

```
SELECT user_is_member_of('reguser', 'role1');

 user_is_member_of
-------------------
           False
```

# VERSION
<a name="r_VERSION"></a>

 La fonction VERSION renvoie les détails relatifs à la version actuellement installée, avec des informations de version Amazon Redshift spécifiques à la fin. 

**Note**  
Il s’agit d’une fonction de nœud principal. Cette fonction renvoie une erreur si elle fait référence à une table créée par l’utilisateur, à une table système STL ou STV ou à une vue système SVV ou SVL.

## Syntaxe
<a name="r_VERSION-synopsis"></a>

```
VERSION()
```

## Type de retour
<a name="r_VERSION-return-type"></a>

Renvoie une chaîne CHAR ou VARCHAR. 

## Exemples
<a name="r_VERSION-examples"></a>

L’exemple suivant montre les informations de version du cluster actif : 

```
select version();
```

```
 version
 ------------------------------------------------------------------------------------------------------------------------               
 PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.12103
```

Où `1.0.12103` est le numéro de version du cluster. 

**Note**  
Pour forcer la mise à jour de votre cluster vers la dernière version disponible, modifiez votre [fenêtre de maintenance](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows). 

# Mots réservés
<a name="r_pg_keywords"></a>

La liste suivante recense les mots réservés Amazon Redshift. Vous pouvez utiliser les mots réservés avec des identificateurs délimités (guillemets doubles).

**Note**  
Bien que START et CONNECT ne soient pas des mots réservés, utilisez des identificateurs délimités ou AS si vous utilisez START et CONNECT comme alias de table dans votre requête afin d'éviter tout échec à l'exécution.

Pour de plus amples informations, consultez [Noms et identificateurs](r_names.md). 

```
AES128
AES256
ALL
ALLOWOVERWRITE
ANALYSE
ANALYZE
AND
ANY
ARRAY
AS
ASC
AUTHORIZATION
AZ64
BACKUP
BETWEEN
BINARY
BLANKSASNULL
BOTH
BYTEDICT
BZIP2
CASE
CAST
CHECK
COLLATE
COLUMN
CONSTRAINT
CREATE
CREDENTIALS
CROSS
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
CURRENT_USER_ID
DEFAULT
DEFERRABLE
DEFLATE
DEFRAG
DELTA
DELTA32K
DESC
DISABLE
DISTINCT
DO
ELSE
EMPTYASNULL
ENABLE
ENCODE
ENCRYPT     
ENCRYPTION
END
EXCEPT
EXPLICIT
FALSE
FOR
FOREIGN
FREEZE
FROM
FULL
GLOBALDICT256
GLOBALDICT64K
GRANT
GROUP
GZIP
HAVING
IDENTITY
IGNORE
ILIKE
IN
INITIALLY
INNER
INTERSECT
INTERVAL
INTO
IS
ISNULL
JOIN
LEADING
LEFT
LIKE
LIMIT
LOCALTIME
LOCALTIMESTAMP
LUN
LUNS
LZO
LZOP
MINUS
MOSTLY16
MOSTLY32
MOSTLY8
NATURAL
NEW
NOT
NOTNULL
NULL
NULLS
OFF
OFFLINE
OFFSET
OID
OLD
ON
ONLY
OPEN
OR
ORDER
OUTER
OVERLAPS
PARALLEL
PARTITION
PERCENT
PERMISSIONS
PIVOT
PLACING
PRIMARY
RAW
READRATIO
RECOVER
REFERENCES
REJECTLOG
RESORT
RESPECT
RESTORE
RIGHT
SELECT
SESSION_USER
SIMILAR
SNAPSHOT 
SOME
SYSDATE
SYSTEM
TABLE
TAG
TDES
TEXT255
TEXT32K
THEN
TIMESTAMP
TO
TOP
TRAILING
TRUE
TRUNCATECOLUMNS
UNION
UNIQUE
UNNEST
UNPIVOT
USER
USING
VERBOSE
WALLET
WHEN
WHERE
WITH
WITHOUT
```