

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.

# Fonctionnalités et optimisations de la programmation des scripts ETL AWS Glue pour Spark
<a name="aws-glue-programming-general"></a>

Les sections suivantes décrivent les techniques et les valeurs qui s'appliquent généralement à la programmation ETL (extraction, transformation et chargement) AWS Glue pour Spark quel que soit le langage.

**Topics**
+ [

# Types et options de connexion pour ETL dans AWS Glue pour Spark
](aws-glue-programming-etl-connect.md)
+ [

# Options de format pour les entrées et sorties dans AWS Glue pour Spark
](aws-glue-programming-etl-format.md)
+ [

# AWS Support de Glue Data Catalog pour les tâches Spark SQL
](aws-glue-programming-etl-glue-data-catalog-hive.md)
+ [

# Utilisation des marque-pages de tâche
](programming-etl-connect-bookmarks.md)
+ [

# Utilisation de la détection des données sensibles en dehors de AWS Glue Studio
](aws-glue-api-sensitive-data-example.md)
+ [

# API Visual Job AWS Glue
](visual-job-api-chapter.md)

# Types et options de connexion pour ETL dans AWS Glue pour Spark
<a name="aws-glue-programming-etl-connect"></a>

Dans AWS Glue Spark, diverses méthodes PySpark et transformations Scala spécifient le type de connexion à l'aide d'un `connectionType` paramètre. Ils spécifient des options de connexion à l'aide d'un paramètre `connectionOptions` ou `options`.

Le paramètre `connectionType` peut prendre les valeurs indiquées dans le tableau suivant. Les valeurs de paramètre associées `connectionOptions` (ou `options`) pour chaque type sont documentées dans les sections suivantes. Sauf indication contraire, les paramètres s'appliquent lorsque la connexion est utilisée comme source ou comme collecteur.

Pour obtenir un exemple de code qui illustre le paramétrage et l’utilisation des options de connexion, consultez la page d’accueil de chaque type de connexion.


| `connectionType` | Se connecte à | 
| --- | --- | 
| [dynamodb](aws-glue-programming-etl-connect-dynamodb-home.md) | Base de données [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/) | 
| [kinesis](aws-glue-programming-etl-connect-kinesis-home.md) | [Amazon Kinesis Data Streams](https://docs.aws.amazon.com/streams/latest/dev/introduction.html) | 
| [s3](aws-glue-programming-etl-connect-s3-home.md) | [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/) | 
| [documentdb](aws-glue-programming-etl-connect-documentdb-home.md#aws-glue-programming-etl-connect-documentdb) | Base de données [Amazon DocumentDB (compatible avec MongoDB)](https://docs.aws.amazon.com/documentdb/latest/developerguide/) | 
| [openSearch](aws-glue-programming-etl-connect-opensearch-home.md) | [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/). | 
| [redshift](aws-glue-programming-etl-connect-redshift-home.md) | Base de données [Amazon Redshift](https://aws.amazon.com/redshift/) | 
| [kafka](aws-glue-programming-etl-connect-kafka-home.md) |  [Kafka](https://kafka.apache.org/) ou [Amazon Managed Streaming for Apache Kafka](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html) | 
| [azurecosmos](aws-glue-programming-etl-connect-azurecosmos-home.md) | Azure Cosmos pour NoSQL. | 
| [azuresql](aws-glue-programming-etl-connect-azuresql-home.md) | Azure SQL. | 
| [bigquery](aws-glue-programming-etl-connect-bigquery-home.md) | Google BigQuery. | 
| [mongodb](aws-glue-programming-etl-connect-mongodb-home.md) | Base de données [MongoDB](https://www.mongodb.com/what-is-mongodb), y compris MongoDB Atlas. | 
| [sqlserver](aws-glue-programming-etl-connect-jdbc-home.md) |  Base de données Microsoft SQL Server (consultez [Connexions JDBC](aws-glue-programming-etl-connect-jdbc-home.md)) | 
| [mysql](aws-glue-programming-etl-connect-jdbc-home.md) | Base de données [MySQL](https://www.mysql.com/) (consultez [Connexions JDBC](aws-glue-programming-etl-connect-jdbc-home.md)) | 
| [oracle](aws-glue-programming-etl-connect-jdbc-home.md) | Base de données [Oracle](https://www.oracle.com/database/) (consultez [Connexions JDBC](aws-glue-programming-etl-connect-jdbc-home.md)) | 
| [postgresql](aws-glue-programming-etl-connect-jdbc-home.md) |  Base de données [PostgreSQL](https://www.postgresql.org/) (consultez [Connexions JDBC](aws-glue-programming-etl-connect-jdbc-home.md)) | 
| [saphana](aws-glue-programming-etl-connect-saphana-home.md) | SAP HANA. | 
| [snowflake](aws-glue-programming-etl-connect-snowflake-home.md) | Lac de données [Snowflake](https://www.snowflake.com/) | 
| [teradata](aws-glue-programming-etl-connect-teradata-home.md) | Teradata Vantage. | 
| [vertica](aws-glue-programming-etl-connect-vertica-home.md) | Vertica. | 
| [personnalisé.\$1](#aws-glue-programming-etl-connect-market) | Magasins de données Spark, Athena ou JDBC (voir [Valeurs personnalisées et AWS Marketplace ConnectionType](#aws-glue-programming-etl-connect-market)  | 
| [marketplace.\$1](#aws-glue-programming-etl-connect-market) | Magasins de données Spark, Athena ou JDBC (voir [Valeurs personnalisées et AWS Marketplace ConnectionType](#aws-glue-programming-etl-connect-market))  | 

# Connexions DynamoDB
<a name="aws-glue-programming-etl-connect-dynamodb-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables de DynamoDB dans Glue. AWS Vous vous connectez à DynamoDB à l'aide des autorisations IAM associées à votre tâche Glue. AWS AWS Glueprend en charge l'écriture de données dans la table DynamoDB d'un autre AWS compte. Pour de plus amples informations, veuillez consulter [Accès entre régions et entre comptes aux tables DynamoDB](aws-glue-programming-etl-dynamo-db-cross-account.md).

Le connecteur DynamoDB d'origine utilise des objets DynamicFrame Glue pour travailler avec les données extraites de DynamoDB. AWS Glue 5.0\$1 introduit une nouveauté [Connecteur DynamoDB avec prise en charge de Spark DataFrame](aws-glue-programming-etl-connect-dynamodb-dataframe-support.md) qui fournit le support natif de Spark DataFrame .

[Outre le connecteur AWS Glue DynamoDB ETL, vous pouvez lire depuis DynamoDB à l'aide du connecteur d'exportation DynamoDB, qui appelle une demande DynamoDB et la stocke dans un emplacement Amazon `ExportTableToPointInTime` S3 que vous fournissez, au format DynamoDB JSON.](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataExport.Output.html) AWS Gluecrée ensuite un DynamicFrame objet en lisant les données depuis le site d'exportation Amazon S3.

Le dispositif d’écriture DynamoDB est disponible dans la version 1.0 ou les versions ultérieures de AWS Glue. Le dispositif de connecteur d’exportation DynamoDB AWS Glue est disponible dans la version 2.0 ou les versions ultérieures d’AWS Glue. Le nouveau connecteur DataFrame DynamoDB est disponible dans la version 5.0 ou les versions ultérieures de AWS Glue.

Pour plus d’informations sur DynamoDB, consultez la [documentation Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/).

**Note**  
Le lecteur ETL DynamoDB ne prend pas en charge les filtres ou les prédicats pushdown.

## Configuration de connexions DynamoDB
<a name="aws-glue-programming-etl-connect-dynamodb-configure"></a>

Pour vous connecter à DynamoDB AWS depuis Glue, accordez au rôle IAM associé à AWS votre tâche Glue l'autorisation d'interagir avec DynamoDB. Pour plus d’informations sur les autorisations requises pour lire ou écrire à partir de DynamoDB, consultez [Actions, ressources et clés de condition pour DynamoDB](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazondynamodb.html) dans la documentation IAM.

Dans les situations suivantes, vous autre peut-être besoin d’une configuration supplémentaire :
+ Lorsque vous utilisez le connecteur d’exportation DynamoDB, vous devez configurer IAM pour que votre tâche puisse demander des exportations de tables DynamoDB. En outre, vous devrez identifier un compartiment Amazon S3 pour l'exportation et fournir les autorisations appropriées dans IAM pour que DynamoDB puisse y écrire, et pour que votre tâche AWS Glue puisse y lire. Pour plus d’informations, consultez [Demande d’exportation de table dans DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/S3DataExport_Requesting.html).
+ Si votre tâche AWS Glue comporte des exigences de connectivité Amazon VPC spécifiques, utilisez le type de connexion `NETWORK` AWS Glue pour fournir des options réseau. L'accès à DynamoDB étant autorisé par IAM, il n'est pas nécessaire de recourir à un type de connexion AWS Glue DynamoDB.

## Lecture et écriture dans DynamoDB
<a name="aws-glue-programming-etl-connect-dynamodb-read-write"></a>

Les exemples de code suivants montrent comment lire et écrire des tables DynamoDB. Ils montrent la lecture d'une table et l'écriture dans une autre table.

------
#### [ Python ]

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

dyf = glue_context.create_dynamic_frame.from_options(
    connection_type="dynamodb",
    connection_options={"dynamodb.input.tableName": test_source,
        "dynamodb.throughput.read.percent": "1.0",
        "dynamodb.splits": "100"
    }
)
print(dyf.getNumPartitions())

glue_context.write_dynamic_frame_from_options(
    frame=dyf,
    connection_type="dynamodb",
    connection_options={"dynamodb.output.tableName": test_sink,
        "dynamodb.throughput.write.percent": "1.0"
    }
)

job.commit()
```

------
#### [ Scala ]

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamoDbDataSink
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._


object GlueApp {

  def main(sysArgs: Array[String]): Unit = {
    val glueContext = new GlueContext(SparkContext.getOrCreate())
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType = "dynamodb",
      options = JsonOptions(Map(
        "dynamodb.input.tableName" -> test_source,
        "dynamodb.throughput.read.percent" -> "1.0",
        "dynamodb.splits" -> "100"
      ))
    ).getDynamicFrame()
    
    print(dynamicFrame.getNumPartitions())

    val dynamoDbSink: DynamoDbDataSink =  glueContext.getSinkWithFormat(
      connectionType = "dynamodb",
      options = JsonOptions(Map(
        "dynamodb.output.tableName" -> test_sink,
        "dynamodb.throughput.write.percent" -> "1.0"
      ))
    ).asInstanceOf[DynamoDbDataSink]
    
    dynamoDbSink.writeDynamicFrame(dynamicFrame)

    Job.commit()
  }

}
```

------

## Utilisation du connecteur d’exportation DynamoDB
<a name="aws-glue-programming-etl-connect-dynamodb-export-connector"></a>

Le connecteur d'exportation fonctionne mieux que le connecteur ETL lorsque la taille de la table DynamoDB est supérieure à 80 Go. En outre, étant donné que la demande d'exportation est effectuée en dehors des processus Spark dans une tâche AWS Glue, vous pouvez activer [l'auto scaling des tâches AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/auto-scaling.html) pour enregistrer l'utilisation du DPU pendant la demande d'exportation. Avec le connecteur d'exportation, vous n'avez pas non plus besoin de configurer le nombre de fractionnements pour le parallélisme de l'exécuteur Spark ou le pourcentage de lecture du débit DynamoDB.

**Note**  
DynamoDB a des exigences spécifiques pour recourir aux demandes `ExportTableToPointInTime`. Pour plus d'informations, consultez [Demande d'exportation de table dans DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataExport.Requesting.html). Par exemple, Point-in-Time-Restore (PITR) doit être activé sur la table pour utiliser ce connecteur. Le connecteur DynamoDB prend également en charge le AWS KMS chiffrement pour les exportations DynamoDB vers Amazon S3. La saisie de votre configuration de sécurité dans la configuration de la tâche AWS Glue active AWS KMS le chiffrement pour une exportation DynamoDB. La clé KMS doit être située dans la même région que le compartiment Simple Storage Service (Amazon S3).  
Notez que des frais supplémentaires pour l'exportation DynamoDB et les coûts de stockage Simple Storage Service (Amazon S3) s'appliquent. Les données exportées dans Simple Storage Service (Amazon S3) sont conservées une fois l'exécution d'une tâche terminée, ce qui vous permet de les réutiliser sans exportations DynamoDB supplémentaires. L'une des conditions requises pour utiliser ce connecteur est que point-in-time la restauration (PITR) soit activée pour la table.  
Le connecteur ETL DynamoDB ou le connecteur d'exportation ne prennent pas en charge les filtres ou les prédicats pushdown à appliquer à la source DynamoDB.

Les exemples de code suivants montrent comment lire (via le connecteur d'exportation) et comment imprimer le nombre de partitions.

------
#### [ Python ]

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

dyf = glue_context.create_dynamic_frame.from_options(
    connection_type="dynamodb",
    connection_options={
        "dynamodb.export": "ddb",
        "dynamodb.tableArn": test_source,
        "dynamodb.s3.bucket": bucket_name,
        "dynamodb.s3.prefix": bucket_prefix,
        "dynamodb.s3.bucketOwner": account_id_of_bucket,
    }
)
print(dyf.getNumPartitions())

job.commit()
```

------
#### [ Scala ]

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamoDbDataSink
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._


object GlueApp {

  def main(sysArgs: Array[String]): Unit = {
    val glueContext = new GlueContext(SparkContext.getOrCreate())
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType = "dynamodb",
      options = JsonOptions(Map(
        "dynamodb.export" -> "ddb",
        "dynamodb.tableArn" -> test_source,
        "dynamodb.s3.bucket" -> bucket_name,
        "dynamodb.s3.prefix" -> bucket_prefix,
        "dynamodb.s3.bucketOwner" -> account_id_of_bucket,
      ))
    ).getDynamicFrame()
    
    print(dynamicFrame.getNumPartitions())

    Job.commit()
  }

}
```

------

Ces exemples montrent comment effectuer la lecture (via le connecteur d'exportation) et imprimer le nombre de partitions à partir d'une table AWS Glue Data Catalog comportant une `dynamodb` classification :

------
#### [ Python ]

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

dynamicFrame = glue_context.create_dynamic_frame.from_catalog(
        database=catalog_database,
        table_name=catalog_table_name,
        additional_options={
            "dynamodb.export": "ddb", 
            "dynamodb.s3.bucket": s3_bucket,
            "dynamodb.s3.prefix": s3_bucket_prefix
        }
    )
print(dynamicFrame.getNumPartitions())

job.commit()
```

------
#### [ Scala ]

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamoDbDataSink
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._


object GlueApp {

  def main(sysArgs: Array[String]): Unit = {
    val glueContext = new GlueContext(SparkContext.getOrCreate())
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    
    val dynamicFrame = glueContext.getCatalogSource(
        database = catalog_database,
        tableName = catalog_table_name,
        additionalOptions = JsonOptions(Map(
            "dynamodb.export" -> "ddb", 
            "dynamodb.s3.bucket" -> s3_bucket,
            "dynamodb.s3.prefix" -> s3_bucket_prefix
        ))
    ).getDynamicFrame()
    print(dynamicFrame.getNumPartitions())
)
```

------

## Simplification de l’utilisation de l’exportation DynamoDB au format JSON
<a name="etl-connect-dynamodb-traversing-structure"></a>

Les exportations DynamoDB avec le connecteur d’exportation AWS Glue DynamoDB donnent lieu à des fichiers JSON de structures imbriquées spécifiques. Pour plus d'informations, consultez la section [Objets de données](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/S3DataExport.Output.html). AWS Gluefournit une DynamicFrame transformation qui peut transformer ces structures en une easier-to-use forme destinée à des applications en aval.

La transformation peut être appelée de deux manières. Vous pouvez définir l’option de connexion `"dynamodb.simplifyDDBJson"` avec la valeur `"true"` lorsque vous appelez une méthode pour lire à partir de DynamoDB. Vous pouvez également appeler la transformation en tant que méthode disponible indépendamment dans la bibliothèque AWS Glue.

Tenez compte du schéma suivant généré par une exportation DynamoDB :

```
root
|-- Item: struct
|    |-- parentMap: struct
|    |    |-- M: struct
|    |    |    |-- childMap: struct
|    |    |    |    |-- M: struct
|    |    |    |    |    |-- appName: struct
|    |    |    |    |    |    |-- S: string
|    |    |    |    |    |-- packageName: struct
|    |    |    |    |    |    |-- S: string
|    |    |    |    |    |-- updatedAt: struct
|    |    |    |    |    |    |-- N: string
|    |-- strings: struct
|    |    |-- SS: array
|    |    |    |-- element: string
|    |-- numbers: struct
|    |    |-- NS: array
|    |    |    |-- element: string
|    |-- binaries: struct
|    |    |-- BS: array
|    |    |    |-- element: string
|    |-- isDDBJson: struct
|    |    |-- BOOL: boolean
|    |-- nullValue: struct
|    |    |-- NULL: boolean
```

La transformation `simplifyDDBJson` simplifie cette exportation ainsi :

```
root
|-- parentMap: struct
|    |-- childMap: struct
|    |    |-- appName: string
|    |    |-- packageName: string
|    |    |-- updatedAt: string
|-- strings: array
|    |-- element: string
|-- numbers: array
|    |-- element: string
|-- binaries: array
|    |-- element: string
|-- isDDBJson: boolean
|-- nullValue: null
```

**Note**  
`simplifyDDBJson`est disponible dans AWS Glue 3.0 et versions ultérieures. La transformation `unnestDDBJson` est également disponible pour simplifier l’exportation DynamoDB au format JSON. Nous encourageons les utilisateurs à passer de `simplifyDDBJson` à `unnestDDBJson`.

## Configuration du parallélisme des opérations de DynamoDB
<a name="aws-glue-programming-etl-connect-dynamodb-parallelism"></a>

Pour améliorer les performances, vous pouvez régler certains paramètres disponibles pour le connecteur DynamoDB. Lorsque vous ajustez les paramètres de parallélisme, votre objectif est de maximiser l'utilisation des AWS Glue workers provisionnés. Ensuite, si vous avez besoin de plus de performances, nous vous recommandons d'étendre votre travail en augmentant le nombre de DPUs. 

 Vous pouvez modifier le parallélisme dans une opération de lecture de DynamoDB à l’aide du paramètre `dynamodb.splits` lorsque vous utilisez le connecteur ETL. Lors d’une tâche de lecture avec le connecteur d’exportation, vous n’avez pas besoin de configurer le nombre de fractionnements pour le parallélisme de l’exécuteur Spark. Vous pouvez modifier le parallélisme dans une opération d’écriture de DynamoDB avec `dynamodb.output.numParallelTasks`.

**Lecture avec le connecteur ETL DynamoDB**

Nous vous recommandons de calculer `dynamodb.splits` en fonction du nombre maximum d’employés défini dans la configuration de votre tâche et du calcul `numSlots` suivant. En cas de mise à l’échelle automatique, le nombre réel d’employés disponibles peut changer et passer en dessous de ce plafond. Pour plus d’informations sur la définition du nombre maximum d’employés, consultez **Nombre d’employés** (`NumberOfWorkers`) dans [Configuration des propriétés des tâches pour les tâches Spark dans AWS Glue](add-job.md). 
+ `numExecutors = NumberOfWorkers - 1`

   À des fins de contexte, un exécuteur est réservé au pilote Spark ; d'autres exécuteurs sont utilisés pour traiter les données.
+ `numSlotsPerExecutor =`

------
#### [ AWS Glue 3.0 and later versions ]
  + `4` si `WorkerType` a la valeur `G.1X`
  + `8` si `WorkerType` a la valeur `G.2X`
  + `16` si `WorkerType` a la valeur `G.4X`
  + `32` si `WorkerType` a la valeur `G.8X`

------
#### [ AWS Glue 2.0 and legacy versions ]
  + `8` si `WorkerType` a la valeur `G.1X`
  + `16` si `WorkerType` a la valeur `G.2X`

------
+ `numSlots = numSlotsPerExecutor * numExecutors`

Nous vous recommandons de définir `dynamodb.splits` sur le nombre d’emplacements disponibles, `numSlots`.

**Écriture dans DynamoDB**

Le paramètre `dynamodb.output.numParallelTasks` est utilisé pour déterminer le WCU par tâche Spark, à l’aide du calcul suivant :

`permittedWcuPerTask = ( TableWCU * dynamodb.throughput.write.percent ) / dynamodb.output.numParallelTasks`

Le dispositif d’écriture DynamoDB fonctionne de manière optimale si la configuration représente avec précision le nombre de tâches Spark écrites dans DynamoDB. Dans certains cas, il se peut que vous ayez besoin de remplacer le calcul par défaut afin d’améliorer les performances d’écriture. Si vous ne spécifiez pas ce paramètre, le WCU autorisé pour chaque tâche Spark est automatiquement calculé par la formule suivante :
+ 
  + `numPartitions = dynamicframe.getNumPartitions()`
  + `numSlots` (tel que défini précédemment dans cette section)
  + `numParallelTasks = min(numPartitions, numSlots)`
+ Exemple 1. DPU = 10, = Norme. WorkerType L'entrée DynamicFrame comporte 100 partitions RDD.
  + `numPartitions = 100`
  + `numExecutors = (10 - 1) * 2 - 1 = 17`
  + `numSlots = 4 * 17 = 68`
  + `numParallelTasks = min(100, 68) = 68`
+ Exemple 2. DPU = 10, = Norme. WorkerType L'entrée DynamicFrame comporte 20 partitions RDD.
  + `numPartitions = 20`
  + `numExecutors = (10 - 1) * 2 - 1 = 17`
  + `numSlots = 4 * 17 = 68`
  + `numParallelTasks = min(20, 68) = 20`

**Note**  
Les jobs sur les anciennes versions de AWS Glue et ceux utilisant des outils Standard Workers nécessitent des méthodes différentes pour calculer le nombre d'emplacements. Si vous avez besoin d'optimiser les performances de ces tâches, nous vous recommandons de passer aux versions compatibles de AWS Glue.

## Référence des options de connexion DynamoDB
<a name="aws-glue-programming-etl-connect-dynamodb"></a>

Désigne une connexion à Amazon DynamoDB.

Les options de connexion sont différentes pour une connexion source et une connexion collecteur.

### « connectionType » : « dynamodb » avec le connecteur ETL comme source
<a name="etl-connect-dynamodb-as-source"></a>

Utilisez les options de connexion suivantes en `"connectionType": "dynamodb"` tant que source, lorsque vous utilisez le connecteur ETL AWS Glue DynamoDB :
+ `"dynamodb.input.tableName"` : (obligatoire) table DynamoDB à lire.
+ `"dynamodb.throughput.read.percent"` : (Facultatif) Le pourcentage d'unités de capacité de lecture à utiliser. La valeur définie par défaut est « 0,5 ». Valeurs acceptées : de 0,1 à 1,5 inclus.
  + `0.5` représente la vitesse de lecture par défaut, ce qui signifie que AWS Glue tente de consommer la moitié de la capacité de lecture de la table. Si vous augmentez la valeur au-delà de `0.5`, AWS Glue augmente le débit de demandes. Si vous réduisez la valeur en dessous de `0.5`, le débit de demandes de lecture baisse. (La vitesse de lecture réelle dépend de facteurs tels que l'existence d'une distribution uniforme des clés dans la table DynamoDB.)
  + Lorsque la table DynamoDB est en mode à la demande, AWS Glue gère la capacité de lecture de la table à 40 000. Pour exporter une table volumineuse, nous vous recommandons de basculer votre table DynamoDB en mode à la demande.
+ `"dynamodb.splits"` : (facultatif) définit en combien de fractionnements nous partitionnons cette table DynamoDB lors de la lecture. La valeur définie par défaut est « 1 ». Valeurs acceptées : de 1 à 1 000 000 inclus.

  `1` montre qu'il n'y a pas de parallélisme. Nous vous recommandons fortement de spécifier une valeur plus élevée pour de meilleures performances en utilisant la formule ci-dessous. Pour plus d’informations sur la définition appropriée d’une valeur, consultez [Configuration du parallélisme des opérations de DynamoDB](#aws-glue-programming-etl-connect-dynamodb-parallelism).
+ `"dynamodb.sts.roleArn"` : (facultatif) l'ARN du rôle IAM à endosser pour l'accès entre comptes. Ce paramètre est disponible dans AWS Glue 1.0 ou une version ultérieure.
+ `"dynamodb.sts.roleSessionName"` : (facultatif) nom de séance STS. La valeur par défaut est définie sur « glue-dynamodb-read-sts -session ». Ce paramètre est disponible dans AWS Glue 1.0 ou une version ultérieure.

### « connectionType » : « dynamodb » avec le connecteur d'exportation DynamoDB AWS Glue comme source
<a name="etl-connect-dynamodb-as-source-export-connector"></a>

Utilisez les options de connexion suivantes avec « connectionType » : « dynamodb » en tant que source, lorsque vous utilisez le connecteur d'exportation DynamoDB AWS Glue, disponible uniquement pour AWS Glue version 2.0 et au-delà :
+ `"dynamodb.export"` : (Obligatoire) Une valeur de chaîne :
  + Si la valeur est définie sur `ddb`, le connecteur d'exportation DynamoDB AWS Glue est activé où un nouveau paramètre `ExportTableToPointInTimeRequest` sera invoqué pendant la tâche AWS Glue. Une nouvelle exportation sera générée avec l'emplacement transmis depuis `dynamodb.s3.bucket` et `dynamodb.s3.prefix`.
  + Si la valeur est définie sur `s3`, le connecteur d'exportation DynamoDB AWS Glue est activé, mais ignore la création d'une nouvelle exportation DynamoDB et utilise plutôt les paramètres `dynamodb.s3.bucket` et `dynamodb.s3.prefix` en tant qu'emplacement Amazon S3 d'une exportation antérieure de cette table.
+ `"dynamodb.tableArn"` : (obligatoire) table DynamoDB à lire.
+ `"dynamodb.unnestDDBJson"` : (Facultatif) Par défaut : false. Valeurs valides : booléen. S'il est paramétré sur true, il effectue une transformation irréprochable de la structure JSON DynamoDB présente dans les exportations. Définir `"dynamodb.unnestDDBJson"` et `"dynamodb.simplifyDDBJson"` sur true en même temps constitue une erreur. Dans les AWS versions 3.0 et ultérieures, nous vous recommandons de l'utiliser `"dynamodb.simplifyDDBJson"` pour un meilleur comportement lors de la simplification des types de cartes DynamoDB. Pour de plus amples informations, veuillez consulter [Simplification de l’utilisation de l’exportation DynamoDB au format JSON](#etl-connect-dynamodb-traversing-structure). 
+ `"dynamodb.simplifyDDBJson"` : (Facultatif) Par défaut : false. Valeurs valides : booléen. S’il est paramétré sur true, il effectue une transformation pour simplifier le schéma de la structure JSON DynamoDB présente dans les exportations. Cela a le même objectif que l’option `"dynamodb.unnestDDBJson"`, mais fournit une meilleure prise en charge des types de cartes DynamoDB ou même des types de cartes imbriqués dans votre table DynamoDB. Cette option est disponible dans AWS Glue 3.0 et versions ultérieures. Définir `"dynamodb.unnestDDBJson"` et `"dynamodb.simplifyDDBJson"` sur true en même temps constitue une erreur. Pour de plus amples informations, veuillez consulter [Simplification de l’utilisation de l’exportation DynamoDB au format JSON](#etl-connect-dynamodb-traversing-structure).
+ `"dynamodb.s3.bucket"` : (facultatif) Indique l'emplacement du compartiment Amazon S3 dans lequel le processus DynamoDB `ExportTableToPointInTime` doit être mené. Le format de fichier de l'exportation est DynamoDB JSON.
  + `"dynamodb.s3.prefix"` : (Facultatif) Indique l'emplacement du préfixe Amazon S3 dans le compartiment Amazon S3 dans lequel les charges `ExportTableToPointInTime` de DynamoDB doivent être stockées. Si `dynamodb.s3.prefix` ni `dynamodb.s3.bucket` ne sont indiqués, ces valeurs seront par défaut à l'emplacement du répertoire temporaire indiqué dans la configuration de la tâche AWS Glue. Pour plus d'informations, consultez la section [Paramètres spéciaux utilisés par AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html).
  + `"dynamodb.s3.bucketOwner"` : indique le propriétaire du compartiment nécessaire à l'accès Amazon S3 entre comptes.
+ `"dynamodb.sts.roleArn"`: (Facultatif) L'ARN du rôle IAM à utiliser pour l'accès entre comptes L'accès and/or interrégional à la table DynamoDB. Remarque : Le même ARN de rôle IAM sera utilisé pour accéder à l'emplacement Amazon S3 spécifié pour la demande de `ExportTableToPointInTime`.
+ `"dynamodb.sts.roleSessionName"` : (facultatif) nom de séance STS. La valeur par défaut est définie sur « glue-dynamodb-read-sts -session ».
+ `"dynamodb.exportTime"` (Facultatif) Valeurs valides : chaînes représentant des instants ISO-8601. point-in-timeA où l'exportation doit être effectuée. 
+ `"dynamodb.sts.region"` : (Obligatoire si vous passez un appel entre régions à l’aide d’un point de terminaison régional) Région hébergeant la table DynamoDB que vous souhaitez lire.

### « connectionType » : « dynamodb » avec le connecteur ETL comme récepteur
<a name="etl-connect-dynamodb-as-sink"></a>

Utilisez les options de connexion suivantes avec `"connectionType": "dynamodb"` comme collecteur :
+ `"dynamodb.output.tableName"` : (obligatoire) table DynamoDB où écrire.
+ `"dynamodb.throughput.write.percent"` : (facultatif) pourcentage d'unités de capacité de lecture (WCU) à utiliser. La valeur définie par défaut est « 0,5 ». Valeurs acceptées : de 0,1 à 1,5 inclus.
  + `0.5` représente la vitesse d'écriture par défaut, ce qui signifie que AWS Glue tente de consommer la moitié de la capacité d'écriture de la table. Si vous augmentez la valeur au-delà de 0,5, AWS Glue augmente le débit de demandes. Si vous réduisez la valeur en dessous de 0,5, le débit de demandes d'écriture baisse. (La vitesse d'écriture réelle dépend de facteurs tels que l'existence d'une distribution uniforme des clés dans la table DynamoDB.)
  + Lorsque la table DynamoDB est en mode à la demande, AWS Glue gère la capacité d'écriture de la table à `40000`. Pour importer une table volumineuse, nous vous recommandons de basculer votre table DynamoDB en mode à la demande.
+ `"dynamodb.output.numParallelTasks"` : (facultatif) définit le nombre de tâches parallèles qui écrivent dans DynamoDB simultanément. Utilisé pour calculer le WCU permissif par tâche Spark. Dans la plupart des cas, AWS Glue calcule une valeur par défaut raisonnable pour cette valeur. Pour de plus amples informations, veuillez consulter [Configuration du parallélisme des opérations de DynamoDB](#aws-glue-programming-etl-connect-dynamodb-parallelism).
+ `"dynamodb.output.retry"` : (facultatif) définit le nombre de tentatives que nous effectuons lorsqu'il y a un `ProvisionedThroughputExceededException` de DynamoDB. La valeur définie par défaut est « 10 ».
+ `"dynamodb.sts.roleArn"` : (facultatif) l'ARN du rôle IAM à endosser pour l'accès entre comptes.
+ `"dynamodb.sts.roleSessionName"` : (facultatif) nom de séance STS. La valeur par défaut est définie sur « glue-dynamodb-write-sts -session ».

# Accès entre régions et entre comptes aux tables DynamoDB
<a name="aws-glue-programming-etl-dynamo-db-cross-account"></a>

AWS Glue Les tâches ETL prennent en charge l'accès entre régions et entre comptes aux tables DynamoDB. AWS Glue Les tâches ETL permettent à la fois de lire les données de la table DynamoDB d'un autre AWS compte et d'écrire des données dans la table DynamoDB d'un autre AWS compte. AWS Gluepermet également de lire à partir d'une table DynamoDB d'une autre région et d'écrire dans une table DynamoDB d'une autre région. Cette section donne des instructions sur la configuration de l'accès et fournit un exemple de script. 

Les procédures de cette section font référence à un didacticiel IAM pour créer un rôle IAM et accorder l'accès au rôle. Le didacticiel traite également de la prise en charge d'un rôle, mais ici, vous utiliserez plutôt un script de tâche pour endosser le rôle dans AWS Glue. Ce didacticiel contient également des informations sur les pratiques générales entre comptes. Pour plus d'informations, voir [Tutoriel : Déléguer l'accès entre AWS comptes à l'aide de rôles IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html) dans le Guide de l'*utilisateur IAM*.

## Créer un rôle
<a name="aws-glue-programming-etl-dynamo-db-create-role"></a>

Suivez l'[étape 1 du didacticiel](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html#tutorial_cross-account-with-roles-1) pour créer un rôle IAM dans le compte A. Lorsque vous définissez les autorisations du rôle, vous pouvez choisir d'associer des politiques existantes telles que `AmazonDynamoDBReadOnlyAccess` ou d'autoriser le rôle `AmazonDynamoDBFullAccess` à read/write DynamoDB. L'exemple suivant illustre la création d'un rôle nommé `DynamoDBCrossAccessRole`, avec la politique d'autorisation `AmazonDynamoDBFullAccess`.

## Accorder l'accès au rôle
<a name="aws-glue-programming-etl-dynamo-db-grant-access"></a>

Suivez l'[étape 2 du didacticiel](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html#tutorial_cross-account-with-roles-2) du *Guide de l'utilisateur IAM* pour permettre au compte B de basculer vers le rôle qui vient d'être créé. L'exemple suivant crée une politique avec l'instruction suivante :

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "sts:AssumeRole",
    "Resource": "arn:aws:iam::111122223333:role/DynamoDBCrossAccessRole"
  }
}
```

------

Vous pouvez ensuite associer cette politique à celle group/role/user que vous souhaitez utiliser pour accéder à DynamoDB.

## Endosser le rôle dans le script de tâche AWS Glue
<a name="aws-glue-programming-etl-dynamo-db-assume-role"></a>

Maintenant, vous pouvez vous connecter au compte B et créer une tâche AWS Glue. Pour créer une tâche, reportez-vous aux instructions de la page [Configuration des propriétés des tâches pour les tâches Spark dans AWS Glue](add-job.md). 

Dans le script de tâche, vous devez utiliser le paramètre `dynamodb.sts.roleArn` pour endosser le rôle `DynamoDBCrossAccessRole`. En supposant que ce rôle vous permet d'obtenir les informations d'identification temporaires, qui doivent être utilisées pour accéder à DynamoDB dans le compte B. Consultez ces exemples de scripts.

Pour une lecture entre comptes dans toutes les régions (connecteur ETL) :

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

dyf = glue_context.create_dynamic_frame_from_options(
    connection_type="dynamodb",
    connection_options={
    "dynamodb.region": "us-east-1",
    "dynamodb.input.tableName": "test_source",
    "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>"
    }
)
dyf.show()
job.commit()
```

Pour une lecture entre comptes dans toutes les régions (connecteur ETL) :

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

dyf = glue_context.create_dynamic_frame_from_options(
    connection_type="dynamodb",
    connection_options={
        "dynamodb.export": "ddb",
        "dynamodb.tableArn": "<test_source ARN>",
        "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>"
    }
)
dyf.show()
job.commit()
```

Pour une lecture et une écriture entre comptes dans toutes les régions :

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions
 
args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
job = Job(glue_context)
job.init(args["JOB_NAME"], args)
 
dyf = glue_context.create_dynamic_frame_from_options(
    connection_type="dynamodb",
    connection_options={
        "dynamodb.region": "us-east-1",
        "dynamodb.input.tableName": "test_source"
    }
)
dyf.show()
 
glue_context.write_dynamic_frame_from_options(
    frame=dyf,
    connection_type="dynamodb",
    connection_options={
        "dynamodb.region": "us-west-2",
        "dynamodb.output.tableName": "test_sink",
        "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>"
    }
)
 
job.commit()
```

# Connecteur DynamoDB avec prise en charge de Spark DataFrame
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-support"></a>

Le connecteur DynamoDB compatible avec DataFrame Spark vous permet de lire et d'écrire dans des tables de DynamoDB à l'aide de Spark. DataFrame APIs Les étapes de configuration du connecteur sont les mêmes que pour le connecteur DynamicFrame basé et peuvent être consultées [ici](aws-glue-programming-etl-connect-dynamodb-home.md#aws-glue-programming-etl-connect-dynamodb-configure).

Pour charger dans la bibliothèque de connecteurs DataFrame basée, veillez à associer une connexion DynamoDB à la tâche Glue.

**Note**  
L'interface utilisateur de la console Glue ne prend actuellement pas en charge la création d'une connexion DynamoDB. Vous pouvez utiliser Glue CLI ([CreateConnection](https://docs.aws.amazon.com/cli/latest/reference/glue/create-connection.html)) pour créer une connexion DynamoDB :  

```
        aws glue create-connection \
            --connection-input '{ \
                "Name": "my-dynamodb-connection", \
                "ConnectionType": "DYNAMODB", \
                "ConnectionProperties": {}, \
                "ValidateCredentials": false, \
                "ValidateForComputeEnvironments": ["SPARK"] \
            }'
```

Lors de la création de la connexion DynamoDB, vous pouvez l'associer à votre tâche Glue via CLI [CreateJob](https://docs.aws.amazon.com/cli/latest/reference/glue/create-job.html)([UpdateJob](https://docs.aws.amazon.com/cli/latest/reference/glue/update-job.html),) ou directement sur la page « Détails de la tâche » :

![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/dynamodb-dataframe-connector.png)


Après avoir vérifié qu'une connexion avec DYNAMODB Type est attachée à votre tâche Glue, vous pouvez utiliser les opérations de lecture, d'écriture et d'exportation suivantes à partir du connecteur DataFrame basé.

## Lecture et écriture dans DynamoDB à l'aide du connecteur basé DataFrame
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-read-write"></a>

Les exemples de code suivants montrent comment lire et écrire dans des tables DynamoDB via DataFrame le connecteur basé. Ils montrent la lecture d'une table et l'écriture dans une autre table.

------
#### [ Python ]

```
import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.utils import getResolvedOptions

args = getResolvedOptions(sys.argv, ["JOB_NAME"])
glue_context= GlueContext(SparkContext.getOrCreate())
spark = glueContext.spark_session
job = Job(glue_context)
job.init(args["JOB_NAME"], args)

# Read from DynamoDB
df = spark.read.format("dynamodb") \
    .option("dynamodb.input.tableName", "test-source") \
    .option("dynamodb.throughput.read.ratio", "0.5") \
    .option("dynamodb.consistentRead", "false") \
    .load()

print(df.rdd.getNumPartitions())

# Write to DynamoDB
df.write \
  .format("dynamodb") \
  .option("dynamodb.output.tableName", "test-sink") \
  .option("dynamodb.throughput.write.ratio", "0.5") \
  .option("dynamodb.item.size.check.enabled", "true") \
  .save()

job.commit()
```

------
#### [ Scala ]

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    
    val glueContext = new GlueContext(SparkContext.getOrCreate())
    val spark = glueContext.getSparkSession
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)

    val df = spark.read
      .format("dynamodb")
      .option("dynamodb.input.tableName", "test-source")
      .option("dynamodb.throughput.read.ratio", "0.5")
      .option("dynamodb.consistentRead", "false")
      .load()

    print(df.rdd.getNumPartitions)

    df.write
      .format("dynamodb")
      .option("dynamodb.output.tableName", "test-sink")
      .option("dynamodb.throughput.write.ratio", "0.5")
      .option("dynamodb.item.size.check.enabled", "true")
      .save()

    job.commit()
  }
}
```

------

## Utilisation de l'exportation DynamoDB via le connecteur basé DataFrame
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-export"></a>

L'opération d'exportation est préférable à l'opération de lecture pour les tables DynamoDB de plus de 80 Go. Les exemples de code suivants montrent comment lire depuis une table, exporter vers S3 et imprimer le nombre de partitions via le connecteur DataFrame basé.

**Note**  
La fonctionnalité d'exportation DynamoDB est disponible via l'objet Scala. `DynamoDBExport` Les utilisateurs de Python peuvent y accéder via l'interopérabilité JVM de Spark ou utiliser le SDK AWS pour Python (boto3) avec l'API DynamoDB. `ExportTableToPointInTime`

------
#### [ Scala ]

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.{GlueArgParser, Job}
import org.apache.spark.SparkContext
import glue.spark.dynamodb.DynamoDBExport
import scala.collection.JavaConverters._

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val glueContext = new GlueContext(SparkContext.getOrCreate())
    val spark = glueContext.getSparkSession
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    
    val options = Map(
      "dynamodb.export" -> "ddb",
      "dynamodb.tableArn" -> "arn:aws:dynamodb:us-east-1:123456789012:table/my-table",
      "dynamodb.s3.bucket" -> "my-s3-bucket",
      "dynamodb.s3.prefix" -> "my-s3-prefix",
      "dynamodb.simplifyDDBJson" -> "true"
    )
    val df = DynamoDBExport.fullExport(spark, options)
    
    print(df.rdd.getNumPartitions)
    df.count()
    
    Job.commit()
  }
}
```

------

## Options de configuration
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-options"></a>

### Options de lecture
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-read-options"></a>


| Option | Description | Par défaut | 
| --- | --- | --- | 
| dynamodb.input.tableName | Nom de la table DynamoDB (obligatoire) | - | 
| dynamodb.throughput.read | Les unités de capacité de lecture (RCU) à utiliser. S'il n'est pas spécifié, dynamodb.throughput.read.ratio il est utilisé pour le calcul. | - | 
| dynamodb.throughput.read.ratio | Le ratio d'unités de capacité de lecture (RCU) à utiliser | 0.5 | 
| dynamodb.table.read.capacity | Capacité de lecture de la table à la demande utilisée pour calculer le débit. Ce paramètre n'est efficace que dans les tables de capacité à la demande. Par défaut, ce sont les unités de lecture à débit chaud. | - | 
| dynamodb.splits | Définit le nombre de segments utilisés dans les opérations de scan en parallèle. S'il n'est pas fourni, le connecteur calculera une valeur par défaut raisonnable. | - | 
| dynamodb.consistentRead | S'il faut utiliser des lectures très cohérentes | FALSE | 
| dynamodb.input.retry | Définit le nombre de tentatives que nous effectuons en cas d'exception réessayable. | 10 | 

### Options d'écriture
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-write-options"></a>


| Option | Description | Par défaut | 
| --- | --- | --- | 
| dynamodb.output.tableName | Nom de la table DynamoDB (obligatoire) | - | 
| dynamodb.throughput.write | Les unités de capacité d'écriture (WCU) à utiliser. S'il n'est pas spécifié, dynamodb.throughput.write.ratio il est utilisé pour le calcul. | - | 
| dynamodb.throughput.write.ratio | Le ratio d'unités de capacité d'écriture (WCU) à utiliser | 0.5 | 
| dynamodb.table.write.capacity | Capacité d'écriture de la table à la demande utilisée pour calculer le débit. Ce paramètre n'est efficace que dans les tables de capacité à la demande. Par défaut, ce sont les unités d'écriture à débit chaud. | - | 
| dynamodb.item.size.check.enabled | Si c'est vrai, le connecteur calcule la taille de l'élément et abandonne si la taille dépasse la taille maximale, avant d'écrire dans la table DynamoDB. | TRUE | 
| dynamodb.output.retry | Définit le nombre de tentatives que nous effectuons en cas d'exception réessayable. | 10 | 

### Options d'exportation
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-export-options"></a>


| Option | Description | Par défaut | 
| --- | --- | --- | 
| dynamodb.export | S'il est défini sur, ddb active le connecteur d'exportation AWS Glue DynamoDB dans lequel un ExportTableToPointInTimeRequet nouveau connecteur sera invoqué pendant la AWS tâche Glue. Une nouvelle exportation sera générée avec l'emplacement transmis depuis dynamodb.s3.bucket et dynamodb.s3.prefix. S'il est défini sur, s3 active le connecteur d'exportation AWS Glue DynamoDB mais ignore la création d'une nouvelle exportation DynamoDB et utilise à la place le et dynamodb.s3.bucket comme emplacement Amazon S3 de dynamodb.s3.prefix l'ancienne exportation de cette table. | ddb | 
| dynamodb.tableArn | La table DynamoDB à partir de laquelle lire. Obligatoire si dynamodb.export est défini sur ddb. |  | 
| dynamodb.simplifyDDBJson | S'il est défini surtrue, exécute une transformation pour simplifier le schéma de la structure JSON DynamoDB présente dans les exportations. | FALSE | 
| dynamodb.s3.bucket | Le compartiment S3 pour stocker les données temporaires lors de l'exportation DynamoDB (obligatoire) |  | 
| dynamodb.s3.prefix | Le préfixe S3 pour stocker les données temporaires lors de l'exportation DynamoDB |  | 
| dynamodb.s3.bucketOwner | Indiquez le propriétaire du compartiment requis pour l'accès entre comptes Amazon S3 |  | 
| dynamodb.s3.sse.algorithm | Type de chiffrement utilisé sur le compartiment dans lequel les données temporaires seront stockées. Les valeurs valides sont AES256 et KMS. |  | 
| dynamodb.s3.sse.kmsKeyId | ID de la clé AWS KMS gérée utilisée pour chiffrer le compartiment S3 dans lequel les données temporaires seront stockées (le cas échéant). |  | 
| dynamodb.exportTime |  point-in-timeA où l'exportation doit être effectuée. Valeurs valides : chaînes représentant des instants ISO-8601. |  | 

### Options générales
<a name="aws-glue-programming-etl-connect-dynamodb-dataframe-general-options"></a>


| Option | Description | Par défaut | 
| --- | --- | --- | 
| dynamodb.sts.roleArn | L'ARN du rôle IAM à assumer pour l'accès entre comptes | - | 
| dynamodb.sts.roleSessionName | Nom de session STS | glue-dynamodb-sts-session | 
| dynamodb.sts.region | Région pour le client STS (pour l'hypothèse d'un rôle interrégional) | Identique à l'regionoption | 

# Connexions Kinesis
<a name="aws-glue-programming-etl-connect-kinesis-home"></a>

Vous pouvez utiliser une connexion Kinesis pour lire et écrire dans Amazon Kinesis Data Streams à l’aide d’informations stockées dans une table de catalogue de données ou en fournissant des informations permettant d’accéder directement au flux de données. Vous pouvez lire les informations de Kinesis dans un Spark DataFrame, puis les convertir en Glue AWS . DynamicFrame Vous pouvez DynamicFrames écrire dans Kinesis au format JSON. Si vous accédez directement au flux de données, utilisez ces options pour fournir des informations sur la façon d'accéder au flux de données.

Si vous utilisez `getCatalogSource` ou `create_data_frame_from_catalog` pour consommer des enregistrements à partir d'une source de streaming Kinesis, la tâche dispose des informations relatives à la base de données Data Catalog et au nom de la table, et peut les utiliser pour obtenir certains paramètres de base pour la lecture à partir de la source de streaming Kinesis. Si vous utilisez `getSource`, `getSourceWithFormat`, `createDataFrameFromOptions` ou `create_data_frame_from_options`, vous devez spécifier ces paramètres de base à l'aide des options de connexion décrites ici.

Vous pouvez spécifier les options de connexion pour Kinesis à l'aide des arguments suivants pour les méthodes spécifiées dans la classe `GlueContext`.
+ Scala
  + `connectionOptions` : utiliser avec `getSource`, `createDataFrameFromOptions`, `getSink` 
  + `additionalOptions` : utiliser avec `getCatalogSource`, `getCatalogSink`
  + `options` : utiliser avec `getSourceWithFormat`, `getSinkWithFormat`
+ Python
  + `connection_options` : utiliser avec `create_data_frame_from_options`, `write_dynamic_frame_from_options`
  + `additional_options` : utiliser avec `create_data_frame_from_catalog`, `write_dynamic_frame_from_catalog`
  + `options` : utiliser avec `getSource`, `getSink`

Pour les remarques et les restrictions concernant les tâches ETL de streaming, consultez [Restrictions et notes sur ETL en streaming](add-job-streaming.md#create-job-streaming-restrictions).

## Configurer Kinesis
<a name="aws-glue-programming-etl-connect-kinesis-configure"></a>

Pour vous connecter à un flux de données Kinesis dans le cadre d'une tâche AWS Glue Spark, vous aurez besoin de certaines conditions préalables :
+ En cas de lecture, la tâche AWS Glue doit disposer d'autorisations IAM de niveau d'accès en lecture pour le flux de données Kinesis.
+ En cas d'écriture, la tâche AWS Glue doit disposer d'autorisations IAM de niveau d'accès Write pour le flux de données Kinesis.

Dans certains cas, vous devrez configurer des prérequis supplémentaires :
+ Si votre tâche AWS Glue est configurée avec **des connexions réseau supplémentaires** (généralement pour se connecter à d'autres ensembles de données) et que l'une de ces connexions fournit des options de **réseau Amazon VPC**, cela indiquera à votre tâche de communiquer via Amazon VPC. Dans ce cas, vous devrez également configurer votre flux de données Kinesis pour qu'il communique via Amazon VPC. Vous pouvez le faire en créant un point de terminaison d'un VPC d'interface entre votre Amazon VPC et votre flux de données Kinesis. Pour plus d'informations, consultez [Using Kinesis Data Streams with Interface VPC Endpoints](https://docs.aws.amazon.com//streams/latest/dev/vpc.html).
+ Lorsque vous spécifiez Amazon Kinesis Data Streams dans un autre compte, vous devez configurer les rôles et les stratégies pour autoriser l'accès intercompte. Pour de plus amples informations, veuillez consulter la rubrique [Exemple : Lire à partir d’un flux Kinesis dans un autre compte](https://docs.aws.amazon.com/kinesisanalytics/latest/java/examples-cross.html).

Pour plus d'informations sur les prérequis de la tâche ETL de streaming, consultez [Tâches ETL en streaming dans AWS Glue](add-job-streaming.md).

## Exemple : lecture à partir de flux Kinesis
<a name="aws-glue-programming-etl-connect-kinesis-read"></a>

### Exemple : lecture à partir de flux Kinesis
<a name="section-etl-connect-kinesis-read"></a>

Utilisez conjointement avec [forEachBatch](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-forEachBatch).

Exemple pour la source de streaming Amazon Kinesis :

```
kinesis_options =
   { "streamARN": "arn:aws:kinesis:us-east-2:777788889999:stream/fromOptionsStream",
     "startingPosition": "TRIM_HORIZON", 
     "inferSchema": "true", 
     "classification": "json" 
   }
data_frame_datasource0 = glueContext.create_data_frame.from_options(connection_type="kinesis", connection_options=kinesis_options)
```

## Exemple : écriture dans Kinesis Streams
<a name="aws-glue-programming-etl-connect-kinesis-write"></a>

### Exemple : lecture à partir de flux Kinesis
<a name="section-etl-connect-kinesis-read"></a>

Utilisez conjointement avec [forEachBatch](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-forEachBatch).

Exemple pour la source de streaming Amazon Kinesis :

```
kinesis_options =
   { "streamARN": "arn:aws:kinesis:us-east-2:777788889999:stream/fromOptionsStream",
     "startingPosition": "TRIM_HORIZON", 
     "inferSchema": "true", 
     "classification": "json" 
   }
data_frame_datasource0 = glueContext.create_data_frame.from_options(connection_type="kinesis", connection_options=kinesis_options)
```

## Référence des options de connexion Kinesis
<a name="aws-glue-programming-etl-connect-kinesis"></a>

Désigne des options de connexion à Amazon Kinesis Data Streams.

Utilisez les options de connexion suivantes pour les sources de données en streaming Kinesis : 
+ `"streamARN"` (Obligatoire) Utilisé pour la lecture/l'écriture. ARN du flux de données Kinesis.
+ `"classification"` (Obligatoire pour la lecture) Utilisé pour la lecture. Format de fichier utilisé par les données de l'enregistrement. Obligatoire, sauf s’il est fourni par le catalogue de données.
+ `"streamName"` : (facultatif) utilisé pour la lecture. Nom du flux de données Kinesis à partir duquel lire. Utilisé avec `endpointUrl`.
+ `"endpointUrl"` : (facultatif) utilisé pour la lecture. Par défaut : « https://kinesis.us-east-1.amazonaws.com ». AWS Point de terminaison du flux Kinesis. Vous n'avez pas besoin de modifier ce paramètre, sauf si vous vous connectez à une région spéciale.
+ `"partitionKey"` : (facultatif) utilisé pour l'écriture. Clé de partition Kinesis utilisée lors de la production d'enregistrements.
+ `"delimiter"` : (facultatif) utilisé pour la lecture. Séparateur de valeurs utilisé lorsque `classification` est CSV. La valeur par défaut est « `,` ».
+ `"startingPosition"` : (facultatif) utilisé pour la lecture. La position de départ dans le flux de données Kinesis à partir duquel lire les données. Les valeurs possibles sont `"latest"`, `"trim_horizon"`, `"earliest"`, ou une chaîne d'horodatage au format UTC dans le modèle `yyyy-mm-ddTHH:MM:SSZ` (où `Z` représente un décalage de fuseau horaire UTC avec un \$1/-. Par exemple : « 2023-04-04T08:00:00-04:00 »). La valeur par défaut est `"latest"`. Remarque : la chaîne d'horodatage au format UTC pour n'`"startingPosition"`est prise en charge que pour la version 4.0 ou ultérieure de AWS Glue.
+ `"failOnDataLoss"` : (facultatif) échec de la tâche si une partition active est manquante ou a expiré. La valeur par défaut est `"false"`.
+ `"awsSTSRoleARN"` : (facultatif) utilisé pour la lecture/l'écriture. Le nom de ressource Amazon (ARN) du rôle à assumer en utilisant AWS Security Token Service (AWS STS). Ce rôle doit disposer des autorisations nécessaires pour décrire ou lire des registres pour le flux de données Kinesis. Vous devez utiliser ce paramètre lorsque vous accédez à un flux de données dans un autre compte. Utilisez conjointement avec `"awsSTSSessionName"`.
+ `"awsSTSSessionName"` : (facultatif) utilisé pour la lecture/l'écriture. Un identifiant de la séance assumant le rôle à l'aide d' AWS STS. Vous devez utiliser ce paramètre lorsque vous accédez à un flux de données dans un autre compte. Utilisez conjointement avec `"awsSTSRoleARN"`.
+ `"awsSTSEndpoint"`: (Facultatif) Le AWS STS point de terminaison à utiliser lors de la connexion à Kinesis avec un rôle assumé. Cela permet d'utiliser le point de AWS STS terminaison régional dans un VPC, ce qui n'est pas possible avec le point de terminaison global par défaut.
+ `"maxFetchTimeInMs"` : (facultatif) utilisé pour la lecture. Le temps maximal passé dans l’exécuteur de tâches pour lire des enregistrements du lot actuel à partir du flux de données Kinesis, exprimé en millisecondes (ms). Plusieurs appels d’API `GetRecords` peuvent être effectués pendant cette période. La valeur par défaut est `1000`.
+ `"maxFetchRecordsPerShard"` : (facultatif) utilisé pour la lecture. Nombre maximal d’enregistrements à récupérer par partition dans le flux de données Kinesis par microlot. Remarque : Le client peut dépasser cette limite si la tâche de streaming a déjà lu des enregistrements supplémentaires provenant de Kinesis (dans le même appel get-records). Si `maxFetchRecordsPerShard` doit être strict, il doit être un multiple de `maxRecordPerRead`. La valeur par défaut est `100000`.
+ `"maxRecordPerRead"` : (facultatif) utilisé pour la lecture. Nombre maximal d'enregistrements à extraire du flux de données Kinesis dans chaque opération `getRecords`. La valeur par défaut est `10000`.
+ `"addIdleTimeBetweenReads"` : (facultatif) utilisé pour la lecture. Ajoute un délai entre deux opérations `getRecords` consécutives. La valeur par défaut est `"False"`. Cette option n’est configurable que pour Glue version 2.0 et ultérieure. 
+ `"idleTimeBetweenReadsInMs"` : (facultatif) utilisé pour la lecture. Délai minimum entre deux opérations `getRecords`, en ms. La valeur par défaut est `1000`. Cette option n’est configurable que pour Glue version 2.0 et ultérieure. 
+ `"describeShardInterval"` : (facultatif) utilisé pour la lecture. Intervalle de temps minimum entre deux appels d'API `ListShards` pour que votre script envisage le repartitionnement. Pour plus d'informations, consultez [Politiques de repartitionnement](https://docs.aws.amazon.com//streams/latest/dev/kinesis-using-sdk-java-resharding-strategies.html) dans le *Guide du développeur Amazon Kinesis Data Streams*. La valeur par défaut est `1s`.
+ `"numRetries"` : (facultatif) utilisé pour la lecture. Le nombre maximal de nouvelles tentatives pour les demandes d'API Kinesis Data Streams. La valeur par défaut est `3`.
+ `"retryIntervalMs"` : (facultatif) utilisé pour la lecture. Le délai de réflexion (spécifié en ms) avant de réessayer l'appel d'API Kinesis Data Streams. La valeur par défaut est `1000`.
+ `"maxRetryIntervalMs"` : (facultatif) utilisé pour la lecture. Le délai d'attente maximal (spécifié en ms) entre deux tentatives d'appel d'API Kinesis Data Streams. La valeur par défaut est `10000`.
+ `"avoidEmptyBatches"` : (facultatif) utilisé pour la lecture. Évite de créer une tâche de micro-lot vide en vérifiant les données non lues dans le flux de données Kinesis avant le démarrage du lot. La valeur par défaut est `"False"`.
+ `"schema"` : (obligatoire lorsque inferSchema est défini sur false) utilisé pour la lecture. Schéma à utiliser pour traiter la charge utile. Si la classification est `avro`, le schéma fourni doit être au format de schéma Avro. Si la classification n'est pas `avro`, le schéma fourni doit être au format de schéma DDL.

  Voici quelques exemples de schémas.

------
#### [ Example in DDL schema format ]

  ```
  `column1` INT, `column2` STRING , `column3` FLOAT
  ```

------
#### [ Example in Avro schema format ]

  ```
  {
    "type":"array",
    "items":
    {
      "type":"record",
      "name":"test",
      "fields":
      [
        {
          "name":"_id",
          "type":"string"
        },
        {
          "name":"index",
          "type":
          [
            "int",
            "string",
            "float"
          ]
        }
      ]
    }
  }
  ```

------
+ `"inferSchema"` : (facultatif) utilisé pour la lecture. La valeur par défaut est « false ». S’il est défini sur « true », le schéma sera détecté lors de l’exécution à partir de la charge utile dans `foreachbatch`.
+ `"avroSchema"` : (obsolète) utilisé pour la lecture. Paramètre utilisé pour spécifier un schéma de données Avro lorsque le format Avro est utilisé. Ce paramètre est désormais obsolète. Utilisez le paramètre `schema`.
+ `"addRecordTimestamp"` : (facultatif) utilisé pour la lecture. Lorsque cette option est définie sur « true », la sortie de données contient une colonne supplémentaire nommée « \$1\$1src\$1timestamp » qui indique l'heure à laquelle l'enregistrement correspondant est reçu par le flux. La valeur par défaut est « false ». Cette option est prise en charge dans AWS Glue version 4.0 ou ultérieure.
+ `"emitConsumerLagMetrics"` : (facultatif) utilisé pour la lecture. Lorsque l'option est définie sur « vrai », pour chaque lot, elle émet les métriques correspondant à la durée comprise entre le plus ancien enregistrement reçu par le flux et l'heure AWS Glue à laquelle il arrive CloudWatch. Le nom de la métrique est « glue.driver.streaming ». maxConsumerLagInMs». La valeur par défaut est « false ». Cette option est prise en charge dans AWS Glue version 4.0 ou ultérieure.
+ `"fanoutConsumerARN"` : (facultatif) utilisé pour la lecture. ARN d'un consommateur de flux Kinesis pour le flux spécifié dans `streamARN`. Utilisé pour activer le mode diffusion améliorée pour votre connexion Kinesis. Pour plus d'informations sur la consommation d'un flux Kinesis avec diffusion améliorée, consultez [Utilisation de la diffusion améliorée dans les tâches de streaming Kinesis](aws-glue-programming-etl-connect-kinesis-efo.md).
+ `"recordMaxBufferedTime"` : (facultatif) utilisé pour l'écriture. Par défaut : 1 000 (ms). Durée maximale pendant laquelle un enregistrement est mis en mémoire tampon en attendant d'être écrit.
+ `"aggregationEnabled"` : (facultatif) utilisé pour l'écriture. Valeur par défaut : vraie. Spécifie si les enregistrements doivent être agrégés avant de les envoyer à Kinesis.
+ `"aggregationMaxSize"` : (facultatif) utilisé pour l'écriture. Par défaut : 51 200 (octets). Si un enregistrement est supérieur à cette limite, il contourne l'agrégateur. Remarque Kinesis impose une limite de 50 Ko à la taille des enregistrements. Si vous définissez ce paramètre au-delà de 50 Ko, les enregistrements surdimensionnés seront rejetés par Kinesis.
+ `"aggregationMaxCount"` : (facultatif) utilisé pour l'écriture. Par défaut : 4294967295. Nombre maximum de résultats à regrouper dans un enregistrement agrégé.
+ `"producerRateLimit"` : (facultatif) utilisé pour l'écriture. Par défaut : 150 (%). Limite le débit par partition envoyée par un seul producteur (votre tâche, par exemple), sous forme de pourcentage de la limite du backend.
+ `"collectionMaxCount"` : (facultatif) utilisé pour l'écriture. Par défaut : 500. Nombre maximum d'articles à inclure dans une PutRecords demande. 
+ `"collectionMaxSize"` : (facultatif) utilisé pour l'écriture. Par défaut : 5242880 (octets). Quantité maximale de données à envoyer avec une PutRecords demande.

# Utilisation de la diffusion améliorée dans les tâches de streaming Kinesis
<a name="aws-glue-programming-etl-connect-kinesis-efo"></a>

Un client bénéficiant de la diffusion améliorée est capable de recevoir des enregistrements provenant d'un flux Kinesis avec un débit dédié qui peut être supérieur à celui des consommateurs classiques. Cela se fait en optimisant le protocole de transfert utilisé pour fournir des données à un client Kinesis, tel que votre tâche. Pour plus d'informations sur la diffusion améliorée de Kinesis, consultez la [documentation Kinesis](https://docs.aws.amazon.com//streams/latest/dev/enhanced-consumers.html).

En mode de diffusion améliorée, les options de connexion `maxRecordPerRead` et `idleTimeBetweenReadsInMs` ne s'appliquent plus, car ces paramètres ne sont pas configurables lors de la diffusion améliorée. Les options de configuration pour les nouvelles tentatives fonctionnent comme décrit.

Utilisez les procédures suivantes pour activer et désactiver la diffusion améliorée pour votre tâche de streaming. Vous devez enregistrer un consommateur de flux pour chaque tâche qui consommera des données de votre flux.

**Pour activer la consommation de diffusion améliorée sur votre tâche :**

1. Enregistrez un consommateur de flux pour votre tâche à l'aide de l'API Kinesis. Suivez les instructions de la [documentation Kinesis](https://docs.aws.amazon.com//streams/latest/dev/building-enhanced-consumers-api) pour *enregistrer un consommateur avec une diffusion améliorée en utilisant à l'aide de l'API Kinesis Data Streams*. Il vous suffira de suivre la première étape : appeler [RegisterStreamConsumer](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_RegisterStreamConsumer.html). Votre demande doit renvoyer un ARN,*consumerARN*. 

1. Définissez l'option de connexion `fanoutConsumerARN` sur *consumerARN* dans les arguments de votre méthode de connexion.

1. Redémarrez votre tâche.

**Pour désactiver la consommation de diffusion améliorée sur votre tâche :**

1. Supprimez l'option de connexion `fanoutConsumerARN` de votre appel de méthode.

1. Redémarrez votre tâche.

1. Suivez les instructions de la [documentation Kinesis](https://docs.aws.amazon.com/streams/latest/dev/building-enhanced-consumers-console.html) pour *annuler l'enregistrement d'un consommateur*. Ces instructions s'appliquent à la console, mais peuvent également être obtenues via l'API Kinesis. Pour plus d'informations sur la désinscription des utilisateurs de streaming via l'API Kinesis, consultez la documentation Kinesis. [DeregisterStreamConsumer](https://docs.aws.amazon.com//kinesis/latest/APIReference/API_DeregisterStreamConsumer.html)

# Connexions Amazon S3
<a name="aws-glue-programming-etl-connect-s3-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire des fichiers dans Amazon S3. AWS Glue for Spark prend en charge de nombreux formats de données courants stockés dans Amazon S3 prêts à l'emploi, notamment CSV, Avro, JSON, Orc et Parquet. Pour de plus amples informations sur les formats de données pris en charge, consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md). Chaque format de données peut prendre en charge un ensemble différent de fonctionnalités de AWS Glue. Consultez la page de votre format de données pour connaître les spécificités de la prise en charge des fonctionnalités. En outre, vous pouvez lire et écrire des fichiers versionnés stockés dans les cadres de lacs de données Hudi, Iceberg et Delta Lake. Pour plus d'informations sur les cadres de lac de données, consultez [Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL](aws-glue-programming-etl-datalake-native-frameworks.md). 

Avec AWS Glue, vous pouvez partitionner vos objets Amazon S3 dans une structure de dossiers pendant l'écriture, puis les récupérer par partition pour améliorer les performances grâce à une configuration simple. Vous pouvez également définir la configuration pour regrouper les petits fichiers lors de la transformation de vos données afin d'améliorer les performances. Vous pouvez lire et écrire des archives `bzip2` et `gzip` dans Amazon S3.

**Topics**
+ [

## Configuration de connexions S3
](#aws-glue-programming-etl-connect-s3-configure)
+ [

## Référence des options de connexion Amazon S3
](#aws-glue-programming-etl-connect-s3)
+ [

## Syntaxes de connexion obsolètes pour les formats de données
](#aws-glue-programming-etl-connect-legacy-format)
+ [

# Exclusion des classes de stockage Amazon S3
](aws-glue-programming-etl-storage-classes.md)
+ [

# Gestion des partitions pour la sortie ETL dans AWS Glue
](aws-glue-programming-etl-partitions.md)
+ [

# Lecture des fichiers en entrée dans des groupes de plus grande taille
](grouping-input-files.md)
+ [

# Types de points de terminaison d'un VPC pour Amazon S3
](vpc-endpoints-s3.md)

## Configuration de connexions S3
<a name="aws-glue-programming-etl-connect-s3-configure"></a>

Pour vous connecter à Amazon S3 dans le cadre d'une tâche AWS Glue with Spark, vous aurez besoin de certaines conditions préalables :
+ La tâche AWS Glue doit disposer d'autorisations IAM pour les buckets Amazon S3 concernés.

Dans certains cas, vous devrez configurer des prérequis supplémentaires :
+ Lorsque vous configurez un accès intercompte, il convient de mettre en place des contrôles d'accès appropriés sur le compartiment Amazon S3.
+ Pour des raisons de sécurité, vous pouvez choisir d'acheminer vos requêtes Amazon S3 via un Amazon VPC. Cette approche peut engendrer des problèmes en matière de bande passante et de disponibilité. Pour de plus amples informations, veuillez consulter [Types de points de terminaison d'un VPC pour Amazon S3](vpc-endpoints-s3.md). 

## Référence des options de connexion Amazon S3
<a name="aws-glue-programming-etl-connect-s3"></a>

Désigne une connexion à Amazon S3.

Comme Amazon S3 gère des fichiers plutôt que des tables, en plus de spécifier les propriétés de connexion fournies dans ce document, vous devrez indiquer une configuration supplémentaire concernant votre type de fichier. Vous indiquez ces informations par le biais des options de format de données. Pour plus d'informations sur ces options de format, consultez [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md). Vous pouvez également spécifier ces informations en les intégrant au catalogue de données AWS Glue.

Pour illustrer la distinction entre les options de connexion et les options de format, considérez comment la méthode [create\$1dynamic\$1frame\$1from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options) utilise `connection_type`, `connection_options`, `format` et `format_options`. Cette section traite spécifiquement des paramètres fournis à `connection_options`.

Utilisez les options de connexion suivantes avec `"connectionType": "s3"` :
+ `"paths"` : (obligatoire) une liste de chemins Amazon S3 à lire.
+ `"exclusions"` : (Facultatif) Chaîne contenant une liste JSON des modèles glob de style Unix à exclure. Par exemple, `"[\"**.pdf\"]"` permet d'exclure tous les fichiers PDF. Pour plus d'informations sur la syntaxe glob qui prend en charge AWS Glue, consultez [Inclure et Exclure les modèles](https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html#crawler-data-stores-exclude).
+ `"compressionType"` : ou « `compression` » : (facultatif) spécifie la manière dont les données sont comprimées. Utilisez `"compressionType"` pour les sources Amazon S3 et `"compression"` pour les cibles Amazon S3. Ce n'est généralement pas nécessaire si le fichier de données a une extension standard. Les valeurs possibles sont `"gzip"` et `"bzip2"`). Des formats de compression supplémentaires peuvent être pris en charge pour des formats spécifiques. Pour connaître les spécificités de la prise en charge des fonctionnalités, consultez la page sur le format des données. 
+ `"groupFiles"` : (facultatif) le groupement de fichiers est activé par défaut lorsque l'entrée contient plus de 50 000 fichiers. Pour activer le groupement lorsqu'il y a moins de 50 000 fichiers, définissez ce paramètre sur `"inPartition"`. Pour désactiver le groupement lorsqu'il y a plus de 50 000 fichiers, définissez ce paramètre sur `"none"`.
+ `"groupSize"` : (Facultatif) Taille du groupe cible, en octets. La valeur par défaut est calculée en fonction de la dimension des données en entrée et de la dimension de votre cluster. Lorsqu'il y a moins de 50 000 fichiers en entrée, `"groupFiles"` doit être défini sur `"inPartition"` pour que cela prenne effet.
+ `"recurse"` : (Facultatif) Si ce paramètre est défini sur « true », les fichiers sont lus de manière récursive dans tous les sous-répertoires des chemins spécifiés.
+ `"maxBand"` : (facultatif, avancé) cette option permet de contrôler la durée, en millisecondes, au delà de laquelle la liste `s3` est susceptible d'être cohérente. Les fichiers dont l'horodatage de modification se situe dans les dernières `maxBand` millisecondes sont suivis lorsque des `JobBookmarks` sont utilisés pour prendre en compte une cohérence éventuelle Amazon S3. La plupart des utilisateurs n'ont pas besoin de définir cette option. La valeur par défaut est 900 000 millisecondes, soit 15 minutes.
+ `"maxFilesInBand"` : (Facultatif, avancé) Cette option spécifie le nombre maximal de fichiers à enregistrer à partir des dernières `maxBand` secondes. Si ce nombre est dépassé, les fichiers supplémentaires sont ignorés et traités dans l'exécution de tâche suivante. La plupart des utilisateurs n'ont pas besoin de définir cette option.
+ `"isFailFast"` : (facultatif) cette option détermine si une tâche ETL AWS Glue Glue lance des exceptions d'analyse de lecteur. Si elle est définie sur `true`, les tâches échouent rapidement si quatre tentatives de la tâche Spark échouent à analyser correctement les données.
+ `"catalogPartitionPredicate"` : (facultatif) utilisé pour la lecture. Le contenu d'une clause `WHERE` SQL. Utilisé lors de la lecture de tables du catalogue de données comportant un très grand nombre de partitions. Récupère les partitions correspondantes à partir des index du catalogue de données. Utilisé avec `push_down_predicate`, une option sur la méthode [create\$1dynamic\$1frame\$1from\$1catalog](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_catalog) (et d'autres méthodes similaires). Pour de plus amples informations, veuillez consulter [Filtrage côté serveur à l'aide de prédicats de partition de catalogue](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-cat-predicates).
+ `"partitionKeys"` : (facultatif) utilisé pour l'écriture. Un tableau de chaînes d'étiquettes de colonnes. AWS Glue partitionnera vos données conformément à cette configuration. Pour de plus amples informations, veuillez consulter [Écriture des partitions](aws-glue-programming-etl-partitions.md#aws-glue-programming-etl-partitions-writing).
+ `"excludeStorageClasses"` : (facultatif) utilisé pour la lecture. Tableau de chaînes spécifiant les classes de stockage Amazon S3. AWS Glue exclura les objets Amazon S3 en fonction de cette configuration. Pour de plus amples informations, veuillez consulter [Exclusion des classes de stockage Amazon S3](aws-glue-programming-etl-storage-classes.md).

## Syntaxes de connexion obsolètes pour les formats de données
<a name="aws-glue-programming-etl-connect-legacy-format"></a>

Certains formats de données sont accessibles à l'aide d'une syntaxe de type de connexion spécifique. Cette syntaxe est obsolète. Nous vous recommandons de spécifier vos formats en utilisant le type de connexion `s3` et les options de format fournies dans [Options de format pour les entrées et sorties dans AWS Glue pour Spark](aws-glue-programming-etl-format.md) à la place.

### « connectionType » : « orc »
<a name="aws-glue-programming-etl-connect-orc"></a>

Désigne une connexion à des fichiers stockés dans Amazon S3 au format de fichier [Apache Hive Optimized Row Columnar (ORC)](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC).

Utilisez les options de connexion suivantes avec `"connectionType": "orc"` :
+ `paths` : (obligatoire) une liste de chemins Amazon S3 à lire.
+ *(Autres name/value paires d'options)* : Toutes les options supplémentaires, y compris les options de formatage, sont transmises directement au SparkSQL`DataSource`.

### « connectionType » : « parquet »
<a name="aws-glue-programming-etl-connect-parquet"></a>

Désigne une connexion aux fichiers stockés dans Amazon S3 au format de fichier [Apache Parquet](https://parquet.apache.org/docs/).

Utilisez les options de connexion suivantes avec `"connectionType": "parquet"` :
+ `paths` : (obligatoire) une liste de chemins Amazon S3 à lire.
+ *(Autres name/value paires d'options)* : Toutes les options supplémentaires, y compris les options de formatage, sont transmises directement au SparkSQL`DataSource`.

# Exclusion des classes de stockage Amazon S3
<a name="aws-glue-programming-etl-storage-classes"></a>

Si vous exécutez des tâches ETL AWS Glue qui lisent des fichiers ou des partitions à partir d'Amazon Simple Storage Service (Amazon S3), vous pouvez exclure certains types de classe de stockage Amazon S3.

Les classes de stockage suivantes sont disponibles dans Amazon S3 :
+ `STANDARD` — pour le stockage à usage général des données fréquemment consultées.
+ `INTELLIGENT_TIERING` — pour les données ayant des modèles d'accès inconnus ou variables.
+ `STANDARD_IA` et `ONEZONE_IA` — pour les données à longue durée de vie, mais consultées moins fréquemment.
+ `GLACIER`, `DEEP_ARCHIVE` et `REDUCED_REDUNDANCY` — pour l'archivage à long terme et la conservation numérique.

Pour de plus amples informations, veuillez consulter [Classes de stockage Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html) dans le *Guide du développeur Amazon S3*.

Les exemples de cette section montrent comment exclure les classes de stockage `GLACIER` et `DEEP_ARCHIVE`. Ces classes vous permettent de répertorier les fichiers, mais ne vous permettent pas de les lire, sauf s'ils sont restaurés. (Pour de plus amples informations, veuillez consulter [Restauration d'objets archivés](https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html) dans le *Guide du développeur Amazon S3*.)

En utilisant les exclusions de classe de stockage, vous pouvez garantir que vos tâches AWS Glue fonctionnent sur les tables ayant des partitions sur ces niveaux de classe de stockage. Sans exclusion, les tâches qui lisent les données de ces niveaux échouent avec l'erreur suivante : AmazonS3Exception: The operation is not valid for the object's storage class (AmazonS3Exception : l'opération n'est pas valide pour la classe de stockage de l'objet).

Vous pouvez filtrer les classes de stockage Amazon S3 de différentes façons dans AWS Glue.

**Topics**
+ [

## Exclusion des classes de stockage Amazon S3 lors de la création d'une image dynamique
](#aws-glue-programming-etl-storage-classes-dynamic-frame)
+ [

## Exclusion de classes de stockage Amazon S3 d'une table Data Catalog
](#aws-glue-programming-etl-storage-classes-table)

## Exclusion des classes de stockage Amazon S3 lors de la création d'une image dynamique
<a name="aws-glue-programming-etl-storage-classes-dynamic-frame"></a>

Pour exclure les classes de stockage Amazon S3 lors de la création d'une image dynamique, utilisez `excludeStorageClasses` dans `additionalOptions`. AWS Glue utilise automatiquement sa propre implémentation de `Lister` Amazon S3 pour répertorier et exclure les fichiers correspondant aux classes de stockage spécifiées.

Les exemples Python et Scala suivants montrent comment exclure les classes de stockage `GLACIER` et `DEEP_ARCHIVE` lors de la création d'une image dynamique.

Exemple Python :

```
glueContext.create_dynamic_frame.from_catalog(
    database = "my_database",
    tableName = "my_table_name",
    redshift_tmp_dir = "",
    transformation_ctx = "my_transformation_context",
    additional_options = {
        "excludeStorageClasses" : ["GLACIER", "DEEP_ARCHIVE"]
    }
)
```

Exemple Scala :

```
val* *df = glueContext.getCatalogSource(
    nameSpace, tableName, "", "my_transformation_context",  
    additionalOptions = JsonOptions(
        Map("excludeStorageClasses" -> List("GLACIER", "DEEP_ARCHIVE"))
    )
).getDynamicFrame()
```

## Exclusion de classes de stockage Amazon S3 d'une table Data Catalog
<a name="aws-glue-programming-etl-storage-classes-table"></a>

Vous pouvez spécifier les exclusions de classe de stockage à utiliser par une tâche AWS Glue ETL en tant que paramètre de table dans le catalogue de données AWS Glue. Vous pouvez inclure ce paramètre dans l'`CreateTable`opération à l'aide du AWS Command Line Interface (AWS CLI) ou par programmation à l'aide de l'API. Pour plus d'informations, voir [Structure du tableau](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-Table) et [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html). 

Vous pouvez également spécifier des classes de stockage exclues sur la console AWS Glue.

**Pour exclure des classes de stockage Amazon S3 (console)**

1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse [https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/).

1. Dans le panneau de navigation de gauche, sélectionnez **Tables**.

1. Choisissez le nom de la table dans la liste, puis choisissez **Modifier la table**.

1. Dans **Propriétés de la table**, ajoutez **excludeStorageClasses** en tant que clé et **[\$1"GLACIER\$1",\$1"DEEP\$1ARCHIVE\$1"]** en tant que valeur.

1. Cliquez sur **Appliquer**.

# Gestion des partitions pour la sortie ETL dans AWS Glue
<a name="aws-glue-programming-etl-partitions"></a>

Le partitionnement est une technique importante technique pour organiser les ensembles de données afin qu'ils puissent être interrogés de manière efficace. Il organise les données en une structure de répertoires hiérarchique fondée sur les valeurs distinctes d'une ou de plusieurs colonnes.

Par exemple, vous pouvez décider de partitionner vos journaux d'application dans Amazon Simple Storage Service (Amazon S3) par date, réparties par année, par mois et par jour. Les fichiers qui correspondent à une seule journée de données sont ensuite placés sous un préfixe, tel que `s3://my_bucket/logs/year=2018/month=01/day=23/`. Les systèmes comme Amazon Athena, Amazon Redshift Spectrum, et maintenant AWS Glue peuvent utiliser ces partitions pour filtrer les données en fonction de la valeur de partition, sans avoir à lire toutes les données sous-jacentes depuis Amazon S3.

Les robots d'exploration ne se contentent pas de déduire les types de fichiers et les schémas, ils identifient également automatiquement la structure de partition de votre ensemble de données lorsqu'ils alimentent le catalogue de données AWS Glue. Les colonnes de partition résultantes sont disponibles pour l'interrogation dans les tâches ETL AWS Glue ou les moteurs de requête tels qu'Amazon Athena.

Après avoir analysé une table, vous pouvez afficher les partitions créées par l'crawler. Dans la console AWS Glue, dans le panneau de navigation de gauche, sélectionnez **Tables**. Sélectionnez la table créée par l'crawler, puis **View partitions** (Afficher les partitions).

Pour les chemins partitionnés de style Apache Hive de type `key=val`, les crawlers remplissent automatiquement le nom de la colonne à l'aide du nom de clé. Sinon, ils utilisent des noms par défaut comme `partition_0`, `partition_1`, etc. Vous pouvez modifier les noms par défaut sur la console. Pour ce faire, accédez à la table. Vérifiez si des index existent sous l'onglet **Index**. Si tel est le cas, vous devez les supprimer pour continuer (vous pourrez ensuite les recréer en utilisant les nouveaux noms de colonnes). Choisissez ensuite **Modifier le schéma** et modifiez les noms des colonnes de partition qui s'y trouvent.

Dans vos scripts ETL, vous pouvez ensuite filtrer sur les colonnes de partition. Étant donné que les informations de partition sont stockées dans le catalogue de données, utilisez les appels d'API `from_catalog` pour inclure les colonnes de partition dans le fichier `DynamicFrame`. Par exemple, utilisez `create_dynamic_frame.from_catalog` plutôt que `create_dynamic_frame.from_options`.

Le partitionnement est une technique d'optimisation qui réduit l'analyse des données. Pour plus d'informations sur le processus permettant d'identifier le moment où cette technique est appropriée, consultez la section [Réduire la quantité de données analysées dans le guide](https://docs.aws.amazon.com/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/reduce-data-scan.html) des *meilleures pratiques pour le réglage des performances de AWS Glue pour les tâches Apache Spark* sur le guide AWS prescriptif.

## Préfiltrage à l'aide des prédicats pushdown
<a name="aws-glue-programming-etl-partitions-pushdowns"></a>

Dans de nombreux cas, vous pouvez utiliser un prédicat pushdown pour filtrer les partitions sans avoir à répertorier et à lire tous les fichiers de votre ensemble de données. Au lieu de lire l'ensemble de données et de filtrer ensuite un DynamicFrame fichier, vous pouvez appliquer le filtre directement sur les métadonnées de partition dans le catalogue de données. Ensuite, vous ne listez et ne lisez que ce dont vous avez réellement besoin dans un DynamicFrame.

Par exemple, en Python, vous pouvez écrire ce qui suit.

```
glue_context.create_dynamic_frame.from_catalog(
    database = "my_S3_data_set",
    table_name = "catalog_data_table",
    push_down_predicate = my_partition_predicate)
```

Cela crée un DynamicFrame qui charge uniquement les partitions du catalogue de données qui répondent à l'expression de prédicat. En fonction de la taille d'un sous-ensemble de vos données de chargement, vous pouvez économiser beaucoup de temps de traitement.

L'expression de prédicat peut être n'importe quelle expression booléenne prise en charge par Spark SQL. Tout ce que vous pouvez placer dans une clause `WHERE` d'une requête SQL Spark fonctionne. Par exemple, l'expression de prédicat `pushDownPredicate = "(year=='2017' and month=='04')"` charge uniquement les partitions dans Data Catalog qui disposent à la fois d'une `year` égale à 2017 et un `month` égal à 04. Pour plus d'informations, consultez la documentation [Apache Spark SQL](https://spark.apache.org/docs/2.1.1/sql-programming-guide.html), en particulier le document [Référence des fonctions Scala SQL](https://spark.apache.org/docs/2.1.1/api/scala/index.html#org.apache.spark.sql.functions$).

## Filtrage côté serveur à l'aide de prédicats de partition de catalogue
<a name="aws-glue-programming-etl-partitions-cat-predicates"></a>

L'option `push_down_predicate` est appliquée après avoir répertorié toutes les partitions du catalogue et avant de répertorier les fichiers d'Amazon S3 pour ces partitions. Si vous disposez d'un grand nombre de partitions pour une table, la liste des partitions du catalogue peut encore entraîner une surcharge de temps supplémentaire. Pour remédier à cette surcharge, vous pouvez utiliser l'élagage des partitions côté serveur avec l'`catalogPartitionPredicate`option qui utilise les [index de partition dans](https://docs.aws.amazon.com/glue/latest/dg/partition-indexes.html) le catalogue de données Glue AWS . Cela accélère considérablement le filtrage des partitions lorsque vous avez des millions de partitions dans une table. Vous pouvez utiliser à la fois `push_down_predicate` et `catalogPartitionPredicate` dans `additional_options` si votre `catalogPartitionPredicate` a besoin d'une syntaxe de prédicat qui n'est pas encore prise en charge avec les index de partition de catalogue.

Python :

```
dynamic_frame = glueContext.create_dynamic_frame.from_catalog(
    database=dbname, 
    table_name=tablename,
    transformation_ctx="datasource0",
    push_down_predicate="day>=10 and customer_id like '10%'",
    additional_options={"catalogPartitionPredicate":"year='2021' and month='06'"}
)
```

Scala :

```
val dynamicFrame = glueContext.getCatalogSource(
    database = dbname,
    tableName = tablename, 
    transformationContext = "datasource0",
    pushDownPredicate="day>=10 and customer_id like '10%'",
    additionalOptions = JsonOptions("""{
        "catalogPartitionPredicate": "year='2021' and month='06'"}""")
    ).getDynamicFrame()
```

**Note**  
`push_down_predicate` et `catalogPartitionPredicate` utilisent des syntaxes différentes. Le premier utilise la syntaxe standard SQL Spark et le dernier utilise l'analyseur JSQL.

## Écriture des partitions
<a name="aws-glue-programming-etl-partitions-writing"></a>

Par défaut, a n' DynamicFrame est pas partitionné lors de son écriture. Tous les fichiers de sortie sont écrits au niveau supérieur du chemin de sortie spécifié. Jusqu'à récemment, le seul moyen d'écrire un DynamicFrame dans des partitions était de le convertir en SQL Spark DataFrame avant de l'écrire.

Cependant, vous pouvez DynamicFrames désormais prendre en charge le partitionnement natif à l'aide d'une séquence de clés, en utilisant l'`partitionKeys`option lorsque vous créez un récepteur. Par exemple, le code Python suivant écrit un ensemble de données sur Amazon S3 au format Parquet, dans les répertoires partitionnés par le type de champ. À partir de là, vous pouvez traiter ces partitions à l'aide d'autres systèmes, comme Amazon Athena.

```
glue_context.write_dynamic_frame.from_options(
    frame = projectedEvents,
    connection_type = "s3",    
    connection_options = {"path": "$outpath", "partitionKeys": ["type"]},
    format = "parquet")
```

# Lecture des fichiers en entrée dans des groupes de plus grande taille
<a name="grouping-input-files"></a>

Vous pouvez définir les propriétés de vos tables pour activer une tâche ETL AWS Glue regroupant les fichiers lorsqu'ils sont lus à partir d'un magasin de données Amazon S3. Ces propriétés permettent à chaque tâche ETL de lire un groupe de fichiers d'entrée en une seule partition en mémoire, ce qui est particulièrement utile lorsqu'il y a un grand nombre de petits fichiers dans votre magasin de données Amazon S3. Lorsque vous définissez certaines propriétés, vous demandez à AWS Glue de regrouper les fichiers au sein d'une partition de données Amazon S3 et de définir la taille des groupes à lire. Vous pouvez également définir ces options lors de la lecture à partir d'un magasin de données Amazon S3 avec la méthode `create_dynamic_frame.from_options`. 

Pour activer le regroupement de fichiers pour une table, vous définissez les paires clé-valeur dans le champ des paramètres de la structure de votre table. Utilisez la notation JSON pour définir une valeur pour le champ des paramètres de votre table. Pour plus d'informations sur la modification des propriétés d'une table, consultez [Affichage et gestion des détails d’une table](tables-described.md#console-tables-details). 

Vous pouvez utiliser cette méthode pour activer le regroupement des tables dans Data Calalog avec les magasins de données Amazon S3. 

**groupFiles**  
Définissez **groupFiles** sur `inPartition` afin d'activer le regroupement de fichiers au sein d'une partition de données Amazon S3. AWS Glue active automatiquement le regroupement s'il y a plus de 50 000 fichiers d'entrée, comme dans l'exemple suivant.  

```
  'groupFiles': 'inPartition'
```

**groupSize**  
Définissez **groupSize** sur la taille cible des groupes en octets. La propriété **groupSize** est facultative. Si aucune valeur n'est définie, AWS Glue calcule une taille pour utiliser tous les cœurs d'UC dans le cluster tout en réduisant le nombre total de tâches ETL et les partitions en mémoire.   
Par exemple, ce qui suit définit une taille de groupe de 1 Mo.  

```
  'groupSize': '1048576'
```
Notez que le `groupsize` doit être défini avec le résultat d'un calcul. Par exemple, 1024 \$1 1024 = 1048576.

**recurse**  
Définissez **recurse (récursif)** à `True` pour lire les fichiers de manière récursive dans tous les sous-répertoires lorsque vous spécifiez `paths` en tant que liste de chemins. Vous n'avez pas besoin de définir **recurse** si `paths` est un tableau de clés d'objet dans Amazon S3, ou si le format d'entrée est parquet/orc, comme dans l'exemple suivant.  

```
  'recurse':True
```

Si vous lisez à partir d'Amazon S3 directement à l'aide de la méthode `create_dynamic_frame.from_options`, ajoutez ces options de connexion. Par exemple, ce qui suit tente de placer les fichiers par groupes de 1 Mo.

```
df = glueContext.create_dynamic_frame.from_options("s3", {'paths': ["s3://s3path/"], 'recurse':True, 'groupFiles': 'inPartition', 'groupSize': '1048576'}, format="json")
```

**Note**  
`groupFiles`est pris en charge pour les formats de données DynamicFrames créés à partir des formats de données suivants : csv, ion, GrokLog, json et xml. Cette option n'est pas prise en charge pour avro, parquet et orc.

# Types de points de terminaison d'un VPC pour Amazon S3
<a name="vpc-endpoints-s3"></a>

Pour des raisons de sécurité, de nombreux AWS clients exécutent leurs applications dans un environnement Amazon Virtual Private Cloud (Amazon VPC). Avec Amazon VPC, vous pouvez lancer des EC2 instances Amazon dans un cloud privé virtuel, qui est logiquement isolé des autres réseaux, y compris de l'Internet public. Avec un VPC Amazon, vous contrôlez sa plage d’adresses IP, ses sous-réseaux, ses tables de routage, ses passerelles réseau et ses paramètres de sécurité.

**Note**  
Si vous avez créé votre AWS compte après le 04/12/2013, vous disposez déjà d'un VPC par défaut dans chaque région. AWS Vous pouvez commencer immédiatement à utiliser votre VPC par défaut sans configuration supplémentaire.  
Pour plus d'informations, veuillez consulter [Vos VPC et sous-réseaux par défaut](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) dans le Guide de l'utilisateur Amazon VPC.

De nombreux clients ont des préoccupations légitimes liées à la confidentialité et la sécurité lors de l’envoi et de la réception de données via le réseau Internet public. Les clients peuvent faire face à ces préoccupations en utilisant un réseau VPN pour acheminer l'ensemble du trafic réseau d'Amazon S3 via leur propre infrastructure réseau d'entreprise. Toutefois, cette approche peut engendrer des problèmes en matière de bande passante et de disponibilité.

Les points de terminaison d'un VPC pour Amazon S3 peuvent atténuer ces problèmes. Un point de terminaison d'un VPC pour Amazon S3 permet à AWS Glue d'utiliser des adresses IP privées pour accéder à Amazon S3 sans exposition au réseau Internet public. AWS Glue ne nécessite pas d'adresses IP publiques et vous n'avez pas besoin de passerelle Internet, de périphérique NAT ou de passerelle réseau privé virtuel dans votre VPC. Vous utilisez des politiques de point de terminaison pour contrôler l'accès à Amazon S3. Le trafic entre votre VPC et le AWS service ne quitte pas le réseau Amazon.

Lorsque vous créez un point de terminaison d'un VPC pour Amazon S3, toutes les demandes envoyées à un point de terminaison Amazon S3 au sein de la région (par exemple, *s3.us-west-2.amazonaws.com*) sont acheminées vers un point de terminaison Amazon S3 privé dans le réseau Amazon. Vous n'avez pas besoin de modifier vos applications exécutées sur les EC2 instances Amazon de votre VPC : le nom du point de terminaison reste le même, mais le chemin vers Amazon S3 reste entièrement au sein du réseau Amazon et n'accède pas à l'Internet public.

Pour plus d'informations sur les points de terminaison d'un VPC, veuillez consulter [Points de terminaison d'un VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) dans le Guide de l'utilisateur Amazon VPC.

Le diagramme suivant montre comment AWS Glue peut utiliser un point de terminaison d'un VPC pour accéder à Amazon S3.

![\[Flux de trafic réseau montrant une connexion VPC vers Amazon S3.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/PopulateCatalog-vpc-endpoint.png)


**Pour configurer l'accès à Amazon S3**

1. Connectez-vous à la console Amazon VPC AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Dans le panneau de navigation de gauche, sélectionnez **Points de terminaison**.

1. Sélectionnez **Create Endpoint (Créer un point de terminaison)** et suivez les étapes pour créer un point de terminaison d'un VPC Amazon S3 de type Passerelle. 

# Connexions Amazon DocumentDB
<a name="aws-glue-programming-etl-connect-documentdb-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables d'Amazon DocumentDB. Vous pouvez vous connecter à Amazon DocumentDB à l'aide des informations d'identification enregistrées AWS Secrets Manager via une connexion AWS Glue.

Pour plus d’informations sur Amazon DocumentDB, consultez la [documentation Amazon DocumentDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/what-is.html).

**Note**  
Les clusters élastiques Amazon DocumentDB ne sont actuellement pas pris en charge lors de l'utilisation du connecteur AWS Glue. Pour plus d'informations sur les clusters élastiques, consultez [Using Amazon DocumentDB elastic clusters](https://docs.aws.amazon.com/documentdb/latest/developerguide/docdb-using-elastic-clusters.html).

## Lecture et écriture dans les collections Amazon DocumentDB
<a name="aws-glue-programming-etl-connect-documentdb-read-write"></a>

**Note**  
Lorsque vous créez une tâche ETL qui se connecte à Amazon DocumentDB pour la propriété de tâche `Connections`, vous devez désigner un objet de connexion qui spécifie le virtual private cloud (VPC) dans lequel Amazon DocumentDB est exécuté. Pour l'objet de connexion, le type de connexion doit être `JDBC` et le `JDBC URL` doit être `mongo://<DocumentDB_host>:27017`.

**Note**  
Ces exemples de code ont été développés pour AWS Glue 3.0. Pour migrer vers AWS Glue 4.0, consultez[MongoDB](migrating-version-40.md#migrating-version-40-connector-driver-migration-mongodb). Le paramètre `uri` a été modifié.

**Note**  
Lorsque vous utilisez Amazon DocumentDB, le paramètre `retryWrites` doit être défini sur false dans certaines situations, par exemple lorsque le document écrit spécifie `_id`. Pour plus d’informations, consultez [Différences fonctionnelles avec MongoDB](https://docs.aws.amazon.com/documentdb/latest/developerguide/functional-differences.html#functional-differences.retryable-writes) dans la documentation Amazon DocumentDB.

Le script Python suivant illustre l’utilisation des types et des options de connexion pour la lecture et l’écriture dans Amazon DocumentDB.

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext, SparkConf
from awsglue.context import GlueContext
from awsglue.job import Job
import time

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

job = Job(glueContext)
job.init(args['JOB_NAME'], args)

output_path = "s3://some_bucket/output/" + str(time.time()) + "/"
documentdb_uri = "mongodb://<mongo-instanced-ip-address>:27017"
documentdb_write_uri = "mongodb://<mongo-instanced-ip-address>:27017"

read_docdb_options = {
    "uri": documentdb_uri,
    "database": "test",
    "collection": "coll",
    "username": "username",
    "password": "1234567890",
    "ssl": "true",
    "ssl.domain_match": "false",
    "partitioner": "MongoSamplePartitioner",
    "partitionerOptions.partitionSizeMB": "10",
    "partitionerOptions.partitionKey": "_id"
}

write_documentdb_options = {
    "retryWrites": "false",
    "uri": documentdb_write_uri,
    "database": "test",
    "collection": "coll",
    "username": "username",
    "password": "pwd"
}

# Get DynamicFrame from  DocumentDB
dynamic_frame2 = glueContext.create_dynamic_frame.from_options(connection_type="documentdb",
                                                               connection_options=read_docdb_options)

# Write DynamicFrame to MongoDB and DocumentDB
glueContext.write_dynamic_frame.from_options(dynamic_frame2, connection_type="documentdb",
                                             connection_options=write_documentdb_options)

job.commit()
```

Le script Scala suivant illustre l’utilisation des types et des options de connexion pour la lecture et l’écriture dans Amazon DocumentDB.

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamicFrame
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._

object GlueApp {
  val DOC_URI: String = "mongodb://<mongo-instanced-ip-address>:27017"
  val DOC_WRITE_URI: String = "mongodb://<mongo-instanced-ip-address>:27017"
  lazy val documentDBJsonOption = jsonOptions(DOC_URI)
  lazy val writeDocumentDBJsonOption = jsonOptions(DOC_WRITE_URI)
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)

    // Get DynamicFrame from DocumentDB
    val resultFrame2: DynamicFrame = glueContext.getSource("documentdb", documentDBJsonOption).getDynamicFrame()

    // Write DynamicFrame to DocumentDB
    glueContext.getSink("documentdb", writeJsonOption).writeDynamicFrame(resultFrame2)

    Job.commit()
  }

  private def jsonOptions(uri: String): JsonOptions = {
    new JsonOptions(
      s"""{"uri": "${uri}",
         |"database":"test",
         |"collection":"coll",
         |"username": "username",
         |"password": "pwd",
         |"ssl":"true",
         |"ssl.domain_match":"false",
         |"partitioner": "MongoSamplePartitioner",
         |"partitionerOptions.partitionSizeMB": "10",
         |"partitionerOptions.partitionKey": "_id"}""".stripMargin)
  }
}
```

## Référence des options de connexion Amazon DocumentDB
<a name="aws-glue-programming-etl-connect-documentdb"></a>

Désigne une connexion à Amazon DocumentDB (compatible avec MongoDB). 

Les options de connexion sont différentes pour une connexion source et une connexion collecteur.

### « connectionType »: « documentdb » comme cource
<a name="etl-connect-documentdb-as-source"></a>

Utilisez les options de connexion suivantes avec `"connectionType": "documentdb"` comme source :
+ `"uri"` : (obligatoire) hôte Amazon DocumentDB à lire, dans le format `mongodb://<host>:<port>`.
+ `"database"` : (obligatoire) base de données Amazon DocumentDB à lire.
+ `"collection"` : (obligatoire) collection Amazon DocumentDB à lire.
+ `"username"` : (obligatoire) nom d'utilisateur Amazon DocumentDB.
+ `"password"` : (obligatoire) mot de passe Amazon DocumentDB.
+ `"ssl"` : (obligatoire si vous utilisez SSL) si votre connexion utilise SSL, vous devez inclure cette option avec la valeur `"true"`.
+ `"ssl.domain_match"` : (obligatoire si vous utilisez SSL) si votre connexion utilise SSL, vous devez inclure cette option avec la valeur `"false"`.
+ `"batchSize"` : (Facultatif) : Nombre de documents à renvoyer par lot, utilisé dans le curseur des lots internes.
+ `"partitioner"` : (facultatif) : nom de classe de l'outil du partitionneur pour lire les données d'entrée à partir d'Amazon DocumentDB. Le connecteur fournit les partitionneurs suivants :
  + `MongoDefaultPartitioner`(par défaut) (Non pris en charge dans AWS Glue 4.0)
  + `MongoSamplePartitioner`(Non pris en charge dans AWS Glue 4.0)
  + `MongoShardedPartitioner`
  + `MongoSplitVectorPartitioner`
  + `MongoPaginateByCountPartitioner`
  + `MongoPaginateBySizePartitioner`(Non pris en charge dans AWS Glue 4.0)
+ `"partitionerOptions"` ( Facultatif) : Options pour le partitionneur désigné. Les options suivantes sont prises en charge pour chaque partitionneur :
  + `MongoSamplePartitioner`: `partitionKey`, `partitionSizeMB`, `samplesPerPartition`
  + `MongoShardedPartitioner`: `shardkey`
  + `MongoSplitVectorPartitioner` : `partitionKey`, partitionSizeMB
  + `MongoPaginateByCountPartitioner`: `partitionKey`, `numberOfPartitions`
  + `MongoPaginateBySizePartitioner` : `partitionKey`, partitionSizeMB

  Pour plus d'informations sur ces options, consultez [Configuration du partitionneur](https://docs.mongodb.com/spark-connector/master/configuration/#partitioner-conf) dans la documentation MongoDB.

### « connectionType »: « documentdb » comme collecteur
<a name="etl-connect-documentdb-as-sink"></a>

Utilisez les options de connexion suivantes avec `"connectionType": "documentdb"` comme collecteur :
+ `"uri"` : (obligatoire) hôte Amazon DocumentDB où écrire, dans le format `mongodb://<host>:<port>`.
+ `"database"` : (obligatoire) base de données Amazon DocumentDB où écrire.
+ `"collection"` : (obligatoire) collection Amazon DocumentDB où écrire.
+ `"username"` : (obligatoire) nom d'utilisateur Amazon DocumentDB.
+ `"password"` : (obligatoire) mot de passe Amazon DocumentDB.
+ `"extendedBsonTypes"` : (facultatif) si la valeur est `true`, cela autorise les types BSON étendus lors de l'écriture de données dans Amazon DocumentDB. La valeur par défaut est `true`.
+ `"replaceDocument"` : (Facultatif) Si `true`, remplace l'ensemble du document lors de l'enregistrement de jeux de données contenant un champ `_id`. Si `false`, seuls les champs du document qui correspondent aux champs du jeu de données sont mis à jour. La valeur par défaut est `true`.
+ `"maxBatchSize"` : (Facultatif) : Taille maximale du lot pour les opérations en bloc lors de l'enregistrement des données. La valeur par défaut est 512.
+ `"retryWrites"`: (Facultatif) : Réessayez automatiquement certaines opérations d'écriture une seule fois si AWS Glue rencontre une erreur réseau.

# OpenSearch Connexions de service
<a name="aws-glue-programming-etl-connect-opensearch-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables dans OpenSearch Service in AWS Glue 4.0 et versions ultérieures. Vous pouvez définir ce qu'il faut lire dans OpenSearch Service à l'aide d'une OpenSearch requête. Vous vous connectez au OpenSearch Service à l'aide des informations d'authentification HTTP de base stockées AWS Secrets Manager via une connexion AWS Glue. Cette fonctionnalité n'est pas compatible avec le OpenSearch Service serverless.

Pour plus d'informations sur Amazon OpenSearch Service, consultez la [documentation Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/).

## Configuration des connexions OpenSearch de service
<a name="aws-glue-programming-etl-connect-opensearch-configure"></a>

Pour vous connecter à OpenSearch Service from AWS Glue, vous devez créer et stocker vos identifiants de OpenSearch service dans un AWS Secrets Manager secret, puis associer ce secret à une connexion OpenSearch Service AWS Glue.

**Prérequis :** 
+ Identifiez le point de terminaison *aosEndpoint* et le port du domaine que *aosPort* vous souhaitez consulter, ou créez la ressource en suivant les instructions de la documentation Amazon OpenSearch Service. Pour plus d'informations sur la création d'un domaine, consultez [la section Création et gestion OpenSearch de domaines Amazon Service](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/createupdatedomains.html) dans la documentation Amazon OpenSearch Service.

  Un point de terminaison de domaine Amazon OpenSearch Service aura le formulaire par défaut suivant, https://search - *domainName* -*unstructuredIdContent*. *region*.es.amazonaws.com. Pour plus d'informations sur l'identification du point de terminaison de votre domaine, consultez la section [Création et gestion des domaines Amazon OpenSearch Service](https://docs.aws.amazon.com//opensearch-service/latest/developerguide/createupdatedomains.html) dans la documentation Amazon OpenSearch Service. 

  Identifiez ou générez des informations d'authentification HTTP de base, *aosUser* et *aosPassword* pour votre domaine.

**Pour configurer une connexion au OpenSearch service :**

1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification OpenSearch de service. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `USERNAME` contenant la valeur. *aosUser*
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `PASSWORD` contenant la valeur. *aosPassword*

1. Dans la console AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour une utilisation future dans AWS Glue. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez OpenSearch Service.
   + Lorsque vous sélectionnez un point de terminaison de domaine, fournissez*aosEndpoint*.
   + Lorsque vous sélectionnez un port, indiquez*aosPort*.
   + Lorsque vous sélectionnez un **AWS secret**, fournissez*secretName*.

Après avoir créé une connexion AWS Glue OpenSearch Service, vous devez suivre les étapes suivantes avant d'exécuter votre tâche AWS Glue :
+ Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire*secretName*.
+ Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Lecture à partir des index OpenSearch de service
<a name="aws-glue-programming-etl-connect-opensearch-read"></a>

**Prérequis :** 
+ Un index des OpenSearch services que vous aimeriez lire,*aosIndex*.
+ Une connexion AWS Glue OpenSearch Service configurée pour fournir des informations d'authentification et de localisation réseau. Pour cela, suivez les étapes de la procédure précédente, *Pour configurer une connexion au OpenSearch service*. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Cet exemple lit un index provenant d'Amazon OpenSearch Service. Vous devrez fournir le paramètre `pushdown`.

Par exemple : 

```
opensearch_read = glueContext.create_dynamic_frame.from_options(
    connection_type="opensearch",
    connection_options={
        "connectionName": "connectionName",
        "opensearch.resource": "aosIndex",
        "pushdown": "true",
    }
)
```

Vous pouvez également fournir une chaîne de requête pour filtrer les résultats renvoyés dans votre DynamicFrame. Vous devrez configurer `opensearch.query`.

`opensearch.query`peut prendre une chaîne de paramètres de requête URL *queryString* ou un objet *queryObject* JSON DSL de requête. Pour plus d'informations sur la requête DSL, consultez la section [Requête DSL](https://opensearch.org/docs/latest/query-dsl/index/) dans la OpenSearch documentation. Pour fournir une chaîne de paramètres de requête URL, ajoutez `?q=` à votre requête, comme vous le feriez pour une URL complète. Pour fournir un objet de requête DSL, échapper une chaîne objet JSON avant de le fournir.

Par exemple : 

```
            queryObject = "{ "query": { "multi_match": { "query": "Sample", "fields": [ "sample" ] } } }"
            queryString = "?q=queryString"
            
            opensearch_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="opensearch",
    connection_options={
        "connectionName": "connectionName",
        "opensearch.resource": "aosIndex",
        "opensearch.query": queryString,
        "pushdown": "true",
    }
)
```

Pour plus d'informations sur la façon de créer une requête en dehors de sa syntaxe spécifique, consultez la section [Syntaxe des chaînes de requête](https://opensearch.org/docs/latest/query-dsl/full-text/query-string/#query-string-syntax) dans la OpenSearch documentation.

Lorsque vous lisez des OpenSearch collections contenant des données de type tableau, vous devez spécifier quels champs sont de type tableau dans votre appel de méthode à l'aide du `opensearch.read.field.as.array.include` paramètre. 

Par exemple, en lisant le document suivant, vous rencontrerez les champs `genre` et `actor` du tableau :

```
{
    "_index": "movies",
    "_id": "2",
    "_version": 1,
    "_seq_no": 0,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "director": "Frankenheimer, John",
        "genre": [
            "Drama",
            "Mystery",
            "Thriller",
            "Crime"
        ],
        "year": 1962,
        "actor": [
            "Lansbury, Angela",
            "Sinatra, Frank",
            "Leigh, Janet",
            "Harvey, Laurence",
            "Silva, Henry",
            "Frees, Paul",
            "Gregory, James",
            "Bissell, Whit",
            "McGiver, John",
            "Parrish, Leslie",
            "Edwards, James",
            "Flowers, Bess",
            "Dhiegh, Khigh",
            "Payne, Julie",
            "Kleeb, Helen",
            "Gray, Joe",
            "Nalder, Reggie",
            "Stevens, Bert",
            "Masters, Michael",
            "Lowell, Tom"
        ],
        "title": "The Manchurian Candidate"
    }
}
```

Dans ce cas, vous devez inclure les noms de ces champs dans votre appel de méthode. Par exemple :

```
"opensearch.read.field.as.array.include": "genre,actor"
```

Si votre champ de tableau est imbriqué dans la structure de votre document, faites-y référence en utilisant la notation par points : `"genre,actor,foo.bar.baz"`. Cela permet de spécifier un tableau `baz` inclus dans votre document source par le biais du document intégré `foo` contenant le document intégré `bar`.

## Écrire dans les tables OpenSearch de service
<a name="aws-glue-programming-etl-connect-opensearch-write"></a>

Cet exemple écrit les informations d'un fichier existant DynamicFrame *dynamicFrame* dans le OpenSearch Service. Si l'index contient déjà des informations, AWS Glue ajoutera les données de votre DynamicFrame. Vous devrez fournir le paramètre `pushdown`.

**Prérequis :** 
+ Une table de OpenSearch service à laquelle vous souhaitez écrire. Vous aurez besoin des informations d'identification de la table. Appelons ça*tableName*.
+ Une connexion AWS Glue OpenSearch Service configurée pour fournir des informations d'authentification et de localisation réseau. Pour cela, suivez les étapes de la procédure précédente, *Pour configurer une connexion au OpenSearch service*. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="opensearch",
    connection_options={
      "connectionName": "connectionName",
      "opensearch.resource": "aosIndex",
    },
)
```

## OpenSearch Référence des options de connexion au service
<a name="aws-glue-programming-etl-connect-opensearch-reference"></a>
+ `connectionName` — Obligatoire. Utilisé pour la lecture/l'écriture. Nom d'une connexion AWS Glue OpenSearch Service configurée pour fournir des informations d'authentification et de localisation réseau à votre méthode de connexion.
+ `opensearch.resource` — Obligatoire. Utilisé pour la lecture/l'écriture. Valeurs valides : noms d' OpenSearch index. Le nom de l'index avec lequel votre méthode de connexion va interagir.
+ `opensearch.query` : utilisé pour la lecture. Valeurs valides : chaîne JSON échappée ou, lorsque cette chaîne commence par `?`, la partie de recherche d'une URL. Une OpenSearch requête qui filtre ce qui doit être récupéré lors de la lecture. Pour plus d'informations sur l'utilisation de ce paramètre, consultez la section précédente [Lecture à partir des index OpenSearch de service](#aws-glue-programming-etl-connect-opensearch-read).
+ `pushdown` — Obligatoire si. Utilisé pour la lecture. Valeurs valides : booléen. Demande à Spark de transmettre les requêtes de lecture OpenSearch afin que la base de données ne renvoie que les documents pertinents.
+ `opensearch.read.field.as.array.include` : obligatoire en cas de lecture de données de type tableau. Utilisé pour la lecture. Valeurs valides : listes de noms de champs séparés par des virgules. Spécifie les champs à lire sous forme de tableaux à partir de OpenSearch documents. Pour plus d'informations sur l'utilisation de ce paramètre, consultez la section précédente [Lecture à partir des index OpenSearch de service](#aws-glue-programming-etl-connect-opensearch-read).

# Connexions Redshift
<a name="aws-glue-programming-etl-connect-redshift-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans les tables des bases de données Amazon Redshift. Lors de la connexion aux bases de données Amazon Redshift, AWS Glue déplace les données via Amazon S3 pour atteindre un débit maximal, en utilisant le code SQL et les commandes Amazon Redshift. `COPY` `UNLOAD` Dans AWS Glue 4.0 et versions ultérieures, vous pouvez utiliser l'[intégration Amazon Redshift pour Apache Spark pour](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html) lire et écrire avec des optimisations et des fonctionnalités spécifiques à Amazon Redshift, au-delà de celles disponibles lors de la connexion via les versions précédentes. 

Découvrez comment AWS Glue facilite plus que jamais la migration des utilisateurs d'Amazon Redshift vers AWS Glue pour l'intégration des données sans serveur et l'ETL.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/ZapycBq8TKU/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/ZapycBq8TKU)


## Configuration des connexions Redshift
<a name="aws-glue-programming-etl-connect-redshift-configure"></a>

Pour utiliser les clusters Amazon Redshift dans AWS Glue, vous devez remplir certaines conditions préalables :
+ Un répertoire Amazon S3 à utiliser pour le stockage temporaire lors de la lecture et de l'écriture dans la base de données.
+ Un Amazon VPC permettant la communication entre votre cluster Amazon Redshift, votre tâche AWS Glue et votre répertoire Amazon S3.
+ Autorisations IAM appropriées sur le job AWS Glue et le cluster Amazon Redshift.

### Configuration des rôles IAM
<a name="aws-glue-programming-etl-redshift-config-iam"></a>

**Configurer le rôle pour le cluster Amazon Redshift**  
Votre cluster Amazon Redshift doit être capable de lire et d'écrire sur Amazon S3 pour pouvoir s'intégrer aux tâches AWS Glue. Pour autoriser cela, vous pouvez associer des rôles IAM au cluster Amazon Redshift auquel vous souhaitez vous connecter. Votre rôle doit disposer d'une politique autorisant la lecture et l'écriture dans votre répertoire temporaire Amazon S3. Votre rôle doit avoir une relation de confiance permettant au service `redshift.amazonaws.com` de `AssumeRole`.

**Pour associer un rôle IAM à Amazon Redshift**

1. **Conditions préalables :** un compartiment ou un répertoire Amazon S3 utilisé pour le stockage temporaire de fichiers.

1. Identifiez les autorisations Amazon S3 dont votre cluster Amazon Redshift aura besoin. Lors du déplacement de données vers et depuis un cluster Amazon Redshift, les tâches AWS Glue émettent des instructions COPY et UNLOAD à l'encontre d'Amazon Redshift. Si votre tâche modifie une table dans Amazon Redshift, AWS Glue émettra également des instructions CREATE LIBRARY. Pour plus d'informations sur les autorisations Amazon S3 spécifiques requises pour qu'Amazon Redshift exécute ces instructions, consultez la documentation Amazon Redshift : [Amazon Redshift :](https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-access-permissions.html) Permissions to access other Resources. AWS 

1. Dans la console IAM, créez une politique IAM avec les autorisations nécessaires. Pour plus d'informations sur la création de politiques, consultez [Création de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html). 

1. Dans la console IAM, créez un rôle et une relation de confiance permettant à Amazon Redshift d'assumer ce rôle. Suivez les instructions de la documentation IAM [pour créer un rôle pour un AWS service (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)
   + Lorsqu'on vous demande de choisir un cas d'utilisation du AWS service, choisissez « Redshift - Personnalisable ».
   + Lorsque vous êtes invité à joindre une politique, choisissez celle que vous avez définie précédemment.
**Note**  
Pour plus d'informations sur la configuration des rôles pour Amazon Redshift, consultez la section [Autoriser Amazon Redshift à accéder à d'autres AWS services en votre nom dans la](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html) documentation Amazon Redshift. 

1. Dans la console Amazon Redshift, associez le rôle à votre cluster Amazon Redshift. Suivez les instructions de la [documentation Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html).

   Sélectionnez l'option en surbrillance dans la console Amazon Redshift pour configurer ce paramètre :  
![\[Un exemple de l'endroit où gérer les autorisations IAM dans la console Amazon Redshift.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/RS-role-config.png)

**Note**  
 Par défaut, les tâches AWS Glue transmettent les informations d'identification temporaires Amazon Redshift créées à l'aide du rôle que vous avez spécifié pour exécuter la tâche. Nous vous déconseillons d'utiliser ces informations d'identification. Pour des raisons de sécurité, ces informations d'identification expirent au bout d'une heure. 

**Configuration du rôle pour la tâche AWS Glue**  
La tâche AWS Glue a besoin d'un rôle pour accéder au compartiment Amazon S3. Vous n'avez pas besoin d'autorisations IAM pour le cluster Amazon Redshift. Votre accès est contrôlé par la connectivité dans Amazon VPC et par les informations d'identification de votre base de données.

### Configurer Amazon VPC
<a name="aws-glue-programming-etl-redshift-config-vpc"></a>

**Pour configurer l'accès pour les magasins de données Amazon Redshift**

1. Connectez-vous à la console Amazon Redshift AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)

1. Dans le volet de navigation de gauche, choisissez **Clusters**.

1. Choisissez le nom du cluster auquel vous souhaitez accéder à partir d'AWS Glue.

1. Dans la section **Cluster Properties (Propriétés du cluster)**, choisissez un groupe de sécurité dans **VPC security groups (Groupes de sécurité VPC)** afin de permettre à AWS Glue de l'utiliser. Enregistrez le nom du groupe de sécurité que vous avez choisi pour référence ultérieure. Lorsque vous choisissez le groupe de sécurité, la liste des **groupes de sécurité** de la console Amazon EC2 s'ouvre.

1. Choisissez le groupe de sécurité à modifier et accédez à l'onglet **Inbound** (Entrant).

1. Ajoutez une règle avec référence circulaire afin de permettre aux composants AWS Glue de communiquer. Plus spécifiquement, ajoutez ou confirmez qu'il existe une règle **Type** `All TCP`, que **Protocol** (Protocole) est `TCP`, que **Port Range** (Plage de ports) comprend tous les ports et que la valeur de **Source** est le même nom de groupe de sécurité que la valeur de **Group ID** (ID du groupe). 

   La règle entrante ressemble à ce qui suit :   
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

   Par exemple :  
![\[Exemple de règle de trafic entrant avec référence circulaire.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/SetupSecurityGroup-Start.png)

1. Ajoutez également une règle pour le trafic sortant. Ouvrez le trafic sortant pour tous les ports, par exemple :  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

   Ou créez une règle avec référence circulaire où **Type** est `All TCP`, **Protocol (Protocole)** est `TCP`, **Port Range (Plage de ports)** comprend tous les ports et dont la valeur de **Destination** est le même nom de groupe de sécurité que la valeur de **Group ID (ID du groupe)**. Si vous utilisez un point de terminaison d'un VPC Amazon S3, ajoutez également une règle HTTPS pour l'accès à Amazon S3. Le *s3-prefix-list-id* est requis dans la règle du groupe de sécurité pour autoriser le trafic entre le VPC et le point de terminaison Amazon S3 VPC.

   Par exemple :  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/aws-glue-programming-etl-connect-redshift-home.html)

### Configurer AWS Glue
<a name="aws-glue-programming-etl-redshift-config-glue"></a>

Vous devez créer une connexion AWS Glue Data Catalog qui fournit les informations de connexion Amazon VPC.

**Pour configurer la connectivité Amazon Redshift entre Amazon VPC et Glue dans la console AWS**

1. Créez une connexion au catalogue de données en suivant les étapes décrites dans :[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour l'étape suivante. *connectionName*
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez **Amazon Redshift**.
   + Lorsque vous sélectionnez un **cluster Redshift**, sélectionnez le nom de votre cluster.
   + Fournissez les informations de connexion par défaut pour un utilisateur Amazon Redshift sur votre cluster.
   + Vos paramètres Amazon VPC seront automatiquement configurés.
**Note**  
Vous devrez fournir `PhysicalConnectionRequirements` manuellement pour votre Amazon VPC lorsque vous créez une connexion **Amazon Redshift** via le kit AWS SDK.

1. Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Exemple : lecture à partir de tables Amazon Redshift
<a name="aws-glue-programming-etl-connect-redshift-read"></a>

 Vous pouvez lire à partir de clusters Amazon Redshift et des environnements Amazon Redshift sans serveur. 

**Conditions préalables :** une table Amazon Redshift à partir de laquelle vous souhaitez lire. Suivez les étapes décrites dans la section précédente, [Configuration des connexions Redshift](#aws-glue-programming-etl-connect-redshift-configure) après quoi vous devriez avoir l'URI Amazon S3 pour un répertoire temporaire *temp-s3-dir* et un rôle IAM (dans le compte*role-account-id*). *rs-role-name*

------
#### [ Using the Data Catalog ]

**Conditions préalables supplémentaires :** une base de données et une table de catalogue de données pour la table Amazon Redshift à partir de laquelle vous souhaitez lire. Pour plus d'informations sur le catalogue de données, consultez [Découverte et catalogage des données dans AWS Glue](catalog-and-crawler.md). Après avoir créé une entrée pour votre table Amazon Redshift, vous identifierez votre connexion à l'aide d'un *redshift-dc-database-name* et. *redshift-table-name*

**Configuration :** dans les options de votre fonction, vous identifierez votre table de catalogue de données avec les paramètres `database` et `table_name`. Vous identifierez votre répertoire temporaire Amazon S3 avec `redshift_tmp_dir`. Vous fournirez également *rs-role-name* en utilisant la `aws_iam_role` clé dans le `additional_options` paramètre.

```
 glueContext.create_dynamic_frame.from_catalog(
    database = "redshift-dc-database-name", 
    table_name = "redshift-table-name", 
    redshift_tmp_dir = args["temp-s3-dir"], 
    additional_options = {"aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name"})
```

------
#### [ Connecting directly ]

**Conditions préalables supplémentaires :** vous aurez besoin du nom de votre table Amazon Redshift (. *redshift-table-name* Vous aurez besoin des informations de connexion JDBC pour le cluster Amazon Redshift qui stocke cette table. Vous fournirez vos informations de connexion avec *host**port*,*redshift-database-name*, *username* et*password*.

Vous pouvez récupérer vos informations de connexion depuis la console Amazon Redshift lorsque vous travaillez avec des clusters Amazon Redshift. Pour l'utilisation d'Amazon Redshift sans serveur, consultez [Connexion à Amazon Redshift sans serveur](https://docs.aws.amazon.com//redshift/latest/mgmt/serverless-connecting.html) dans la documentation Amazon Redshift.

**Configuration :** dans les options de votre fonction, vous identifierez vos paramètres de connexions avec `url`, `dbtable`, `user` et `password`. Vous identifierez votre répertoire temporaire Amazon S3 avec `redshift_tmp_dir`. Vous pouvez spécifier votre rôle IAM en utilisant `aws_iam_role` lorsque vous utilisez `from_options`. La syntaxe est similaire à celle de la connexion via le catalogue de données, mais vous placez les paramètres sur la carte `connection_options`.

C'est une mauvaise pratique de coder en dur les mots de passe dans les scripts AWS Glue. Envisagez de stocker vos mots de passe AWS Secrets Manager et de les récupérer dans votre script avec le SDK for Python (Boto3).

```
my_conn_options = {  
    "url": "jdbc:redshift://host:port/redshift-database-name",
    "dbtable": "redshift-table-name",
    "user": "username",
    "password": "password",
    "redshiftTmpDir": args["temp-s3-dir"],
    "aws_iam_role": "arn:aws:iam::account id:role/rs-role-name"
}

df = glueContext.create_dynamic_frame.from_options("redshift", my_conn_options)
```

------

## Exemple : écrire sur des tables Amazon Redshift
<a name="aws-glue-programming-etl-connect-redshift-write"></a>

 Vous pouvez sur des clusters Amazon Redshift et des environnements Amazon Redshift sans serveur. 

**Conditions préalables :** un cluster Amazon Redshift et suivez les étapes de la [Configuration des connexions Redshift](#aws-glue-programming-etl-connect-redshift-configure) section précédente, après quoi vous devriez avoir l'URI Amazon S3 pour un répertoire temporaire et un rôle IAM*temp-s3-dir*,*rs-role-name*, (dans le compte). *role-account-id* Vous aurez également besoin d'un `DynamicFrame` dont vous souhaitez écrire le contenu dans la base de données. 

------
#### [ Using the Data Catalog ]

**Conditions préalables supplémentaires :** une base de données de catalogue de données pour le cluster Amazon Redshift et la table sur laquelle vous souhaitez écrire. Pour plus d'informations sur le catalogue de données, consultez [Découverte et catalogage des données dans AWS Glue](catalog-and-crawler.md). Vous allez identifier votre connexion avec *redshift-dc-database-name* et la table cible avec*redshift-table-name*.

**Configuration :** dans les options de votre fonction, vous identifierez votre base de données de catalogue de données avec les paramètres `database`, puis vous fournirez votre table avec `table_name`. Vous identifierez votre répertoire temporaire Amazon S3 avec `redshift_tmp_dir`. Vous fournirez également *rs-role-name* en utilisant la `aws_iam_role` clé dans le `additional_options` paramètre.

```
 glueContext.write_dynamic_frame.from_catalog(
    frame = input dynamic frame, 
    database = "redshift-dc-database-name", 
    table_name = "redshift-table-name", 
    redshift_tmp_dir = args["temp-s3-dir"], 
    additional_options = {"aws_iam_role": "arn:aws:iam::account-id:role/rs-role-name"})
```

------
#### [ Connecting through a AWS Glue connection ]

Vous pouvez vous connecter directement à Amazon Redshift à l'aide de la méthode `write_dynamic_frame.from_options`. Toutefois, plutôt que d'insérer vos informations de connexion directement dans votre script, vous pouvez référencer les informations de connexion stockés dans une connexion au catalogue de données à l'aide de la méthode `from_jdbc_conf`. Vous pouvez le faire sans indexation de site web ou sans créer de tables de catalogue de données pour votre base de données. Pour plus d'informations sur les connexions au catalogue de données, consultez [Connexion aux données](glue-connections.md).

**Conditions préalables supplémentaires :** une base au catalogue de données pour votre base de données, une table Amazon Redshift à partir de laquelle vous souhaitez lire.

**Configuration :** vous allez identifier votre connexion au catalogue de données avec*dc-connection-name*. Vous identifierez votre base de données et votre table Amazon Redshift avec *redshift-table-name* et. *redshift-database-name* Vous fournirez les informations de connexion à votre catalogue de données avec `catalog_connection` et vos informations Amazon Redshift avec `dbtable` et `database`. La syntaxe est similaire à celle de la connexion via le catalogue de données, mais vous placez les paramètres sur la carte `connection_options`. 

```
my_conn_options = {
    "dbtable": "redshift-table-name",
    "database": "redshift-database-name",
    "aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name"
}

glueContext.write_dynamic_frame.from_jdbc_conf(
    frame = input dynamic frame, 
    catalog_connection = "dc-connection-name", 
    connection_options = my_conn_options, 
    redshift_tmp_dir = args["temp-s3-dir"])
```

------

## Référence des options de connexion Amazon Redshift
<a name="w2aac67c11c24b8c21c15"></a>

Les options de connexion de base utilisées pour toutes les connexions JDBC AWS Glue afin de configurer des informations telles que`url`, `user` et `password` sont cohérentes entre tous les types de JDBC. Pour plus d'informations sur les paramètres JDBC standards, consultez [Référence des options de connexion JDBC](aws-glue-programming-etl-connect-jdbc-home.md#aws-glue-programming-etl-connect-jdbc).

Le type de connexion Amazon Redshift propose des options de connexion supplémentaires :
+ `"redshiftTmpDir"` : (obligatoire) chemin Amazon S3 où les données temporaires peuvent être stockées lors de la copie à partir de la base de données.
+ `"aws_iam_role"` : (facultatif) ARN pour un rôle IAM. La tâche AWS Glue transmettra ce rôle au cluster Amazon Redshift pour accorder au cluster les autorisations nécessaires pour exécuter les instructions de la tâche.

### Options de connexion supplémentaires disponibles dans AWS Glue 4.0\$1
<a name="aws-glue-programming-etl-redshift-enhancements"></a>

Vous pouvez également transmettre les options du nouveau connecteur Amazon Redshift via les options de connexion AWS Glue. Pour obtenir la liste complète des options de connecteur prises en charge, consultez la section relative aux *paramètres SQL de Spark* dans [Intégration Amazon Redshift pour Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html).

Pour vous faciliter la tâche, nous vous rappelons ici certaines nouvelles options :


| Nom | Obligatoire | Par défaut | Description | 
| --- | --- | --- | --- | 
|  autopushdown  | Non | TRUE |  Applique le pushdown des prédicats et des requêtes en capturant et en analysant les plans logiques de Spark pour les opérations SQL. Les opérations sont traduites en une requête SQL, puis exécutées dans Amazon Redshift pour améliorer les performances.  | 
|  autopushdown.s3\$1result\$1cache  | Non | FALSE |  Met en cache la requête SQL pour décharger les données du mappage des chemins Amazon S3 en mémoire, afin que la même requête n'ait pas besoin de s'exécuter à nouveau dans la même session Spark. Pris en charge uniquement lorsqu'`autopushdown` est activé.  | 
|  unload\$1s3\$1format  | Non | PARQUET |  PARQUET : décharge les résultats de la requête au format Parquet. TEXTE : décharge les résultats de la requête séparés par une barre verticale au format texte.  | 
|  sse\$1kms\$1key  | Non | N/A |  La clé AWS SSE-KMS à utiliser pour le chiffrement pendant les `UNLOAD` opérations au lieu du chiffrement par défaut pour. AWS  | 
|  extracopyoptions  | Non | N/A |  Une liste d'options supplémentaires à ajouter à la commande `COPY` d'Amazon Redshift lors du chargement de données, telles que `TRUNCATECOLUMNS` ou `MAXERROR n` (pour en savoir plus sur les autres options, voir [COPY : paramètres facultatifs](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax-overview-optional-parameters)).  Notez que ces options étant ajoutées à la fin de la commande `COPY`, seules des options qui ont du sens peuvent être utilisées à la fin de la commande. Cela devrait couvrir la plupart des cas d'utilisation possibles.  | 
|  csvnullstring (expérimental)  | Non | NULL |  La valeur de chaîne à écrire pour les valeurs nulles lors de l'utilisation du `tempformat` CSV. Il doit s'agir d'une valeur qui n'apparaît pas dans vos données réelles.  | 

Ces nouveaux paramètres peuvent être utilisés comme suit.

**Nouvelles options destinées à améliorer les performances**  
Le nouveau connecteur intègre de nouvelles options d'amélioration des performances :
+ `autopushdown` : activée par défaut.
+ `autopushdown.s3_result_cache` : désactivée par défaut.
+ `unload_s3_format` : `PARQUET` par défaut.

Pour plus d'informations sur l'utilisation de ces options, consultez [Intégration Amazon Redshift pour Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html). Nous vous recommandons de ne pas activer ` autopushdown.s3_result_cache` lorsque vous effectuez des opérations mixtes (lecture et écriture), car les résultats mis en cache peuvent contenir des informations périmées. L'option `unload_s3_format` est définie sur `PARQUET` par défaut pour la commande `UNLOAD`, afin d'améliorer les performances et de réduire les coûts de stockage. Pour utiliser le comportement par défaut de la commande `UNLOAD`, réinitialisez l'option sur `TEXT`.

**Nouvelle option de chiffrement pour la lecture**  
Par défaut, les données du dossier temporaire que AWS Glue utilise lors de la lecture des données de la table Amazon Redshift sont chiffrées à l'aide du chiffrement `SSE-S3`. Pour utiliser les clés gérées par le client à partir de AWS Key Management Service (AWS KMS) pour chiffrer vos données, vous pouvez définir d'`("sse_kms_key" → kmsKey)`où KSMKey est l'[ID de clé AWS KMS, au lieu de](https://docs.aws.amazon.com/kms/latest/developerguide/find-cmk-id-arn.html) l'ancienne option `("extraunloadoptions" → s"ENCRYPTED KMS_KEY_ID '$kmsKey'")` de configuration de la version 3.0. AWS Glue

```
datasource0 = glueContext.create_dynamic_frame.from_catalog(
  database = "database-name", 
  table_name = "table-name", 
  redshift_tmp_dir = args["TempDir"],
  additional_options = {"sse_kms_key":"<KMS_KEY_ID>"}, 
  transformation_ctx = "datasource0"
)
```

**Prise en charge de l'URL JDBC basée sur IAM**  
Le nouveau connecteur prend en charge une URL JDBC basée sur IAM, vous n'avez donc pas besoin de transmettre un code secret. user/password Avec une URL JDBC basée sur IAM, le connecteur utilise le rôle d'exécution des tâches pour accéder à la source de données Amazon Redshift. 

Étape 1 : associez la politique minimale requise suivante à votre rôle d'exécution de tâches AWS Glue.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "redshift:GetClusterCredentials",
            "Resource": [
                "arn:aws:redshift:us-east-1:111122223333:dbgroup:<cluster name>/*",
                "arn:aws:redshift:*:111122223333:dbuser:*/*",
                "arn:aws:redshift:us-east-1:111122223333:dbname:<cluster name>/<database name>"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "redshift:DescribeClusters",
            "Resource": "*"
        }
    ]
}
```

------

Étape 2 : utilisez l'URL JDBC basée sur IAM comme suit. Spécifiez une nouvelle option `DbUser` avec le nom d'utilisateur Amazon Redshift qui permet de vous connecter.

```
conn_options = {
     // IAM-based JDBC URL
    "url": "jdbc:redshift:iam://<cluster name>:<region>/<database name>",
    "dbtable": dbtable,
    "redshiftTmpDir": redshiftTmpDir,
    "aws_iam_role": aws_iam_role,
    "DbUser": "<Redshift User name>" // required for IAM-based JDBC URL
    }

redshift_write = glueContext.write_dynamic_frame.from_options(
    frame=dyf,
    connection_type="redshift",
    connection_options=conn_options
)

redshift_read = glueContext.create_dynamic_frame.from_options(
    connection_type="redshift",
    connection_options=conn_options
)
```

**Note**  
`DynamicFrame` ne prend actuellement en charge qu'une URL JDBC basée sur IAM avec un ` DbUser` dans le flux de travail `GlueContext.create_dynamic_frame.from_options`. 

## Migration de AWS Glue version 3.0 vers la version 4.0
<a name="aws-glue-programming-etl-redshift-migrating"></a>

Dans AWS Glue 4.0, les tâches ETL ont accès à un nouveau connecteur Amazon Redshift Spark et à un nouveau pilote JDBC avec différentes options et configurations. Le nouveau connecteur et le nouveau pilote Amazon Redshift ont été conçus dans un souci de performance et garantissent la cohérence transactionnelle de vos données. Ces produits sont décrits dans la documentation Amazon Redshift. Pour en savoir plus, consultez :
+ [Intégration Amazon Redshift pour Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html)
+ [Pilote Amazon Redshift JDBC, version 2.1](https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-download-driver.html)

**Restriction portant sur les noms et les identifiants des tables et des colonnes**  
Concernant le nom de la table Redshift, les exigences du nouveau connecteur et du nouveau pilote Amazon Redshift Spark sont plus restreintes. Pour plus d'informations, consultez la section [Noms et identifiants](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) qui explique comment définir le nom de votre table Amazon Redshift. Le flux de travail des signets de tâches peut ne pas fonctionner avec un nom de table non conforme aux règles et avec certains caractères (l'espace, par exemple).

Si vous utilisez d'anciennes tables dont les noms ne sont pas conformes aux règles relatives aux [noms et identifiants](https://docs.aws.amazon.com/redshift/latest/dg/r_names.html) et que vous rencontrez des problèmes liés aux signets (tâches dédiées au retraitement des données d'anciennes tables Amazon Redshift), nous vous recommandons de renommer vos tables. Pour plus d'informations, consultez les [exemples d'utilisation de la commande ALTER TABLE](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE_examples_basic.html). 

**Modification de tempformat par défaut dans le Dataframe**  
Le connecteur Spark de AWS Glue version 3.0 définit par défaut le `tempformat` sur CSV lors de l'écriture dans Amazon Redshift. Par souci de cohérence, dans AWS Glue version 3.0, ` DynamicFrame` définit toujours par défaut le `tempformat` de manière à utiliser le format `CSV`. Si vous avez déjà utilisé Spark Dataframe APIs directement avec le connecteur Amazon Redshift Spark, vous pouvez définir explicitement le format CSV dans `tempformat` `DataframeReader` les options/. `Writer` Sinon, `tempformat` est défini par défaut sur `AVRO` dans le nouveau connecteur Spark.

**Changement de comportement : mapper le type de données Amazon Redshift REAL sur le type de données FLOAT de Spark au lieu de DOUBLE**  
Dans AWS Glue version 3.0, Amazon Redshift `REAL` est converti en type ` DOUBLE` de Spark. Le nouveau connecteur Amazon Redshift Spark a mis à jour le comportement afin que le type Amazon Redshift ` REAL` soit converti en type `FLOAT` de Spark et inversement. Si, conformément à un ancien cas d'utilisation, vous souhaitez toujours que le type `REAL` Amazon Redshift soit mappé sur un type Spark `DOUBLE`, vous pouvez utiliser la solution alternative suivante :
+ Pour un `DynamicFrame`, mappez le type `Float` sur un type `Double` avec `DynamicFrame.ApplyMapping`. Pour un `Dataframe`, vous devez utiliser `cast`.

Exemple de code :

```
dyf_cast = dyf.apply_mapping([('a', 'long', 'a', 'long'), ('b', 'float', 'b', 'double')])
```

**Gestion du type de données VARBYTE**  
Lorsque vous travaillez avec les types de données AWS Glue 3.0 et Amazon Redshift, AWS Glue 3.0 convertit Amazon `VARBYTE` Redshift en type Spark. `STRING` Cependant, le dernier connecteur Amazon Redshift Spark ne prend pas en charge le type de données `VARBYTE`. Pour contourner cette restriction, vous pouvez [créer une vue Redshift](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_VIEW.html) qui transforme les colonnes `VARBYTE` en type de données compatible. Utilisez ensuite le nouveau connecteur pour charger les données à partir de cette vue au lieu de la table d’origine, ce qui garantit la compatibilité tout en maintenant l’accès à vos données `VARBYTE`.

Exemple de requête Redshift :

```
CREATE VIEW view_name AS SELECT FROM_VARBYTE(varbyte_column, 'hex') FROM table_name
```

# Connexions Kafka
<a name="aws-glue-programming-etl-connect-kafka-home"></a>

Vous pouvez utiliser une connexion Kafka pour lire et écrire dans des flux de données Kafka à l’aide d’informations stockées dans une table de catalogue de données ou en fournissant des informations permettant d’accéder directement au flux de données. La connexion prend en charge un cluster Kafka ou un cluster Amazon Managed Streaming for Apache Kafka. Vous pouvez lire les informations de Kafka dans un Spark DataFrame, puis les convertir en AWS Glue DynamicFrame. Vous pouvez DynamicFrames écrire dans Kafka au format JSON. Si vous accédez directement au flux de données, utilisez ces options pour fournir des informations sur la façon d'accéder au flux de données.

Si vous utilisez `getCatalogSource` ou `create_data_frame_from_catalog` pour consommer des enregistrements à partir d’une source de streaming Kafka, ou `getCatalogSink` ou `write_dynamic_frame_from_catalog` pour écrire des enregistrements dans Kafka, et que la tâche dispose des informations relatives à la base de données Data Catalog et au nom de la table, et peut les utiliser pour obtenir certains paramètres de base pour la lecture à partir de la source de streaming Kafka. Si vous utilisez `getSource`, `getCatalogSink`, `getSourceWithFormat`, `getSinkWithFormat`, `createDataFrameFromOptions`, `create_data_frame_from_options` ou `write_dynamic_frame_from_catalog`, vous devez spécifier ces paramètres de base à l’aide des options de connexion décrites ici.

Vous pouvez spécifier les options de connexion pour Kafka à l’aide des arguments suivants pour les méthodes spécifiées dans la classe `GlueContext`.
+ Scala
  + `connectionOptions` : utiliser avec `getSource`, `createDataFrameFromOptions`, `getSink` 
  + `additionalOptions` : utiliser avec `getCatalogSource`, `getCatalogSink`
  + `options` : utiliser avec `getSourceWithFormat`, `getSinkWithFormat`
+ Python
  + `connection_options` : utiliser avec `create_data_frame_from_options`, `write_dynamic_frame_from_options`
  + `additional_options` : utiliser avec `create_data_frame_from_catalog`, `write_dynamic_frame_from_catalog`
  + `options` : utiliser avec `getSource`, `getSink`

Pour les remarques et les restrictions concernant les tâches ETL de streaming, consultez [Restrictions et notes sur ETL en streaming](add-job-streaming.md#create-job-streaming-restrictions).

**Topics**
+ [

## Configurer Kafka
](#aws-glue-programming-etl-connect-kafka-configure)
+ [

## Exemple : lecture à partir de flux Kafka
](#aws-glue-programming-etl-connect-kafka-read)
+ [

## Exemple : écriture dans les flux Kafka
](#aws-glue-programming-etl-connect-kafka-write)
+ [

## Référence des options de connexion de Kafka
](#aws-glue-programming-etl-connect-kafka)

## Configurer Kafka
<a name="aws-glue-programming-etl-connect-kafka-configure"></a>

Il n'y a aucune AWS condition préalable pour se connecter aux flux Kafka disponibles sur Internet.

Vous pouvez créer une connexion AWS Glue Kafka pour gérer vos identifiants de connexion. Pour de plus amples informations, veuillez consulter [Création d’une connexion AWS Glue pour un flux de données Apache Kafka](add-job-streaming.md#create-conn-streaming). Dans la configuration de votre tâche AWS Glue, fournissez *connectionName* une **connexion réseau supplémentaire**, puis, dans votre appel de méthode, fournissez *connectionName* le `connectionName` paramètre.

Dans certains cas, vous devrez configurer des prérequis supplémentaires :
+ Si vous utilisez Amazon Managed Streaming pour Apache Kafka avec l'authentification IAM, vous aurez besoin d'une configuration IAM appropriée.
+ Si vous utilisez Amazon Managed Streaming pour Apache Kafka avec un Amazon VPC, vous aurez besoin d'une configuration Amazon VPC appropriée. Vous devez créer une connexion AWS Glue fournissant les informations de connexion Amazon VPC. Vous aurez besoin de la configuration de votre tâche pour inclure la connexion AWS Glue en tant que **connexion réseau supplémentaire**.

Pour plus d’informations sur les prérequis de la tâche ETL de streaming, consultez [Tâches ETL en streaming dans AWS Glue](add-job-streaming.md).

## Exemple : lecture à partir de flux Kafka
<a name="aws-glue-programming-etl-connect-kafka-read"></a>

Utilisez conjointement avec [forEachBatch](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-forEachBatch).

Exemple pour la source de streaming Kafka :

```
kafka_options =
    { "connectionName": "ConfluentKafka", 
      "topicName": "kafka-auth-topic", 
      "startingOffsets": "earliest", 
      "inferSchema": "true", 
      "classification": "json" 
    }
data_frame_datasource0 = glueContext.create_data_frame.from_options(connection_type="kafka", connection_options=kafka_options)
```

## Exemple : écriture dans les flux Kafka
<a name="aws-glue-programming-etl-connect-kafka-write"></a>

Exemples pour écrire dans Kafka :

Exemple avec la méthode `getSink` :

```
data_frame_datasource0 = 
glueContext.getSink(
	connectionType="kafka",
	connectionOptions={
		JsonOptions("""{
			"connectionName": "ConfluentKafka", 
			"classification": "json", 
			"topic": "kafka-auth-topic", 
			"typeOfData": "kafka"}
		""")}, 
	transformationContext="dataframe_ApacheKafka_node1711729173428")
	.getDataFrame()
```

Exemple avec la méthode `write_dynamic_frame.from_options` :

```
kafka_options =
    { "connectionName": "ConfluentKafka", 
      "topicName": "kafka-auth-topic", 
      "classification": "json" 
    }
data_frame_datasource0 = glueContext.write_dynamic_frame.from_options(connection_type="kafka", connection_options=kafka_options)
```

## Référence des options de connexion de Kafka
<a name="aws-glue-programming-etl-connect-kafka"></a>

Lors de la lecture, utilisez les options de connexion suivantes avec `"connectionType": "kafka"` :
+ `"bootstrap.servers"`(Obligatoire) Une liste de serveurs bootstrap URLs, par exemple, comme`b-1.vpc-test-2.o4q88o.c6.kafka.us-east-1.amazonaws.com:9094`. Cette option doit être spécifiée dans l'appel d'API ou définie dans les métadonnées de la table dans le catalogue de données.
+ `"security.protocol"`(Obligatoire) Le protocole utilisé pour communiquer avec les agents. Les valeurs possibles sont `"SSL"` ou `"PLAINTEXT"`.
+ `"topicName"` : (requis) liste de rubriques séparées par des virgules auxquelles s'abonner. Vous devez spécifier un seul et unique élément parmi `"topicName"`, `"assign"` ou `"subscribePattern"`.
+ `"assign"` : (requis) chaîne JSON indiquant le `TopicPartitions` spécifique à utiliser. Vous devez spécifier un seul et unique élément parmi `"topicName"`, `"assign"` ou `"subscribePattern"`.

  Exemple : '\$1"topicA":[0,1],"topicB":[2,4]\$1'
+ `"subscribePattern"` : (obligatoire) chaîne d'expression rationnelle Java qui identifie la liste de rubriques à laquelle vous souhaitez vous abonner. Vous devez spécifier un seul et unique élément parmi `"topicName"`, `"assign"` ou `"subscribePattern"`.

  Exemple : 'topic.\$1'
+ `"classification"` : (obligatoire) le format de fichier utilisé par les données de l'enregistrement. Obligatoire, sauf s'il est fourni par le catalogue de données.
+ `"delimiter"` : (facultatif) le séparateur de valeurs utilisé lorsque `classification` est CSV. La valeur par défaut est « `,` ».
+ `"startingOffsets"` : (facultatif) position de départ dans la rubrique Kafka à partir de laquelle lire les données. Les valeurs possibles sont `"earliest"` ou `"latest"`. La valeur par défaut est `"latest"`.
+ `"startingTimestamp"`: (Facultatif, disponible uniquement pour AWS la version 4.0 ou ultérieure de Glue) Horodatage de l'enregistrement dans la rubrique Kafka à partir duquel les données doivent être lues. La valeur possible est une chaîne d'horodatage au format UTC dans le modèle `yyyy-mm-ddTHH:MM:SSZ` (où `Z` représente un décalage de fuseau horaire UTC avec un \$1/-. Par exemple : « 2023-04-04T08:00:00-04:00 »).

  Remarque : seule l'une des propriétés « StartingOffsets » ou « StartingTimestamp » peut figurer dans la liste des options de connexion du script de streaming AWS Glue. L'inclusion de ces deux propriétés entraînera l'échec de la tâche.
+ `"endingOffsets"` : (facultatif) point de fin lorsqu'une requête par lots est terminée. Les valeurs possibles sont `"latest"` ou une chaîne JSON qui spécifie un décalage de fin pour chaque `TopicPartition`.

  Pour la chaîne JSON, le format est `{"topicA":{"0":23,"1":-1},"topicB":{"0":-1}}`. La valeur `-1` en tant que décalage représente `"latest"`.
+ `"pollTimeoutMs"` : (facultatif) délai d'attente en millisecondes pour interroger les données de Kafka dans les exécuteurs de tâches Spark. La valeur par défaut est `600000`.
+ `"numRetries"` : (facultatif) nombre de nouvelles tentatives avant de ne pas récupérer les décalages Kafka. La valeur par défaut est `3`.
+ `"retryIntervalMs"` : (facultatif) temps d'attente en millisecondes avant d'essayer de récupérer les décalages Kafka. La valeur par défaut est `10`.
+ `"maxOffsetsPerTrigger"` : (facultatif) limite de taux sur le nombre maximal de décalages qui sont traités par intervalle de déclenchement. Le nombre total spécifié de décalages est réparti proportionnellement entre les `topicPartitions` des différents volumes. La valeur par défaut est null, ce qui signifie que le consommateur lit tous les décalages jusqu'au dernier décalage connu.
+ `"minPartitions"` : (facultatif) nombre minimum de partitions à lire à partir de Kafka. La valeur par défaut est nulle, ce qui signifie que le nombre de partitions Spark est égal au nombre de partitions Kafka.
+  `"includeHeaders"`: (facultatif) indique s'il faut inclure les en-têtes Kafka. Lorsque l'option est définie sur « true » (vrai), la sortie de données contiendra une colonne supplémentaire nommée « glue\$1streaming\$1kafka\$1headers » avec le type `Array[Struct(key: String, value: String)]`. La valeur définie par défaut est « false ». Cette option est disponible dans AWS Glue version 3.0 ou ultérieure. 
+ `"schema"` : (requis lorsque inferSchema est défini sur false) schéma à utiliser pour traiter la charge utile. Si la classification est `avro`, le schéma fourni doit être au format de schéma Avro. Si la classification n'est pas `avro`, le schéma fourni doit être au format de schéma DDL.

  Voici quelques exemples de schémas.

------
#### [ Example in DDL schema format ]

  ```
  'column1' INT, 'column2' STRING , 'column3' FLOAT
  ```

------
#### [ Example in Avro schema format ]

  ```
  {
  "type":"array",
  "items":
  {
  "type":"record",
  "name":"test",
  "fields":
  [
    {
      "name":"_id",
      "type":"string"
    },
    {
      "name":"index",
      "type":
      [
        "int",
        "string",
        "float"
      ]
    }
  ]
  }
  }
  ```

------
+ `"inferSchema"` : (facultatif) la valeur par défaut est « false ». S'il est défini sur « true », le schéma sera détecté lors de l'exécution à partir de la charge utile dans `foreachbatch`.
+ `"avroSchema"` : (obsolète) paramètre utilisé pour spécifier un schéma de données Avro lorsque le format Avro est utilisé. Ce paramètre est désormais obsolète. Utilisez le paramètre `schema`.
+ `"addRecordTimestamp"` : (facultatif) lorsque cette option est définie sur « true », la sortie de données contient une colonne supplémentaire nommée « \$1\$1src\$1timestamp » qui indique l'heure à laquelle l'enregistrement correspondant est reçu par la rubrique. La valeur par défaut est « false ». Cette option est prise en charge dans AWS Glue version 4.0 ou ultérieure.
+ `"emitConsumerLagMetrics"`: (Facultatif) Lorsque l'option est définie sur « vrai », pour chaque lot, elle émet les métriques correspondant à la durée comprise entre le plus ancien enregistrement reçu par le sujet et le moment où il arrive CloudWatch. AWS Glue Le nom de la métrique est « glue.driver.streaming ». maxConsumerLagInMs». La valeur par défaut est « false ». Cette option est prise en charge dans AWS Glue version 4.0 ou ultérieure.

Lors de l’écriture, utilisez les options de connexion suivantes avec `"connectionType": "kafka"` :
+ `"connectionName"`(Obligatoire) Nom de la connexion AWS Glue utilisée pour se connecter au cluster Kafka (similaire à la source Kafka).
+ `"topic"` (Obligatoire) Si une colonne de rubrique existe, sa valeur est utilisée comme rubrique lors de l’écriture de la ligne donnée dans Kafka, sauf si l’option de configuration de la rubrique est définie. C’est-à-dire que l’option de configuration `topic` remplace la colonne de rubrique.
+ `"partition"` (Facultatif) Si un numéro de partition valide est spécifié, cette `partition` sera utilisée lors de l’envoi de l’enregistrement.

  Si aucune partition n’est spécifiée, mais qu’une `key` est présente, une partition sera choisie en utilisant le hachage de la clé.

  Si ni une `key`, ni une `partition` ne sont présentes, une partition sera choisie en partitionnant de manière permanente ces modifications lorsqu’au moins des octets batch.size seront produits sur la partition.
+ `"key"` (Facultatif) Utilisé pour le partitionnement si `partition` est nul.
+ `"classification"` (Facultatif) Format de fichier utilisé par les données de l’enregistrement. Nous prenons uniquement en charge les formats JSON, CSV et Avro.

  Avec le format Avro, nous pouvons fournir une valeur avroSchema personnalisée avec laquelle il est possible de sérialiser, mais notez que cela doit également être fourni sur la source pour la désérialisation. Sinon, par défaut, il utilise Apache AvroSchema pour la sérialisation.

En outre, vous pouvez optimiser le récepteur Kafka selon les besoins en mettant à jour les [paramètres de configuration du producteur Kafka](https://kafka.apache.org/documentation/#producerconfigs). Notez qu’il n’existe aucune liste d’autorisation pour les options de connexion, toutes les paires clé-valeur sont conservées telles quelles sur le récepteur.

Cependant, il existe une petite liste de refus d’options qui ne prendra pas effet. Pour plus d’informations, consultez [Kafka specific configurations](https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html).

# Connexions Azure Cosmos DB
<a name="aws-glue-programming-etl-connect-azurecosmos-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des conteneurs existants dans Azure Cosmos DB à l'aide de l'API NoSQL de AWS Glue 4.0 et des versions ultérieures. Vous pouvez définir ce qu'il faut lire dans Azure Cosmos DB à l'aide d'une requête SQL. Vous vous connectez à Azure Cosmos DB à l'aide d'une clé Azure Cosmos DB stockée AWS Secrets Manager via une connexion AWS Glue.

Pour plus d'informations sur Azure Cosmos DB pour NoSQL, consultez [la documentation Azure](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/).

## Configuration des connexions Azure Cosmos DB
<a name="aws-glue-programming-etl-connect-azurecosmos-configure"></a>

Pour vous connecter à Azure Cosmos DB depuis AWS Glue, vous devez créer et stocker votre clé de base de données Azure Cosmos dans un AWS Secrets Manager secret, puis associer ce secret à une connexion Azure Cosmos DB AWS Glue.

**Prérequis :** 
+ Dans Azure, vous devrez identifier ou générer une clé de base de données Azure Cosmos à utiliser par AWS Glue,`cosmosKey`. Pour plus d'informations, consultez la section [Accès sécurisé aux données dans Azure Cosmos DB](https://learn.microsoft.com/en-us/azure/cosmos-db/secure-access-to-data?tabs=using-primary-key) dans la documentation Azure.

**Pour configurer une connexion à Azure Cosmos DB :**

1. Dans AWS Secrets Manager, créez un secret à l'aide de votre clé de base de données Azure Cosmos. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `spark.cosmos.accountKey` contenant la valeur. *cosmosKey*

1. Dans la console AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour une utilisation future dans AWS Glue. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez Azure Cosmos DB.
   + Lorsque vous sélectionnez un **AWS secret**, fournissez*secretName*.

Après avoir créé une connexion AWS Glue Azure Cosmos DB, vous devez effectuer les étapes suivantes avant d'exécuter votre tâche AWS Glue :
+ Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire*secretName*.
+ Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Lire à partir de la Azure Cosmos DB pour les conteneurs NoSQL
<a name="aws-glue-programming-etl-connect-azurecosmos-read"></a>

**Prérequis :** 
+ Un conteneur Azure Cosmos DB pour NoSQL à partir duquel vous souhaitez lire. Vous aurez besoin des informations d'identification du conteneur.

  Un conteneur Azure Cosmos pour NoSQL est identifié par sa base de données et son conteneur. Vous devez fournir les noms de base de données et de conteneur lorsque vous vous connectez à l'API Azure Cosmos pour NoSQL. *cosmosDBName* *cosmosContainerName*
+ Une connexion AWS Glue Azure Cosmos DB configurée pour fournir des informations d'authentification et de localisation réseau. Pour cela, suivez les étapes de la procédure précédente, *Pour configurer une connexion à Azure Cosmos DB*. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
azurecosmos_read = glueContext.create_dynamic_frame.from_options(
    connection_type="azurecosmos",
    connection_options={
    "connectionName": connectionName,
    "spark.cosmos.database": cosmosDBName,
    "spark.cosmos.container": cosmosContainerName,
    }
)
```

Vous pouvez également fournir une requête SQL SELECT pour filtrer les résultats renvoyés à votre DynamicFrame. Vous devrez configurer `query`.

Par exemple :

```
azurecosmos_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="azurecosmos",
    connection_options={
        "connectionName": "connectionName",
        "spark.cosmos.database": cosmosDBName,
        "spark.cosmos.container": cosmosContainerName,
        "spark.cosmos.read.customQuery": "query"
    }
)
```

## Écrire dans Azure Cosmos DB pour les conteneurs NoSQL
<a name="aws-glue-programming-etl-connect-azurecosmos-write"></a>

Cet exemple écrit des informations à partir d'une base de données existante DynamicFrame *dynamicFrame* dans Azure Cosmos DB. Si le conteneur contient déjà des informations, AWS Glue ajoutera les données de votre DynamicFrame. Si les informations contenues dans le conteneur ont un schéma différent de celui des informations que vous écrivez, vous rencontrerez des erreurs.

**Prérequis :** 
+ Une table Azure Cosmos DB dans laquelle vous souhaitez écrire. Vous aurez besoin des informations d'identification du conteneur. **Vous devez créer le conteneur avant d'appeler la méthode de connexion.**

  Un conteneur Azure Cosmos pour NoSQL est identifié par sa base de données et son conteneur. Vous devez fournir les noms de base de données et de conteneur lorsque vous vous connectez à l'API Azure Cosmos pour NoSQL. *cosmosDBName* *cosmosContainerName*
+ Une connexion AWS Glue Azure Cosmos DB configurée pour fournir des informations d'authentification et de localisation réseau. Pour cela, suivez les étapes de la procédure précédente, *Pour configurer une connexion à Azure Cosmos DB*. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
azurecosmos_write = glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="azurecosmos",
    connection_options={
    "connectionName": connectionName,
    "spark.cosmos.database": cosmosDBName,
    "spark.cosmos.container": cosmosContainerName
)
```

## Référence des options de connexion Azure Cosmos DB
<a name="aws-glue-programming-etl-connect-azurecosmos-reference"></a>
+ `connectionName` — Obligatoire. Utilisé pour la lecture/l'écriture. Nom d'une connexion AWS Glue Azure Cosmos DB configurée pour fournir des informations d'authentification et de localisation réseau à votre méthode de connexion.
+ `spark.cosmos.database` — Obligatoire. Utilisé pour la lecture/l'écriture. Valeurs valides : noms des bases de données. Nom de la base de données Azure Cosmos DB pour NoSQL.
+ `spark.cosmos.container` — Obligatoire. Utilisé pour la lecture/l'écriture. Valeurs valides : noms des conteneurs. Nom du conteneur Azure Cosmos DB pour NoSQL.
+ `spark.cosmos.read.customQuery` : utilisé pour la lecture. Valeurs valides : requêtes SELECT SQL. Requête personnalisée pour sélectionner les documents à lire.

# Connexions Azure SQL
<a name="aws-glue-programming-etl-connect-azuresql-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables sur des instances gérées Azure SQL dans AWS Glue 4.0 et versions ultérieures. Vous pouvez définir ce qu'il faut lire dans Azure SQL à l'aide d'une requête SQL. Vous vous connectez à Azure SQL à l'aide des informations d'identification d'utilisateur et de mot de passe stockées AWS Secrets Manager via une connexion AWS Glue.

Pour plus d'informations sur Azure SQL, consultez [la documentation Azure SQL](https://azure.microsoft.com/en-us/products/azure-sql).

## Configuration des connexions Azure SQL
<a name="aws-glue-programming-etl-connect-azuresql-configure"></a>

Pour vous connecter à Azure SQL depuis AWS Glue, vous devez créer et stocker vos informations d'identification Azure SQL dans un AWS Secrets Manager secret, puis associer ce secret à une connexion Azure SQL AWS Glue.

**Pour configurer une connexion à Azure SQL :**

1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification Azure SQL. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `user` contenant la valeur. *azuresqlUsername*
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `password` contenant la valeur. *azuresqlPassword*

1. Dans la console AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour une utilisation future dans AWS Glue. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez Azure SQL.
   + Lorsque vous fournissez une **URL Azure SQL**, fournissez une URL de point de terminaison JDBC.

      La URL doit avoir le format suivant : `jdbc:sqlserver://databaseServerName:databasePort;databaseName=azuresqlDBname;`.

     AWS Glue nécessite les propriétés d'URL suivantes : 
     + `databaseName` – une base de données par défaut dans Azure SQL à laquelle se connecter.

     Pour plus d'informations sur JDBC URLs pour Azure SQL Managed Instances, consultez la documentation [Microsoft](https://learn.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=azuresqldb-mi-current).
   + Lorsque vous sélectionnez un **AWS secret**, indiquez-le*secretName*.

Après avoir créé une connexion AWS Glue Azure SQL, vous devez effectuer les étapes suivantes avant d'exécuter votre tâche AWS Glue :
+ Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire*secretName*.
+ Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Lire à partir de tables SQL Azure
<a name="aws-glue-programming-etl-connect-azuresql-read"></a>

**Prérequis :** 
+ Une table Azure SQL à partir de laquelle vous souhaitez lire. Vous aurez besoin d'informations d'identification pour la table, *databaseName* et*tableIdentifier*.

  Une table Azure SQL est identifiée par sa base de données, son schéma et son nom de table. Vous devez fournir le nom de la base de données et le nom de la table lorsque vous vous connectez à Azure SQL. Vous devez également fournir le schéma s'il n'est pas « public » par défaut. La base de données est fournie via une propriété d'URL dans*connectionName*, un schéma et un nom de table via le`dbtable`.
+ Une connexion SQL AWS Glue Azure configurée pour fournir des informations d'authentification. Suivez les étapes de la procédure précédente *Pour configurer une connexion à Azure SQL* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
azuresql_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableIdentifier"
    }
)
```

Vous pouvez également fournir une requête SQL SELECT pour filtrer les résultats renvoyés à votre DynamicFrame. Vous devrez configurer `query`.

Par exemple :

```
azuresql_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "query": "query"
    }
)
```

## Écrire dans des tables Azure SQL
<a name="aws-glue-programming-etl-connect-azuresql-write"></a>

Cet exemple écrit des informations à partir d'un DynamicFrame fichier existant *dynamicFrame* dans Azure SQL. Si le tableau contient déjà des informations, AWS Glue ajoutera les données de votre DynamicFrame.

**Prérequis :** 
+ Une table Azure SQL dans laquelle vous souhaitez écrire. Vous aurez besoin d'informations d'identification pour la table, *databaseName* et*tableIdentifier*.

  Une table Azure SQL est identifiée par sa base de données, son schéma et son nom de table. Vous devez fournir le nom de la base de données et le nom de la table lorsque vous vous connectez à Azure SQL. Vous devez également fournir le schéma s'il n'est pas « public » par défaut. La base de données est fournie via une propriété d'URL dans*connectionName*, un schéma et un nom de table via le`dbtable`.
+ Informations d'authentification Azure SQL. Suivez les étapes de la procédure précédente *Pour configurer une connexion à Azure SQL* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
azuresql_write = glueContext.write_dynamic_frame.from_options(
    connection_type="azuresql",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableIdentifier"
    }
)
```

## Référence des options de connexion Azure SQL
<a name="aws-glue-programming-etl-connect-azuresql-reference"></a>
+ `connectionName` — Obligatoire. Utilisé pour la lecture/l'écriture. Le nom d'une connexion SQL AWS Glue Azure configurée pour fournir des informations d'authentification à votre méthode de connexion.
+ `databaseName` : utilisé pour la lecture/l'écriture. Valeurs valides : noms des bases de données Azure SQL. Le nom de la base de données dans Azure SQL à laquelle se connecter.
+ `dbtable` — obligatoire pour l'écriture, obligatoire pour la lecture à moins qu'une `query` ne soit fournie. Utilisé pour les combinaisons de Read/Write. Valid Values: Names of Azure SQL tables, or period separated schema/table noms. Utilisées pour spécifier la table et le schéma qui identifient la table à laquelle se connecter. Le schéma par défaut est « public ». Si votre table n'est pas dans un schéma par défaut, fournissez ces informations dans le formulaire `schemaName.tableName`.
+ `query` : utilisé pour la lecture. Une requête Transact-SQL SELECT définissant ce qui doit être récupéré lors de la lecture à partir d'Azure SQL. Pour plus d'informations, consultez la [documentation Microsoft](https://learn.microsoft.com/en-us/sql/t-sql/queries/select-transact-sql?view=azuresqldb-mi-current).

# BigQuery connexions
<a name="aws-glue-programming-etl-connect-bigquery-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tableaux de Google BigQuery dans AWS Glue 4.0 et versions ultérieures. Vous pouvez le lire à l' BigQuery aide d'une requête Google SQL. Vous vous connectez à BigQuery l'aide des informations d'identification stockées AWS Secrets Manager via une connexion AWS Glue.

Pour plus d'informations sur Google BigQuery, consultez le [ BigQuery site Web de Google Cloud](https://cloud.google.com/bigquery).

## Configuration des BigQuery connexions
<a name="aws-glue-programming-etl-connect-bigquery-configure"></a>

Pour vous connecter à Google BigQuery depuis AWS Glue, vous devez créer et stocker vos informations d'identification Google Cloud Platform dans un AWS Secrets Manager secret, puis associer ce secret à une connexion Google BigQuery AWS Glue.

**Pour configurer une connexion à BigQuery :**

1. Dans Google Cloud Platform, créez et identifiez les ressources pertinentes :
   + Créez ou identifiez un projet GCP contenant des BigQuery tables auxquelles vous souhaitez vous connecter.
   + Activez l' BigQuery API. Pour plus d'informations, voir [Utiliser l'API BigQuery Storage Read pour lire les données des tables](https://cloud.google.com/bigquery/docs/reference/storage/#enabling_the_api).

1. Dans Google Cloud Platform, créez et exportez les informations d’identification du compte de service :

   Vous pouvez utiliser l'assistant BigQuery d'identification pour accélérer cette étape : [créer des informations d'identification](https://console.cloud.google.com/apis/credentials/wizard?api=bigquery.googleapis.com).

   Pour créer un compte de service dans GCP, suivez le didacticiel disponible dans la section [Créer des comptes de service](https://cloud.google.com/iam/docs/service-accounts-create).
   + Lorsque vous sélectionnez **un projet**, sélectionnez le projet contenant votre BigQuery tableau.
   + Lorsque vous sélectionnez des rôles GCP IAM pour votre compte de service, ajoutez ou créez un rôle qui accordera les autorisations appropriées pour exécuter des BigQuery tâches de lecture, d'écriture ou de création BigQuery de tables.

   Pour créer des informations d’identification pour votre compte de service, suivez le didacticiel disponible dans la section [Créer une clé de compte de service](https://cloud.google.com/iam/docs/keys-create-delete#creating).
   + Lorsque vous sélectionnez le type de clé, sélectionnez **JSON**.

   Vous devriez maintenant avoir téléchargé un fichier JSON contenant les informations d’identification de votre compte de service. Il doit ressembler à l’exemple ci-dessous.

   ```
   {
     "type": "service_account",
     "project_id": "*****",
     "private_key_id": "*****",
     "private_key": "*****",
     "client_email": "*****",
     "client_id": "*****",
     "auth_uri": "https://accounts.google.com/o/oauth2/auth",
     "token_uri": "https://oauth2.googleapis.com/token",
     "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
     "client_x509_cert_url": "*****",
     "universe_domain": "googleapis.com"
   }
   ```

1. Téléchargez le fichier JSON de vos informations d'identification sur un emplacement Amazon S3 correctement sécurisé. Conservez le chemin d'accès au fichier *s3secretpath* pour les étapes futures.

1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification Google Cloud Platform. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 

   Lorsque vous créez des Key/value paires, spécifiez les clés et les valeurs comme suit :
   + Pour les `client_id` clés`token_uri`,,`client_x509_cert_url`,,`private_key_id`,,`project_id`,,`universe_domain`,,`auth_provider_x509_cert_url`,,`auth_uri`,,`client_email`,,`private_key`,,`type`,,,,,,,,,,,,,, spécifiez les valeurs correspondantes dans le fichier JSON téléchargé.
   + Pour la `spark.hadoop.google.cloud.auth.service.account.json.keyfile` clé, spécifiez le*s3secretpath*.

1. Dans le catalogue de données AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour l'étape suivante. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez Google BigQuery.
   + Lorsque vous sélectionnez un **AWS secret**, indiquez-le*secretName*.

1. Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire*secretName*.

1. Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Lecture à partir de BigQuery tables
<a name="aws-glue-programming-etl-connect-bigquery-read"></a>

**Prérequis :** 
+ Un BigQuery tableau que vous aimeriez lire. Vous aurez besoin des noms de BigQuery table et de jeu de données dans le formulaire`[dataset].[table]`. Appelons ça*tableName*.
+ Le projet de facturation de la BigQuery table. Vous aurez besoin du nom du projet,*parentProject*. S'il n'existe aucun projet parent de facturation, utilisez le projet contenant la table.
+ BigQuery informations d'authentification. Suivez les étapes *pour gérer vos informations de connexion avec AWS Glue* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
bigquery_read = glueContext.create_dynamic_frame.from_options(
    connection_type="bigquery",
    connection_options={
        "connectionName": "connectionName",
        "parentProject": "parentProject",
        "sourceType": "table",
        "table": "tableName",
    }
```

Vous pouvez également fournir une requête pour filtrer les résultats renvoyés à votre DynamicFrame. Vous devrez configurer `query`, `sourceType`, `viewsEnabled` et `materializationDataset`.

Par exemple :

**Prérequis supplémentaires :**

Vous devrez créer ou identifier un BigQuery jeu de données dans lequel vous BigQuery pourrez écrire des vues matérialisées pour vos requêtes. *materializationDataset*

Vous devrez accorder les autorisations GCP IAM appropriées à votre compte de service pour créer des tables dans. *materializationDataset*

```
glueContext.create_dynamic_frame.from_options(
            connection_type="bigquery",
            connection_options={
                "connectionName": "connectionName",
                "materializationDataset": materializationDataset,
                "parentProject": "parentProject",
                "viewsEnabled": "true",
                "sourceType": "query",
                "query": "select * from bqtest.test"
            }
        )
```

## Écrire sur des BigQuery tables
<a name="aws-glue-programming-etl-connect-bigquery-write"></a>

Cet exemple écrit directement dans le BigQuery service. BigQuery supporte également la méthode d'écriture « indirecte ». Pour plus d'informations sur les écritures indirectes, consultez [Utiliser l'écriture indirecte avec Google BigQuery](#aws-glue-programming-etl-connect-bigquery-indirect-write).

**Prérequis :** 
+ Une BigQuery table dans laquelle vous souhaitez écrire. Vous aurez besoin des noms de BigQuery table et de jeu de données dans le formulaire`[dataset].[table]`. Vous pouvez également fournir un nouveau nom de table qui sera automatiquement créé. Appelons ça*tableName*.
+ Le projet de facturation de la BigQuery table. Vous aurez besoin du nom du projet,*parentProject*. S'il n'existe aucun projet parent de facturation, utilisez le projet contenant la table.
+ BigQuery informations d'authentification. Suivez les étapes *pour gérer vos informations de connexion avec AWS Glue* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
bigquery_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="bigquery",
    connection_options={
        "connectionName": "connectionName",
        "parentProject": "parentProject",
        "writeMethod": "direct",
        "table": "tableName",
    }
)
```

## BigQuery référence des options de connexion
<a name="aws-glue-programming-etl-connect-bigquery-reference"></a>
+ `project` : par défaut, le compte de service Google Cloud par défaut. Utilisé pour la lecture/l'écriture. Le nom d'un projet Google Cloud associé à votre table.
+ `table` : (obligatoire) utilisé pour la lecture/l'écriture. Le nom de votre BigQuery table dans le format`[[project:]dataset.]`.
+ `dataset` : obligatoire lorsqu'il n'est pas défini par l'option `table`. Utilisé pour la lecture/l'écriture. Le nom du jeu de données contenant votre BigQuery table.
+ `parentProject` : par défaut, le compte de service Google Cloud par défaut. Utilisé pour la lecture/l'écriture. Nom d'un projet Google Cloud associé à `project` utilisé pour la facturation.
+ `sourceType` : utilisé pour la lecture. Obligatoire lors de la lecture. Valeurs valides : `table` `query` indique à AWS Glue si vous allez lire par table ou par requête. 
+ `materializationDataset` : utilisé pour la lecture. Valeurs valides : chaînes. Nom d'un BigQuery ensemble de données utilisé pour stocker les matérialisations des vues.
+ `viewsEnabled` : utilisé pour la lecture. Par défaut : false. Valeurs valides : true, false. Détermine si BigQuery vous souhaitez utiliser les vues. 
+ `query` : utilisé pour la lecture. Utilisé quand `viewsEnabled` est true. Une requête GoogleSQL DQL.
+ `temporaryGcsBucket` : utilisé pour écrire. Obligatoire lorsque `writeMethod` est défini sur la valeur par défaut (`indirect`). Nom d'un bucket Google Cloud Storage utilisé pour stocker une forme intermédiaire de vos données lorsque vous y écrivez BigQuery.
+ `writeMethod` : `indirect` par défaut. Valeurs valides : `direct`, `indirect`. Utilisé pour écrire. Spécifie la méthode utilisée pour écrire les données.
  + S'il est défini sur`direct`, votre connecteur écrira à l'aide de l'API BigQuery Storage Write.
  + S'il est défini sur`indirect`, votre connecteur écrira dans Google Cloud Storage, puis le transférera à l' BigQuery aide d'une opération de chargement. Votre compte de service Google Cloud aura besoin des autorisations GCS appropriées.

## Utiliser l'écriture indirecte avec Google BigQuery
<a name="aws-glue-programming-etl-connect-bigquery-indirect-write"></a>

Cet exemple utilise l'écriture indirecte, qui écrit des données dans Google Cloud Storage et les copie dans Google BigQuery.

**Prérequis :**

Vous aurez besoin d'un bucket Google Cloud Storage temporaire*temporaryBucket*.

Le rôle GCP IAM pour le compte de service GCP de AWS Glue nécessitera les autorisations GCS appropriées pour y accéder. *temporaryBucket*

**Configuration supplémentaire :**

**Pour configurer l'écriture indirecte avec BigQuery :**

1. Évaluez [Configuration des BigQuery connexions](#aws-glue-programming-etl-connect-bigquery-configure) et localisez ou retéléchargez le fichier JSON de vos informations d'identification GCP. Identifiez*secretName*, le AWS Secrets Manager secret de la connexion Google BigQuery AWS Glue utilisée dans le cadre de votre travail.

1. Téléchargez le fichier JSON de vos informations d'identification sur un emplacement Amazon S3 correctement sécurisé. Conservez le chemin d'accès au fichier *s3secretpath* pour les étapes futures.

1. Modifier*secretName*, ajouter la `spark.hadoop.google.cloud.auth.service.account.json.keyfile` clé. Définissez la valeur sur *s3secretpath*.

1. Accordez à votre job AWS Glue Amazon S3 IAM des autorisations d'accès*s3secretpath*.

Vous pouvez désormais fournir l'emplacement temporaire de votre compartiment GCS à votre méthode d'écriture. Vous n'avez pas besoin de fournir `writeMethod`, car `indirect` est historiquement la valeur par défaut.

```
bigquery_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="bigquery",
    connection_options={
        "connectionName": "connectionName",
        "parentProject": "parentProject",
        "temporaryGcsBucket": "temporaryBucket",
        "table": "tableName",
    }
)
```

# Connexions JDBC
<a name="aws-glue-programming-etl-connect-jdbc-home"></a>

 Certains types de bases de données, généralement relationnelles, prennent en charge la connexion via le standard JDBC. Pour plus d'informations sur JDBC, consultez la documentation de l'API [Java JDBC](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/). AWS Glue prend en charge nativement la connexion à certaines bases de données via ses connecteurs JDBC. Les bibliothèques JDBC sont fournies dans les jobs Glue Spark. AWS Lorsque vous vous connectez à ces types de bases de données à l’aide des bibliothèques AWS Glue, vous avez accès à un ensemble standard d’options. 

Les valeurs connectionType JDBC sont les suivantes :
+ `"connectionType": "sqlserver"` : Désigne une connexion à une base de données Microsoft SQL Server.
+ `"connectionType": "mysql"` : Désigne une connexion à une base de données MySQL.
+ `"connectionType": "oracle"` : Désigne une connexion à une base de données Oracle.
+ `"connectionType": "postgresql"` : Désigne une connexion à une base de données PostgreSQL.
+ `"connectionType": "redshift"` : désigne une connexion à une base de données Amazon Redshift. Pour de plus amples informations, veuillez consulter [Connexions Redshift](aws-glue-programming-etl-connect-redshift-home.md).

Le tableau suivant répertorie les versions du pilote JDBC prises en charge par AWS Glue.


| Produit (langue française non garantie) | Versions du pilote JDBC pour Glue 5.1 | Versions du pilote JDBC pour Glue 5.0 | Versions de pilotes JDBC pour Glue 4.0 | Versions de pilotes JDBC pour Glue 3.0 | Versions de pilotes JDBC pour Glue 0.9, 1.0, 2.0 | 
| --- | --- | --- | --- | --- | --- | 
| Microsoft SQL Server | 10.2.0 | 10.2.0 | 9.4.0 | 7.x | 6.x | 
| MySQL | 8,0,33 | 8,0,33 | 8.0.23 | 8.0.23 | 5.1 | 
| Oracle Database | 23,3.0,23,09 | 23,3.0,23,09 | 21,7 | 21,1 | 11.2 | 
| PostgreSQL | 42.7.3 | 42.7.3 | 42,3.6 | 42,2,18 | 42.1.x | 
| Amazon Redshift \$1 | redshift-jdbc42-2.1.0.29 | redshift-jdbc42-2.1.0.29 | redshift-jdbc42-2.1.0.16 | redshift-jdbc41-1.2.12.1017 | redshift-jdbc41-1.2.12.1017 | 

\$1 Pour le type de connexion Amazon Redshift, toutes les autres name/value paires d'options incluses dans les options de connexion pour une connexion JDBC, y compris les options de formatage, sont transmises directement au SparkSQL sous-jacent. DataSource Dans les jobs AWS Glue with Spark de AWS Glue 4.0 et des versions ultérieures, le connecteur natif AWS Glue pour Amazon Redshift utilise l'intégration Amazon Redshift pour Apache Spark. Pour plus d’informations, consultez [Intégration d’Amazon Redshift à Apache Spark](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html). Pour les versions précédentes, consultez [Amazon Redshift data source for Spark](https://github.com/databricks/spark-redshift).

Pour configurer votre Amazon VPC afin de vous connecter aux magasins de données Amazon RDS à l’aide de JDBC, reportez-vous à [Configuration d’Amazon VPC pour les connexions JDBC aux entrepôts de données Amazon RDS depuis AWS Glue](setup-vpc-for-glue-access.md).

**Note**  
AWS Les tâches Glue ne sont associées qu'à un seul sous-réseau lors d'une exécution. Cela peut avoir une incidence sur votre capacité à vous connecter à plusieurs sources de données par le biais de la même tâche. Ce comportement n’est pas limité aux sources JDBC.

**Topics**
+ [

## Référence des options de connexion JDBC
](#aws-glue-programming-etl-connect-jdbc)
+ [

## Utiliser sampleQuery
](#aws-glue-programming-etl-jdbc-samplequery)
+ [

## Utiliser un pilote JDBC personnalisé
](#aws-glue-programming-etl-jdbc-custom-driver)
+ [

# Lecture en parallèle à partir de tables JDBC
](run-jdbc-parallel-read-job.md)
+ [

# Configuration d’Amazon VPC pour les connexions JDBC aux entrepôts de données Amazon RDS depuis AWS Glue
](setup-vpc-for-glue-access.md)

## Référence des options de connexion JDBC
<a name="aws-glue-programming-etl-connect-jdbc"></a>

Si une connexion JDBC AWS Glue est déjà définie, vous pouvez réutiliser les propriétés de configuration qui y sont définies, telles que : url, utilisateur et mot de passe ; vous n'avez donc pas à les spécifier dans le code en tant qu'options de connexion. Cette fonctionnalité est disponible dans AWS Glue 3.0 et versions ultérieures. Pour ce faire, utilisez les propriétés de connexion suivantes :
+ `"useConnectionProperties"` : à définir sur « true » pour indiquer que vous souhaitez utiliser la configuration à partir d’une connexion.
+ `"connectionName"` : saisissez le nom de connexion à partir duquel récupérer la configuration. La connexion doit être définie dans la même région que la tâche.

Utilisez ces options de connexion avec les connexions JDBC :
+ `"url"` : (Obligatoire) URL JDBC de la base de données.
+ `"dbtable"` : (obligatoire) table de la base de données à partir de laquelle la lecture doit s’effectuer. Pour les magasins de données JDBC qui prennent en charge les schémas dans une base de données, spécifiez `schema.table-name`. Si aucun schéma n’est fourni, c’est le schéma « public » par défaut qui est utilisé.
+ `"user"` : (Obligatoire) Nom d’utilisateur à utiliser lors de la connexion.
+ `"password"` : (Obligatoire) Mot de passe à utiliser lors de la connexion.
+ (Facultatif) les options suivantes vous permettent de fournir un pilote JDBC personnalisé. Utilisez ces options si vous devez utiliser un pilote que AWS Glue ne prend pas en charge de manière native. 

  Les tâches ETL peuvent utiliser différentes versions de pilote JDBC pour la source de données et la cible, même si la source et la cible sont le même produit de base de données. Cela vous permet de migrer des données entre les bases de données source et cible avec différentes versions. Pour utiliser ces options, vous devez d’abord charger le fichier JAR du pilote JDBC vers Amazon S3.
  + `"customJdbcDriverS3Path"` : chemin Amazon S3 du pilote JDBC personnalisé.
  + `"customJdbcDriverClassName"` : nom de la classe du pilote JDBC.
+ `"bulkSize"` : (Facultatif) Utilisé pour configurer des insertions parallèles pour accélérer les charges groupées dans les cibles JDBC. Spécifiez une valeur entière pour le degré de parallélisme à utiliser lors de l’écriture ou de l’insertion de données. Cette option permet d’améliorer les performances d’écriture dans les bases de données telles que le référentiel d’utilisateurs Arch (AUR).
+ `"hashfield"` : (facultatif) chaîne utilisée pour indiquer le nom d’une colonne de la table JDBC à utiliser pour diviser les données en partitions lors de la lecture de tables JDBC en parallèle. Indiquez « hashfield » OU « hashexpression ». Pour de plus amples informations, veuillez consulter [Lecture en parallèle à partir de tables JDBC](run-jdbc-parallel-read-job.md).
+ `"hashexpression"` : (facultatif) une clause de sélection SQL renvoyant un nombre entier. Utilisée pour diviser les données d’une table JDBC en partitions lors de la lecture de tables JDBC en parallèle. Indiquez « hashfield » OU « hashexpression ». Pour de plus amples informations, veuillez consulter [Lecture en parallèle à partir de tables JDBC](run-jdbc-parallel-read-job.md).
+ `"hashpartitions"` : (facultatif) un entier positif. Utilisé pour indiquer le nombre de lectures parallèles de la table JDBC lors de la lecture de tables JDBC en parallèle. Par défaut : 7. Pour de plus amples informations, veuillez consulter [Lecture en parallèle à partir de tables JDBC](run-jdbc-parallel-read-job.md).
+ `"sampleQuery"` : (facultatif) une instruction de requête SQL personnalisée. Utilisé pour spécifier un sous-ensemble d’informations dans une table afin de récupérer un échantillon du contenu de la table. **Lorsqu'elle est configurée sans tenir compte de vos données, elle peut être moins efficace que DynamicFrame les méthodes, entraînant des délais d'attente ou des erreurs de mémoire insuffisante.** Pour de plus amples informations, veuillez consulter [Utiliser sampleQuery](#aws-glue-programming-etl-jdbc-samplequery).
+ `"enablePartitioningForSampleQuery"` : (facultatif) une valeur booléenne. Par défaut : faux. Utilisé pour permettre la lecture des tables JDBC en parallèle lorsque vous indiquez `sampleQuery`. **S'il est défini sur true, `sampleQuery` il doit se terminer par « where » ou « and » pour que AWS Glue ajoute des conditions de partitionnement.** Pour de plus amples informations, veuillez consulter [Utiliser sampleQuery](#aws-glue-programming-etl-jdbc-samplequery).
+ `"sampleSize"` : (facultatif) un entier positif. Limite le nombre de lignes renvoyées par l’exemple de requête. Fonctionne uniquement lorsque `enablePartitioningForSampleQuery` a la valeur « true ». Si le partitionnement n’est pas activé, vous devez plutôt ajouter directement `"limit x"` dans `sampleQuery` pour limiter la taille. Pour de plus amples informations, veuillez consulter [Utiliser sampleQuery](#aws-glue-programming-etl-jdbc-samplequery).

## Utiliser sampleQuery
<a name="aws-glue-programming-etl-jdbc-samplequery"></a>

Cette section explique comment utiliser `sampleQuery`, `sampleSize` et `enablePartitioningForSampleQuery`.

`sampleQuery` peut être un moyen efficace d’échantillonner quelques lignes de votre jeu de données. Par défaut, la requête est exécutée par un exécuteur unique. Lorsqu'elle est configurée sans tenir compte de vos données, elle peut être moins efficace que DynamicFrame les méthodes, entraînant des délais d'attente ou des erreurs de mémoire insuffisante. L’exécution de SQL sur la base de données sous-jacente dans le cadre de votre pipeline ETL n’est généralement nécessaire que pour des raisons de performances. Si vous essayez de prévisualiser quelques lignes de votre jeu de données, pensez à utiliser [show](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-show). Si vous essayez de transformer votre ensemble de données à l'aide de SQL, pensez [toDF](aws-glue-api-crawler-pyspark-extensions-dynamic-frame.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-toDF) à l'utiliser pour définir une transformation SparkSQL par rapport à vos données dans un formulaire. DataFrame 

Bien que votre requête puisse manipuler diverses tables, `dbtable` reste obligatoire.

**Utilisation de sampleQuery pour récupérer un échantillon de votre table**

Lorsque vous utilisez le comportement SampleQuery par défaut pour récupérer un échantillon de vos données, AWS Glue ne s'attend pas à un débit important. Il exécute donc votre requête sur un seul exécuteur. Afin de limiter les données que vous fournissez et de ne pas entraîner de problèmes de performances, nous vous suggérons de fournir une clause `LIMIT` à SQL.

**Example Utiliser SampleQuery sans partitionnement**  
L’exemple de code suivant illustre comment utiliser `sampleQuery` sans partitionnement.  

```
//A full sql query statement.
val query = "select name from $tableName where age > 0 limit 1"
val connectionOptions = JsonOptions(Map(
    "url" -> url, 
    "dbtable" -> tableName, 
    "user" -> user, 
    "password" -> password, 
    "sampleQuery" -> query ))
val dyf = glueContext.getSource("mysql", connectionOptions)
          .getDynamicFrame()
```

**Utilisation de sampleQuery sur des jeux de données plus volumineux**

 Si vous lisez un jeu de données volumineux, vous devrez peut-être activer le partitionnement JDBC pour interroger une table en parallèle. Pour de plus amples informations, veuillez consulter [Lecture en parallèle à partir de tables JDBC](run-jdbc-parallel-read-job.md). Pour utiliser `sampleQuery` avec le partitionnement JDBC, paramétrez `enablePartitioningForSampleQuery` sur la valeur « true ». L’activation de cette fonctionnalité nécessite que vous apportiez quelques modifications à votre `sampleQuery`.

Lorsque vous utilisez le partitionnement JDBC avec`sampleQuery`, votre requête doit se terminer par « where » ou « and » pour que AWS Glue ajoute des conditions de partitionnement.

 Si vous souhaitez limiter les résultats de votre sampleQuery lorsque vous lisez des tables JDBC en parallèle, définissez le paramètre `"sampleSize"` plutôt que d’indiquer une clause `LIMIT`.

**Example Utiliser SampleQuery avec le partitionnement JDBC**  
L’exemple de code suivant illustre comment utiliser `sampleQuery` avec partitionnement JDBC.  

```
//note that the query should end with "where" or "and" if use with JDBC partitioning.
val query = "select name from $tableName where age > 0 and"

//Enable JDBC partitioning by setting hashfield.
//to use sampleQuery with partitioning, set enablePartitioningForSampleQuery.
//use sampleSize to limit the size of returned data.
val connectionOptions = JsonOptions(Map(
    "url" -> url, 
    "dbtable" -> tableName, 
    "user" -> user, 
    "password" -> password, 
    "hashfield" -> primaryKey,
    "sampleQuery" -> query,
    "enablePartitioningForSampleQuery" -> true,
    "sampleSize" -> "1" ))
val dyf = glueContext.getSource("mysql", connectionOptions)
          .getDynamicFrame()
```

 **Notes et restrictions :** 

Les exemples de requêtes ne peuvent pas être utilisés avec des signets de tâche. L’état du signet sera ignoré lorsque la configuration sera fournie pour les deux.

## Utiliser un pilote JDBC personnalisé
<a name="aws-glue-programming-etl-jdbc-custom-driver"></a>

Les exemples de code suivants montrent comment lire et écrire des bases de données JDBC avec des pilotes JDBC personnalisés. Ils présentent la lecture d’une version d’un produit de base de données et l’écriture dans une version ultérieure du même produit.

------
#### [ Python ]

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext, SparkConf
from awsglue.context import GlueContext
from awsglue.job import Job
import time
from pyspark.sql.types import StructType, StructField, IntegerType, StringType

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# Construct JDBC connection options
connection_mysql5_options = {
    "url": "jdbc:mysql://<jdbc-host-name>:3306/db",
    "dbtable": "test",
    "user": "admin",
    "password": "pwd"}

connection_mysql8_options = {
    "url": "jdbc:mysql://<jdbc-host-name>:3306/db",
    "dbtable": "test",
    "user": "admin",
    "password": "pwd",
    "customJdbcDriverS3Path": "s3://amzn-s3-demo-bucket/mysql-connector-java-8.0.17.jar",
    "customJdbcDriverClassName": "com.mysql.cj.jdbc.Driver"}

connection_oracle11_options = {
    "url": "jdbc:oracle:thin:@//<jdbc-host-name>:1521/ORCL",
    "dbtable": "test",
    "user": "admin",
    "password": "pwd"}

connection_oracle18_options = {
    "url": "jdbc:oracle:thin:@//<jdbc-host-name>:1521/ORCL",
    "dbtable": "test",
    "user": "admin",
    "password": "pwd",
    "customJdbcDriverS3Path": "s3://amzn-s3-demo-bucket/ojdbc10.jar",
    "customJdbcDriverClassName": "oracle.jdbc.OracleDriver"}

# Read from JDBC databases with custom driver
df_mysql8 = glueContext.create_dynamic_frame.from_options(connection_type="mysql",
                                                          connection_options=connection_mysql8_options)

# Read DynamicFrame from MySQL 5 and write to MySQL 8
df_mysql5 = glueContext.create_dynamic_frame.from_options(connection_type="mysql",
                                                          connection_options=connection_mysql5_options)
glueContext.write_from_options(frame_or_dfc=df_mysql5, connection_type="mysql",
                               connection_options=connection_mysql8_options)

# Read DynamicFrame from Oracle 11 and write to Oracle 18
df_oracle11 = glueContext.create_dynamic_frame.from_options(connection_type="oracle",
                                                            connection_options=connection_oracle11_options)
glueContext.write_from_options(frame_or_dfc=df_oracle11, connection_type="oracle",
                               connection_options=connection_oracle18_options)
```

------
#### [ Scala ]

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamicFrame
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._


object GlueApp {
  val MYSQL_5_URI: String = "jdbc:mysql://<jdbc-host-name>:3306/db"
  val MYSQL_8_URI: String = "jdbc:mysql://<jdbc-host-name>:3306/db"
  val ORACLE_11_URI: String = "jdbc:oracle:thin:@//<jdbc-host-name>:1521/ORCL"
  val ORACLE_18_URI: String = "jdbc:oracle:thin:@//<jdbc-host-name>:1521/ORCL"

  // Construct JDBC connection options
  lazy val mysql5JsonOption = jsonOptions(MYSQL_5_URI)
  lazy val mysql8JsonOption = customJDBCDriverJsonOptions(MYSQL_8_URI, "s3://amzn-s3-demo-bucket/mysql-connector-java-8.0.17.jar", "com.mysql.cj.jdbc.Driver")
  lazy val oracle11JsonOption = jsonOptions(ORACLE_11_URI)
  lazy val oracle18JsonOption = customJDBCDriverJsonOptions(ORACLE_18_URI, "s3://amzn-s3-demo-bucket/ojdbc10.jar", "oracle.jdbc.OracleDriver")

  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)

    // Read from JDBC database with custom driver
    val df_mysql8: DynamicFrame = glueContext.getSource("mysql", mysql8JsonOption).getDynamicFrame()

    // Read DynamicFrame from MySQL 5 and write to MySQL 8
    val df_mysql5: DynamicFrame = glueContext.getSource("mysql", mysql5JsonOption).getDynamicFrame()
    glueContext.getSink("mysql", mysql8JsonOption).writeDynamicFrame(df_mysql5)

    // Read DynamicFrame from Oracle 11 and write to Oracle 18
    val df_oracle11: DynamicFrame = glueContext.getSource("oracle", oracle11JsonOption).getDynamicFrame()
    glueContext.getSink("oracle", oracle18JsonOption).writeDynamicFrame(df_oracle11)

    Job.commit()
  }

  private def jsonOptions(url: String): JsonOptions = {
    new JsonOptions(
      s"""{"url": "${url}",
         |"dbtable":"test",
         |"user": "admin",
         |"password": "pwd"}""".stripMargin)
  }

  private def customJDBCDriverJsonOptions(url: String, customJdbcDriverS3Path: String, customJdbcDriverClassName: String): JsonOptions = {
    new JsonOptions(
      s"""{"url": "${url}",
         |"dbtable":"test",
         |"user": "admin",
         |"password": "pwd",
         |"customJdbcDriverS3Path": "${customJdbcDriverS3Path}",
         |"customJdbcDriverClassName" : "${customJdbcDriverClassName}"}""".stripMargin)
  }
}
```

------

# Lecture en parallèle à partir de tables JDBC
<a name="run-jdbc-parallel-read-job"></a>

Vous pouvez définir les propriétés de votre table JDBC afin d'autoriser AWS Glue à lire les données en parallèle. Lorsque vous définissez certaines propriétés, vous demandez à AWS Glue d'exécuter des requêtes SQL parallèles sur des partitions logiques de vos données. Vous pouvez contrôler le partitionnement en définissant un champ de hachage ou une expression de hachage. Vous pouvez également contrôler le nombre de lectures parallèles utilisées pour accéder à vos données. 

La lecture en parallèle à partir de tables JDBC est une technique d'optimisation susceptible d'améliorer les performances. Pour plus d'informations sur le processus permettant d'identifier le moment où cette technique est appropriée, consultez la section [Réduire la quantité de données analysées](https://docs.aws.amazon.com/prescriptive-guidance/latest/tuning-aws-glue-for-apache-spark/parallelize-tasks.html) dans le guide des *meilleures pratiques pour le réglage des performances AWS Glue pour les tâches Apache Spark* sur les directives AWS prescriptives.

Pour activer les lectures parallèles, vous pouvez définir des paires clé-valeur dans le champ des paramètres de la structure de votre table. Utilisez la notation JSON pour définir une valeur pour le champ des paramètres de votre table. Pour plus d'informations sur la modification des propriétés d'une table, consultez [Affichage et gestion des détails d’une table](tables-described.md#console-tables-details). Vous pouvez également activer les lectures parallèles lorsque vous appelez les méthodes d'extraction, de transformation et de chargement (ETL) `create_dynamic_frame_from_options` et `create_dynamic_frame_from_catalog`. Pour plus d'informations sur la spécification d'options dans ces méthodes, consultez [from\$1options](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_options) et [from\$1catalog](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader.md#aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader-from_catalog). 

Vous pouvez utiliser cette méthode pour les tables JDBC, c'est-à-dire la plupart des tables dont la base de données est un magasin de données JDBC. Ces propriétés sont ignorées lors de la lecture des tables Amazon Redshift et Amazon S3.

**hashfield**  
Définissez `hashfield` sur le nom d'une colonne de la table JDBC à utiliser pour diviser les données en partitions. Pour de meilleurs résultats, cette colonne doit avoir une distribution uniforme des valeurs pour répartir les données entre les partitions. Cette colonne peut avoir n'importe quel type de données. AWS Glue génère des requêtes qui ne se chevauchent pas et qui s'exécutent en parallèle pour lire les données partitionnées à partir de cette colonne. Par exemple, si vos données sont réparties de façon uniforme par mois, vous pouvez utiliser la colonne `month` pour lire chaque mois de données en parallèle.  

```
  'hashfield': 'month'
```
AWS Glue crée une requête pour hacher la valeur du champ vers un numéro de partition et exécute la requête pour toutes les partitions en parallèle. Pour utiliser votre propre requête de partition d'une lecture de table, fournissez un élément `hashexpression` au lieu d'un élément `hashfield`.

**hashexpression**  
Définissez `hashexpression` sur une expression SQL (conforme à la syntaxe du moteur de base de données JDBC) qui renvoie un nombre entier. Une expression simple représente le nom d'une colonne numérique dans la table. AWS Glue génère des requêtes SQL pour lire les données JDBC en parallèle à l'aide de l'élément `hashexpression` dans la clause `WHERE` pour partitionner les données.  
Par exemple, utilisez la colonne numérique `customerID` pour lire les données partitionnées en fonction d'un numéro de client.  

```
  'hashexpression': 'customerID'
```
Pour qu'AWS Glue contrôle le partitionnement, fournissez un élément `hashfield` au lieu de `hashexpression`.

**hashpartitions**  
Définissez l'élément `hashpartitions` sur le nombre de lectures parallèles de la table JDBC. Si cette propriété n'est pas définie, la valeur par défaut est 7.  
Par exemple, définissez le nombre de lectures parallèles sur `5` afin qu'AWS Glue lise vos données avec cinq requêtes (ou moins).  

```
  'hashpartitions': '5'
```

# Configuration d’Amazon VPC pour les connexions JDBC aux entrepôts de données Amazon RDS depuis AWS Glue
<a name="setup-vpc-for-glue-access"></a>

 Lorsque vous utilisez JDBC pour vous connecter à des bases de données dans Amazon RDS, vous devez effectuer une configuration supplémentaire. Pour permettre aux composants AWS Glue de communiquer avec Amazon RDS, vous devez configurer l’accès à vos entrepôts de données de données Amazon RDS dans Amazon VPC. Pour permettre à AWS Glue de communiquer entre ses composants, spécifiez un groupe de sécurité avec une règle entrante avec référence circulaire pour tous les ports TCP. En créant une règle avec référence circulaire, vous pouvez restreindre la source au même groupe de sécurité dans le VPC. Une règle d’autoréférencement n’ouvrira pas le VPC à tous les réseaux. Le groupe de sécurité par défaut pour votre VPC peut déjà avoir une règle entrante avec référence circulaire pour ALL Traffic. 

**Pour configurer l'accès entre les magasins de données AWS Glue et Amazon RDS**

1. Connectez-vous à la console Amazon RDS AWS Management Console et ouvrez-la à [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)l'adresse.

1. Dans la console Amazon RDS, identifiez le ou les groupes de sécurité utilisés pour contrôler l’accès à votre base de données Amazon RDS.

   Dans le volet de navigation de gauche, choisissez **Bases de données**, puis sélectionnez l’instance à laquelle vous souhaitez vous connecter dans la liste du volet principal.

   Sur la page détaillée de la base de données, recherchez **Groupes de sécurité VPC** dans l’onglet **Connectivité et sécurité**.

1. En fonction de l'architecture de votre réseau, identifiez le groupe de sécurité associé qu'il est préférable de modifier pour autoriser l'accès au service AWS Glue. Enregistrez son nom *database-security-group* pour référence future. S’il n’existe aucun groupe de sécurité approprié, suivez les instructions pour [fournir l’accès à votre instance de base de données dans votre VPC en créant un groupe de sécurité](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SettingUp.html) dans la documentation Amazon RDS.

1. Connectez-vous à la console Amazon VPC AWS Management Console et ouvrez-la à l'adresse. [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/)

1. Dans la console Amazon VPC, déterminez comment effectuer la mise à jour. *database-security-group*

   Dans le volet de navigation de gauche, choisissez **Groupes *database-security-group* de sécurité**, puis sélectionnez-les dans la liste du volet principal.

1. Identifiez l'ID du groupe de sécurité pour*database-security-group*,*database-sg-id*. Conservez-le en vue d’une référence future.

   Sur la page détaillée du groupe de sécurité, recherchez **ID du groupe de sécurité**.

1. Modifiez les règles entrantes pour*database-security-group*, ajoutez une règle d'autoréférencement pour permettre aux AWS Glue composants de communiquer. Plus précisément, ajoutez ou confirmez qu'il existe une règle dans laquelle le **type** est`All TCP`, le **protocole** est`TCP`, la **plage de ports** inclut tous les ports et la **source** est*database-sg-id*. Vérifiez que le groupe de sécurité que vous avez saisi pour **Source** est le même que le groupe de sécurité que vous modifiez.

   Sur la page détaillée du groupe de sécurité, sélectionnez **Modifier les règles entrantes**.

   La règle entrante ressemble à ce qui suit :  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/setup-vpc-for-glue-access.html)

1. Ajoutez des règles pour le trafic sortant.

   Sur la page détaillée du groupe de sécurité, sélectionnez **Modifier les règles sortantes**.

   Si votre groupe de sécurité autorise tout le trafic sortant, vous n’avez pas besoin de règles distinctes. Par exemple :  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/setup-vpc-for-glue-access.html)

   Si votre architecture réseau est conçue pour vous permettre de restreindre le trafic sortant, créez les règles de trafic sortant suivantes :

   Créez une règle d'autoréférencement où le **type** est`All TCP`, le **protocole** est`TCP`, la **plage de ports** inclut tous les ports et la **destination** est. *database-sg-id* Vérifiez que le groupe de sécurité que vous avez saisi pour **Destination** est le même que le groupe de sécurité que vous modifiez.

    Si vous utilisez un point de terminaison d’un VPC Amazon S3, ajoutez une règle HTTPS pour autoriser le trafic du VPC vers Amazon S3. Créez une règle dans laquelle le **type** est`HTTPS`, le **protocole** est`TCP`, la **plage de ports** est `443` et la **destination** est l'ID de la liste de préfixes gérée pour le point de terminaison de la passerelle Amazon S3,*s3-prefix-list-id*. Pour plus d’informations sur les listes de préfixes et les points de terminaison de passerelle Amazon S3, consultez [Gateway endpoints for Amazon S3](https://docs.aws.amazon.com//vpc/latest/privatelink/vpc-endpoints-s3.html) dans la documentation Amazon VPC.

   Par exemple :  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/setup-vpc-for-glue-access.html)

# Connexions MongoDB
<a name="aws-glue-programming-etl-connect-mongodb-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables dans MongoDB et MongoDB Atlas dans AWS Glue 4.0 et versions ultérieures. Vous pouvez vous connecter à MongoDB en utilisant les informations d'identification du nom d'utilisateur et du mot de passe stockées AWS Secrets Manager via une connexion AWS Glue.

Pour plus d'informations sur MongoDB, consultez la [documentation MongoDB](https://www.mongodb.com/docs/).

## Configuration de connexions MongoDB
<a name="aws-glue-programming-etl-connect-mongodb-configure"></a>

Pour vous connecter à MongoDB depuis AWS Glue, vous aurez besoin de vos informations d'identification MongoDB, et. *mongodbUser* *mongodbPass*

Pour vous connecter à MongoDB depuis AWS Glue, vous aurez peut-être besoin de certaines conditions préalables :
+ Si votre instance MongoDB se trouve dans un Amazon VPC, configurez Amazon VPC pour permettre à votre tâche AWS Glue de communiquer avec l'instance MongoDB sans que le trafic ne transite par l'Internet public. 

  Dans Amazon VPC, identifiez ou créez un **VPC**, un **sous-réseau** et un **groupe de sécurité que** AWS Glue utilisera lors de l'exécution de la tâche. En outre, vous devez vous assurer qu'Amazon VPC est configuré pour autoriser le trafic réseau entre votre instance MongoDB et cet emplacement. Selon la configuration de votre réseau, cela peut nécessiter des modifications des règles du groupe de sécurité, du réseau ACLs, des passerelles NAT et des connexions d'appairage.

Vous pouvez ensuite configurer AWS Glue pour l'utiliser avec MongoDB.

**Pour configurer une connexion à MongoDB :**

1. Vous pouvez éventuellement créer un secret à AWS Secrets Manager l'aide de vos informations d'identification MongoDB. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `username` contenant la valeur. *mongodbUser*

     Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `password` contenant la valeur. *mongodbPass*

1. Dans la console AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour une utilisation future dans AWS Glue. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez **MongoDB** ou **MongoDB Atlas**.
   + Lorsque vous sélectionnez une **URL MongoDB** ou une **URL MongoDB Atlas**, indiquez le nom d'hôte de votre instance MongoDB.

     Une URL MongoDB est fournie au format `mongodb://mongoHost:mongoPort/mongoDBname`.

     Une URL MongoDB Atlas est fournie au format `mongodb+srv://mongoHost/mongoDBname`.
   + Si vous avez choisi de créer un secret Secrets Manager, choisissez le **type AWS Secrets Manager d'identifiant**.

     Ensuite, dans **AWS Secret**, fournissez*secretName*.
   + Si vous choisissez de fournir un **nom d'utilisateur et un mot de passe**, fournissez *mongodbUser* et*mongodbPass*.

1. Dans les situations suivantes, vous pouvez avoir besoin d'une configuration supplémentaire :
   + 

     Pour les instances MongoDB hébergées AWS dans un Amazon VPC
     + Vous devrez fournir les informations de connexion Amazon VPC à la connexion AWS Glue qui définit vos informations de sécurité MongoDB. Lorsque vous créez ou mettez à jour votre connexion, définissez le **VPC**, le **sous-réseau** et les **groupes de sécurité** dans les **options réseau**.

Après avoir créé une connexion AWS Glue MongoDB, vous devez effectuer les actions suivantes avant d'appeler votre méthode de connexion :
+ Si vous avez choisi de créer un secret Secrets Manager, accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lecture*secretName*.
+ Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

Pour utiliser votre connexion AWS Glue MongoDB dans AWS Glue for Spark, indiquez l'`connectionName`option dans votre appel de méthode de connexion. Vous pouvez également suivre les étapes décrites [Utilisation des connexions MongoDB dans les tâches ETL](integrate-with-mongo-db.md) pour utiliser la connexion en conjonction avec le AWS Glue Data Catalog.

## Lecture depuis MongoDB à l'aide d'une connexion Glue AWS
<a name="aws-glue-programming-etl-connect-mongodb-read"></a>

**Prérequis :** 
+ Une collection MongoDB à partir de laquelle vous souhaitez lire. Vous aurez besoin des informations d'identification pour la collection.

  Une collection MongoDB est identifiée par un nom de base de données et un nom de collection,,*mongodbName*. *mongodbCollection*
+ Une connexion AWS Glue MongoDB configurée pour fournir des informations d'authentification. Suivez les étapes de la procédure précédente *Pour configurer une connexion à MongoDB* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
mongodb_read = glueContext.create_dynamic_frame.from_options(
    connection_type="mongodb",
    connection_options={
        "connectionName": "connectionName",
        "database": "mongodbName",
        "collection": "mongodbCollection",
        "partitioner": "com.mongodb.spark.sql.connector.read.partitioner.SinglePartitionPartitioner",
        "partitionerOptions.partitionSizeMB": "10",
        "partitionerOptions.partitionKey": "_id",
        "disableUpdateUri": "false",
    }
)
```

## Écrire dans des tables MongoDB
<a name="aws-glue-programming-etl-connect-mongodb-write"></a>

Cet exemple écrit les informations d'un fichier existant DynamicFrame *dynamicFrame* dans MongoDB.

**Prérequis :** 
+ Une collection MongoDB sur laquelle vous souhaitez écrire. Vous aurez besoin des informations d'identification pour la collection.

  Une collection MongoDB est identifiée par un nom de base de données et un nom de collection,,*mongodbName*. *mongodbCollection*
+ Une connexion AWS Glue MongoDB configurée pour fournir des informations d'authentification. Suivez les étapes de la procédure précédente *Pour configurer une connexion à MongoDB* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="mongodb",
    connection_options={
        "connectionName": "connectionName",
        "database": "mongodbName",
        "collection": "mongodbCollection",
        "disableUpdateUri": "false",
        "retryWrites": "false", 
    },
)
```

## Lire et écrire dans des tables MongoDB
<a name="aws-glue-programming-etl-connect-mongodb-read-write"></a>

Cet exemple écrit les informations d'un fichier existant DynamicFrame *dynamicFrame* dans MongoDB.

**Prérequis :** 
+ Une collection MongoDB à partir de laquelle vous souhaitez lire. Vous aurez besoin des informations d'identification pour la collection.

  Une collection MongoDB sur laquelle vous souhaitez écrire. Vous aurez besoin des informations d'identification pour la collection.

  Une collection MongoDB est identifiée par un nom de base de données et un nom de collection,,*mongodbName*. *mongodbCollection*
+ informations d'authentification MongoDB, et. *mongodbUser* *mongodbPassword*

Par exemple : 

------
#### [ Python ]

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext, SparkConf
from awsglue.context import GlueContext
from awsglue.job import Job
import time

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

job = Job(glueContext)
job.init(args['JOB_NAME'], args)

output_path = "s3://some_bucket/output/" + str(time.time()) + "/"
mongo_uri = "mongodb://<mongo-instanced-ip-address>:27017"
mongo_ssl_uri = "mongodb://<mongo-instanced-ip-address>:27017"
write_uri = "mongodb://<mongo-instanced-ip-address>:27017"

read_mongo_options = {
    "uri": mongo_uri,
    "database": "mongodbName",
    "collection": "mongodbCollection",
    "username": "mongodbUsername",
    "password": "mongodbPassword",
    "partitioner": "MongoSamplePartitioner",
    "partitionerOptions.partitionSizeMB": "10",
    "partitionerOptions.partitionKey": "_id"}

ssl_mongo_options = {
    "uri": mongo_ssl_uri,
    "database": "mongodbName",
    "collection": "mongodbCollection",
    "ssl": "true",
    "ssl.domain_match": "false"
}

write_mongo_options = {
    "uri": write_uri,
    "database": "mongodbName",
    "collection": "mongodbCollection",
    "username": "mongodbUsername",
    "password": "mongodbPassword",
}

# Get DynamicFrame from MongoDB
dynamic_frame = glueContext.create_dynamic_frame.from_options(connection_type="mongodb",
                                                              connection_options=read_mongo_options)

# Write DynamicFrame to MongoDB
glueContext.write_dynamic_frame.from_options(dynamicFrame, connection_type="mongodb", connection_options=write_mongo_options)

job.commit()
```

------
#### [ Scala ]

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.DynamicFrame
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._

object GlueApp {
  val DEFAULT_URI: String = "mongodb://<mongo-instanced-ip-address>:27017"
  val WRITE_URI: String = "mongodb://<mongo-instanced-ip-address>:27017"
  lazy val defaultJsonOption = jsonOptions(DEFAULT_URI)
  lazy val writeJsonOption = jsonOptions(WRITE_URI)
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)

    // Get DynamicFrame from MongoDB
    val dynamicFrame: DynamicFrame = glueContext.getSource("mongodb", defaultJsonOption).getDynamicFrame()

    // Write DynamicFrame to MongoDB
    glueContext.getSink("mongodb", writeJsonOption).writeDynamicFrame(dynamicFrame)

    Job.commit()
  }

  private def jsonOptions(uri: String): JsonOptions = {
    new JsonOptions(
      s"""{"uri": "${uri}",
         |"database":"mongodbName",
         |"collection":"mongodbCollection",
         |"username": "mongodbUsername",
         |"password": "mongodbPassword",
         |"ssl":"true",
         |"ssl.domain_match":"false",
         |"partitioner": "MongoSamplePartitioner",
         |"partitionerOptions.partitionSizeMB": "10",
         |"partitionerOptions.partitionKey": "_id"}""".stripMargin)
  }
}
```

------

## Référence des options de connexion MongoDB
<a name="aws-glue-programming-etl-connect-mongodb"></a>

Désigne une connexion à MongoDB. Les options de connexion sont différentes pour une connexion source et une connexion collecteur.

Les propriétés de connexion suivantes sont partagées entre les connexions source et récepteur :
+ `connectionName` : utilisé pour la lecture/l'écriture. Le nom d'une connexion AWS Glue MongoDB configurée pour fournir des informations d'authentification et de mise en réseau à votre méthode de connexion. Lorsqu'une connexion AWS Glue est configurée comme décrit dans la section précédente[Configuration de connexions MongoDB](#aws-glue-programming-etl-connect-mongodb-configure), la fourniture `connectionName` remplacera le besoin de fournir `"uri"` les options `"username"` et de `"password"` connexion. 
+ `"uri"`: (Obligatoire) L'hôte MongoDB à lire, formaté comme `mongodb://<host>:<port>`. Utilisé dans les versions de AWS Glue antérieures à AWS Glue 4.0.
+ `"connection.uri"`: (Obligatoire) L'hôte MongoDB à lire, formaté comme `mongodb://<host>:<port>`. Utilisé dans AWS Glue 4.0 et versions ultérieures.
+ `"username"` : (Obligatoire) Le nom d'utilisateur MongoDB.
+ `"password"` : (Obligatoire) Le mot de passe MongoDB.
+ `"database"`: (Obligatoire) La base de données MongoDB à lire. Cette option peut également être transmise dans `additional_options` lors de l'appel à `glue_context.create_dynamic_frame_from_catalog` dans votre script de tâche.
+ `"collection"` : (Obligatoire) La collection MongoDB à lire. Cette option peut également être transmise dans `additional_options` lors de l'appel à `glue_context.create_dynamic_frame_from_catalog` dans votre script de tâche.

### « connectionType »: « mongodb » comme source
<a name="etl-connect-mongodb-as-source"></a>

Utilisez les options de connexion suivantes avec `"connectionType": "mongodb"` comme source :
+ `"ssl"` : (Facultatif) Si `true`, lance une connexion SSL. La valeur par défaut est `false`.
+ `"ssl.domain_match"` : (Facultatif) Si `true` et `ssl` est `true`, la vérification de la correspondance de domaine est effectuée. La valeur par défaut est `true`.
+ `"batchSize"` : (Facultatif) : Nombre de documents à renvoyer par lot, utilisé dans le curseur des lots internes.
+ `"partitioner"` : (Facultatif) : Le nom de classe du partitionneur pour lire les données d'entrée de MongoDB. Le connecteur fournit les partitionneurs suivants :
  + `MongoDefaultPartitioner`(par défaut) (Non pris en charge dans AWS Glue 4.0)
  + `MongoSamplePartitioner`(Nécessite MongoDB 3.2 ou version ultérieure) (Non pris en charge dans AWS Glue 4.0)
  + `MongoShardedPartitioner`(Non pris en charge dans AWS Glue 4.0)
  + `MongoSplitVectorPartitioner`(Non pris en charge dans AWS Glue 4.0)
  + `MongoPaginateByCountPartitioner`(Non pris en charge dans AWS Glue 4.0)
  + `MongoPaginateBySizePartitioner`(Non pris en charge dans AWS Glue 4.0)
  + `com.mongodb.spark.sql.connector.read.partitioner.SinglePartitionPartitioner`
  + `com.mongodb.spark.sql.connector.read.partitioner.ShardedPartitioner`
  + `com.mongodb.spark.sql.connector.read.partitioner.PaginateIntoPartitionsPartitioner`
+ `"partitionerOptions"` ( Facultatif) : Options pour le partitionneur désigné. Les options suivantes sont prises en charge pour chaque partitionneur :
  + `MongoSamplePartitioner`: `partitionKey`, `partitionSizeMB`, `samplesPerPartition`
  + `MongoShardedPartitioner`: `shardkey`
  + `MongoSplitVectorPartitioner`: `partitionKey`, `partitionSizeMB`
  + `MongoPaginateByCountPartitioner`: `partitionKey`, `numberOfPartitions`
  + `MongoPaginateBySizePartitioner`: `partitionKey`, `partitionSizeMB`

  Pour plus d'informations sur ces options, consultez [Configuration du partitionneur](https://docs.mongodb.com/spark-connector/master/configuration/#partitioner-conf) dans la documentation MongoDB.

### « connectionType »: « mongodb » comme collecteur
<a name="etl-connect-mongodb-as-sink"></a>

Utilisez les options de connexion suivantes avec `"connectionType": "mongodb"` comme collecteur :
+ `"ssl"` : (Facultatif) Si `true`, lance une connexion SSL. La valeur par défaut est `false`.
+ `"ssl.domain_match"` : (Facultatif) Si `true` et `ssl` est `true`, la vérification de la correspondance de domaine est effectuée. La valeur par défaut est `true`.
+ `"extendedBsonTypes"` : (facultatif) si la valeur est `true`, cela active les types BSON étendus lors de l'écriture de données dans MongoDB. La valeur par défaut est `true`.
+ `"replaceDocument"` : (Facultatif) Si `true`, remplace l'ensemble du document lors de l'enregistrement de jeux de données contenant un champ `_id`. Si `false`, seuls les champs du document qui correspondent aux champs du jeu de données sont mis à jour. La valeur par défaut est `true`.
+ `"maxBatchSize"` : (Facultatif) : Taille maximale du lot pour les opérations en bloc lors de l'enregistrement des données. La valeur par défaut est 512.
+ `"retryWrites"`: (Facultatif) : Réessayez automatiquement certaines opérations d'écriture une seule fois si AWS Glue rencontre une erreur réseau.

# Connexions SAP HANA
<a name="aws-glue-programming-etl-connect-saphana-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables dans SAP HANA dans AWS Glue 4.0 et versions ultérieures. Vous pouvez définir ce qu'il faut lire dans SAP HANA à l'aide d'une requête SQL. Vous vous connectez à SAP HANA à l'aide des informations d'identification JDBC stockées via AWS Secrets Manager une connexion AWS Glue SAP HANA.

Pour plus d'informations sur SAP HANA JDBC, consultez [la documentation SAP HANA](https://help.sap.com/docs/SAP_HANA_PLATFORM/0eec0d68141541d1b07893a39944924e/ff15928cf5594d78b841fbbe649f04b4.html).

## Configuration des connexions SAP HANA
<a name="aws-glue-programming-etl-connect-saphana-configure"></a>

Pour vous connecter à SAP HANA depuis AWS Glue, vous devez créer et stocker vos informations d'identification SAP HANA dans un AWS Secrets Manager secret, puis associer ce secret à une connexion SAP HANA AWS Glue. Vous devrez configurer la connectivité réseau entre votre service SAP HANA et AWS Glue.

Pour vous connecter à SAP HANA, vous aurez peut-être besoin de certaines conditions préalables :
+ Si votre service SAP HANA se trouve dans un Amazon VPC, configurez Amazon VPC pour permettre à votre tâche AWS Glue de communiquer avec le service SAP HANA sans que le trafic ne transite par l'Internet public.

  Dans Amazon VPC, identifiez ou créez un **VPC**, un **sous-réseau** et un **groupe de sécurité que** AWS Glue utilisera lors de l'exécution de la tâche. En outre, vous devez vous assurer qu'Amazon VPC est configuré pour autoriser le trafic réseau entre votre point de terminaison SAP HANA et cet emplacement. Votre tâche devra établir une connexion TCP avec votre port JDBC SAP HANA. Pour plus d'informations sur les ports SAP HANA, consultez [la documentation SAP HANA](https://help.sap.com/docs/HANA_SMART_DATA_INTEGRATION/7952ef28a6914997abc01745fef1b607/88e2e8bded9e4041ad3ad87dc46c7b55.html?locale=en-US). Selon la configuration de votre réseau, cela peut nécessiter des modifications des règles du groupe de sécurité, du réseau ACLs, des passerelles NAT et des connexions d'appairage.
+ Il n'y a aucune condition préalable supplémentaire si votre point de terminaison SAP HANA est accessible sur Internet.

**Pour configurer une connexion à SAP HANA :**

1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification SAP HANA. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `username/USERNAME` contenant la valeur. *saphanaUsername*
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `password/PASSWORD` contenant la valeur. *saphanaPassword*

1. Dans la console AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour une utilisation future dans AWS Glue. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez SAP HANA.
   + Lorsque vous fournissez l'**URL SAP HANA**, indiquez l'URL de votre instance.

     SAP HANA JDBC se présente sous la URLs forme `jdbc:sap://saphanaHostname:saphanaPort/?databaseName=saphanaDBname,ParameterName=ParameterValue`

     AWS Glue nécessite les paramètres d'URL JDBC suivants : 
     + `databaseName` – une base de données par défaut dans SAP HANA à laquelle se connecter.
   + Lorsque vous sélectionnez un **AWS secret**, fournissez*secretName*.

Après avoir créé une connexion AWS Glue SAP HANA, vous devez suivre les étapes suivantes avant d'exécuter votre tâche AWS Glue :
+ Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire*secretName*.
+ Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Lecture à partir de tables SAP HANA
<a name="aws-glue-programming-etl-connect-saphana-read"></a>

**Prérequis :** 
+ Une table SAP HANA à partir de laquelle vous souhaitez lire. Vous aurez besoin des informations d'identification de la table.

  Une table peut être spécifiée avec un nom de table SAP HANA et un nom de schéma, sous forme de `schemaName.tableName`. Le nom du schéma et le séparateur « . » ne sont pas obligatoires si la table se trouve dans le schéma par défaut, « public ». Appelle ça*tableIdentifier*. Notez que la base de données est fournie sous forme de paramètre d'URL JDBC dans `connectionName`.
+ Une connexion AWS Glue SAP HANA configurée pour fournir des informations d'authentification. Suivez les étapes de la procédure précédente *Pour configurer une connexion à SAP HANA* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
saphana_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type="saphana",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableIdentifier",
    }
)
```

Vous pouvez également fournir une requête SQL SELECT pour filtrer les résultats renvoyés à votre DynamicFrame. Vous devrez configurer `query`.

Par exemple :

```
saphana_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="saphana",
    connection_options={
        "connectionName": "connectionName",
        "query": "query"
    }
)
```

## Écrire dans des tables SAP HANA
<a name="aws-glue-programming-etl-connect-saphana-write"></a>

Cet exemple écrit les informations d'un fichier existant DynamicFrame *dynamicFrame* dans SAP HANA. Si le tableau contient déjà des informations, AWS Glue génère une erreur.

**Prérequis :** 
+ Une table SAP HANA dans laquelle vous souhaitez écrire. 

  Une table peut être spécifiée avec un nom de table SAP HANA et un nom de schéma, sous forme de `schemaName.tableName`. Le nom du schéma et le séparateur « . » ne sont pas obligatoires si la table se trouve dans le schéma par défaut, « public ». Appelle ça*tableIdentifier*. Notez que la base de données est fournie sous forme de paramètre d'URL JDBC dans `connectionName`.
+ Informations d'authentification SAP HANA. Suivez les étapes de la procédure précédente *Pour configurer une connexion à SAP HANA* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
options = {
    "connectionName": "connectionName",
    "dbtable": 'tableIdentifier'
}

    saphana_write = glueContext.write_dynamic_frame.from_options(
        frame=dynamicFrame,
        connection_type="saphana",
        connection_options=options
)
```

## Référence des options de connexion de SAP HANA
<a name="aws-glue-programming-etl-connect-saphana-reference"></a>
+ `connectionName` — Obligatoire. Utilisé pour la lecture/l'écriture. Nom d'une connexion AWS Glue SAP HANA configurée pour fournir des informations d'authentification et de mise en réseau à votre méthode de connexion.
+ `databaseName` : utilisé pour la lecture/l'écriture. Valeurs valides : noms des bases de données dans SAP HANA. Nom de base de données à laquelle se connecter.
+ `dbtable` — obligatoire pour l'écriture, obligatoire pour la lecture à moins qu'une `query` ne soit fournie. Utilisé pour la lecture/l'écriture. Valeurs valides : contenu d'une clause SAP HANA SQL FROM. Identifie une table dans SAP HANA à laquelle se connecter. Vous pouvez également fournir un SQL autre qu'un nom de table, comme une sous-requête. Pour plus d'informations, consultez la [clause From](https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20fcf24075191014a89e9dc7b8408b26.html#loio20fcf24075191014a89e9dc7b8408b26__from_clause) dans la documentation SAP HANA.
+ `query` : utilisé pour la lecture. Une requête SAP HANA SQL SELECT définissant ce qui doit être récupéré lors de la lecture à partir de SAP HANA.

# Connexions Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables dans Snowflake dans AWS Glue 4.0 et versions ultérieures. Vous pouvez lire depuis Snowflake à l'aide d'une requête SQL. Vous pouvez vous connecter à Snowflake à l'aide d'un nom d'utilisateur et d'un mot de passe. Vous pouvez vous référer aux informations d'identification Snowflake stockées dans le catalogue AWS Secrets Manager de données AWS Glue. Les informations d'identification Snowflake du catalogue de données pour AWS Glue for Spark sont stockées séparément des informations d'identification du catalogue de données Snowflake pour les robots d'exploration. Vous devez choisir un type de connexion `SNOWFLAKE` et non un type de connexion `JDBC` configuré pour se connecter à Snowflake.

Pour en savoir plus sur Snowflake, consultez le [site web Snowflake](https://www.snowflake.com/). Pour plus d'informations sur Snowflake on AWS, consultez [Snowflake Data Warehouse sur Amazon Web Services](https://aws.amazon.com/financial-services/partner-solutions/snowflake/).

## Configuration des connexions Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-configure"></a>

Il n'y a aucune AWS condition préalable pour se connecter aux bases de données Snowflake disponibles sur Internet.

Vous pouvez éventuellement effectuer la configuration suivante pour gérer vos informations de connexion avec AWS Glue.

**Pour gérer vos informations de connexion avec AWS Glue**

1. Dans Snowflake, générez un utilisateur *snowflakeUser* et un mot de passe. *snowflakePassword* 

1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification Snowflake. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html#create_secret_cli) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour *snowflakeUser* avec la clé. `USERNAME`
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour *snowflakePassword* avec la clé. `PASSWORD`
   + Lorsque vous sélectionnez des **paires clé/valeur**, vous pouvez fournir à votre entrepôt Snowflake la clé `sfWarehouse`.
   + Lorsque vous sélectionnez des **paires clé/valeur**, vous pouvez fournir des propriétés de connexion Snowflake supplémentaires en utilisant les noms de propriété Spark correspondants comme clés. Les propriétés prises en charge sont les suivantes :
     + `sfDatabase` : nom de la base de données Snowflake
     + `sfSchema` : nom du schéma Snowflake
     + `sfRole` : nom du rôle Snowflake
     + `pem_private_key` : clé privée pour l’authentification par paire de clés

1. Dans le catalogue de données AWS Glue, créez une connexion en choisissant **Connections**, puis **Create connection**. Suivez les étapes décrites dans l’assistant de connexion pour finaliser le processus : 
   + Lorsque vous sélectionnez une **source de données**, sélectionnez Snowflake, puis **Suivant**.
   + Saisissez les détails de connexion tels que l’hôte et le port. Lorsque vous saisissez l’**URL Snowflake** hôte, indiquez l’URL de votre instance Snowflake. L’URL utilisera généralement un nom d’hôte sous la forme `account_identifier.snowflakecomputing.com`. Cependant, le format de l'URL peut varier en fonction du type de compte Snowflake (par exemple AWS, Azure ou hébergé par Snowflake).
   + Lorsque vous sélectionnez le rôle de service IAM, choisissez dans le menu déroulant. Il s'agit du rôle IAM de votre compte qui sera utilisé pour accéder à l'adresse IP AWS Secrets Manager et l'attribuer si un VPC est spécifié.
   + Lorsque vous sélectionnez un **AWS secret**, indiquez-le*secretName*.

1. À l’étape suivante de l’assistant, définissez les propriétés de votre connexion Snowflake. 

1. Dans la dernière étape de l’assistant, examinez vos paramètres, puis terminez le processus de création de votre connexion.

Dans les situations suivantes, vous pouvez avoir besoin des éléments suivants :
+ 

  Pour Snowflake hébergé sur un Amazon AWS VPC
  + Vous aurez besoin d'une configuration Amazon VPC appropriée pour Snowflake. Pour plus d'informations sur la configuration de votre Amazon VPC, consultez [AWS PrivateLink et Snowflake](https://docs.snowflake.com/en/user-guide/admin-security-privatelink) dans la documentation Snowflake.
  + Vous aurez besoin d'une configuration Amazon VPC appropriée pour Glue AWS . [Configuration de points de terminaison d’un VPC d’interface (AWS PrivateLink) pour AWS Glue (AWS PrivateLink)](vpc-interface-endpoints.md).
  + Vous devrez créer une connexion AWS Glue Data Catalog qui fournit les informations de connexion Amazon VPC (en plus de l'identifiant d'un AWS Secrets Manager secret qui définit vos informations de sécurité Snowflake). Votre URL changera lors de l'utilisation AWS PrivateLink, comme décrit dans la documentation Snowflake dont le lien figure dans un article précédent.
  + Vous aurez besoin de la configuration de votre tâche pour inclure la connexion au catalogue de données en tant que **connexion réseau supplémentaire**.

## Lecture à partir de tables Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-read"></a>

**Conditions préalables :** une table Snowflake à partir de laquelle vous souhaitez lire. Vous aurez besoin du nom de la table Snowflake,. *tableName* Vous aurez besoin de votre URL*snowflakeUrl*, nom d'utilisateur *snowflakeUser* et mot de passe Snowflake. *snowflakePassword* Si aucun espace de noms par défaut n'est défini pour votre utilisateur Snowflake, vous aurez besoin du nom de la base de données Snowflake et du nom du schéma. *databaseName* *schemaName* De plus, si votre utilisateur Snowflake n'a pas défini d'entrepôt par défaut, vous aurez besoin d'un nom d'entrepôt. *warehouseName*

Par exemple :

**Conditions préalables supplémentaires :** suivez les étapes *pour gérer vos informations d'identification de connexion avec AWS Glue* pour les configurer*snowflakeUrl*, *snowflakeUsername* et*snowflakePassword*. Pour passer en revue ces étapes, reportez-vous à la section précédente, [Configuration des connexions Snowflake](#aws-glue-programming-etl-connect-snowflake-configure). Pour sélectionner la **connexion réseau supplémentaire** à laquelle se connecter, nous utiliserons le paramètre `connectionName`.

```
snowflake_read = glueContext.create_dynamic_frame.from_options(
  connection_type="snowflake",
  connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableName",
        "sfDatabase": "databaseName",
        "sfSchema": "schemaName",
        "sfWarehouse": "warehouseName",
    }
)
```

 De plus, vous pouvez utiliser les paramètres `autopushdown` et `query` pour lire une partie d'une table Snowflake. Cela peut être nettement plus efficace que de filtrer vos résultats une fois qu'ils ont été chargés dans Spark. Prenons un exemple où toutes les ventes sont stockées dans la même table, mais où vous n'avez besoin d'analyser que les ventes d'un certain magasin pendant les jours fériés. Si ces informations sont stockées dans la table, vous pouvez utiliser le pushdown de prédicat pour récupérer les résultats comme suit :

```
snowflake_node = glueContext.create_dynamic_frame.from_options(
    connection_type="snowflake",
    connection_options={
        "autopushdown": "on",
        "query": "select * from sales where store='1' and IsHoliday='TRUE'",
        "connectionName": "snowflake-glue-conn",
        "sfDatabase": "databaseName",
        "sfSchema": "schemaName",
        "sfWarehouse": "warehouseName",
    }
)
```

## Écrire sur les tables Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-write"></a>

**Conditions préalables :** une base de données Snowflake sur laquelle vous souhaitez écrire. Vous aurez besoin d'un nom de table actuel ou souhaité,*tableName*. Vous aurez besoin de votre URL*snowflakeUrl*, nom d'utilisateur *snowflakeUser* et mot de passe Snowflake. *snowflakePassword* Si aucun espace de noms par défaut n'est défini pour votre utilisateur Snowflake, vous aurez besoin du nom de la base de données Snowflake et du nom du schéma. *databaseName* *schemaName* De plus, si votre utilisateur Snowflake n'a pas défini d'entrepôt par défaut, vous aurez besoin d'un nom d'entrepôt. *warehouseName*

Par exemple :

**Conditions préalables supplémentaires :** suivez les étapes *pour gérer vos informations d'identification de connexion avec AWS Glue* pour les configurer*snowflakeUrl*, *snowflakeUsername* et*snowflakePassword*. Pour passer en revue ces étapes, reportez-vous à la section précédente, [Configuration des connexions Snowflake](#aws-glue-programming-etl-connect-snowflake-configure). Pour sélectionner la **connexion réseau supplémentaire** à laquelle se connecter, nous utiliserons le paramètre `connectionName`.

```
glueContext.write_dynamic_frame.from_options(
    connection_type="snowflake",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableName",
        "sfDatabase": "databaseName",
        "sfSchema": "schemaName",
        "sfWarehouse": "warehouseName",
    },
)
```

## Référence des options de connexion Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-reference"></a>

Le type de connexion Snowflake accepte les options de connexion suivantes :

Vous pouvez récupérer certains paramètres de cette section à partir d'une connexion au catalogue de données (`sfUrl`, `sfUser`, `sfPassword`), auquel cas vous n'êtes pas obligé de les fournir. Pour ce faire, fournissez le paramètre `connectionName`.

Vous pouvez récupérer les paramètres de connexion à partir des AWS Secrets Manager secrets à l'aide du `secretId` paramètre. Lorsque vous utilisez Secrets Manager, les propriétés Spark suivantes peuvent être automatiquement récupérées si elles sont présentes dans le secret :
+ `sfUser` (à l’aide d’une clé `USERNAME` ou `sfUser`)
+ `sfPassword` (à l’aide d’une clé `PASSWORD` ou `sfPassword`)
+ `sfWarehouse` (à l’aide d’une clé `sfWarehouse`)
+ `sfDatabase` (à l’aide d’une clé `sfDatabase`)
+ `sfSchema` (à l’aide d’une clé `sfSchema`)
+ `sfRole` (à l’aide d’une clé `sfRole`)
+ `pem_private_key` (à l’aide d’une clé `pem_private_key`)

**Ordre de priorité des propriétés :** lorsque la même propriété est spécifiée à plusieurs emplacements, AWS Glue utilise l'ordre de priorité suivant (du plus haut au plus bas) :

1. Options de connexion explicitement fournies dans votre code de tâche

1. Propriétés de la connexion au catalogue de données

1. AWS Secrets Manager valeurs secrètes (lorsqu'elles `secretId` sont spécifiées)

1. Paramètres utilisateur par défaut de Snowflake

Les paramètres suivants sont généralement utilisés lors de la connexion à Snowflake.
+ `sfDatabase` : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. La base de données à utiliser pour la session après la connexion.
+ `sfSchema` : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. Le schéma à utiliser pour la session après la connexion.
+ `sfWarehouse` : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. L'entrepôt virtuel par défaut à utiliser pour la session après la connexion.
+ `sfRole` : obligatoire si aucune valeur par défaut de l'utilisateur n'est définie dans Snowflake. Utilisé pour la lecture/l'écriture. Le rôle de sécurité par défaut à utiliser pour la session après la connexion.
+ `sfUrl` : (obligatoire) utilisé pour la lecture/l'écriture. Indique le nom d'hôte de votre compte au format suivant : `account_identifier.snowflakecomputing.com`. Pour plus d'informations sur les identifiants de compte, consultez [Identifiants de compte](https://docs.snowflake.com/en/user-guide/admin-account-identifier) dans la documentation de Snowflake.
+ `sfUser` : (obligatoire) utilisé pour la lecture/l'écriture. Nom de connexion de l'utilisateur Snowflake.
+ `sfPassword` : (Obligatoire sauf si la clé `pem_private_key` est fournie) utilisé pour la lecture/l’écriture. Mot de passe de l'utilisateur Snowflake.
+ `dbtable` : obligatoire lorsque vous travaillez avec des tables complètes. Utilisé pour la lecture/l'écriture. Le nom de la table à lire ou de la table dans laquelle les données sont écrites. Lors de la lecture, toutes les colonnes et tous les enregistrements sont récupérés.
+ `pem_private_key` : utilisé pour la lecture/l'écriture. Chaîne de clé privée codée en b64 non chiffrée. Clé privée de l’utilisateur Snowflake. Il est courant de la copier à partir d’un fichier PEM. Pour plus d’informations, consultez [Authentification par paire de clés et rotation des paires de clés](https://docs.snowflake.com/en/user-guide/key-pair-auth) dans la documentation Snowflake.
+ `query` : obligatoire lors de la lecture avec une requête. Utilisé pour la lecture. La requête exacte (instruction `SELECT`) à exécuter

Les options suivantes sont utilisées pour configurer des comportements spécifiques lors du processus de connexion à Snowflake.
+ `preactions` : utilisé pour la lecture/l'écriture. Valeurs valides : liste d'instructions SQL séparées par des points-virgules sous forme de chaîne. Les instructions SQL sont exécutées avant le transfert des données entre AWS Glue et Snowflake. Si une instruction contient `%s`, `%s` est remplacé par le nom de table référencé pour l'opération.
+ `postactions` : utilisé pour la lecture/l'écriture. Les instructions SQL sont exécutées après le transfert des données entre AWS Glue et Snowflake. Si une instruction contient `%s`, `%s` est remplacé par le nom de table référencé pour l'opération.
+ `autopushdown` : `"on"` par défaut. Valeurs valides : `"on"`, `"off"`. Ce paramètre contrôle si le pushdown automatique des requêtes est activé. Lorsque l'option pushdown est activée, si une partie de la requête peut être « poussée vers le bas » sur le serveur Snowflake, elle est poussée vers le bas au moment de l'exécution de la requête sur Spark. Cela améliore les performances de certaines requêtes. Pour savoir si votre requête peut être poussée vers le bas, consultez [Pushdown](https://docs.snowflake.com/en/user-guide/spark-connector-use#pushdown) dans la documentation de Snowflake.

En outre, certaines des options disponibles sur le connecteur Snowflake Spark peuvent être prises en charge dans Glue AWS . Pour plus d'informations sur les options disponibles sur le connecteur Snowflake Spark, consultez la section [Réglage des options de configuration du connecteur](https://docs.snowflake.com/en/user-guide/spark-connector-use#setting-configuration-options-for-the-connector) dans la documentation Snowflake. 

## Méthodes d’authentification Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-authentication"></a>

AWS Glue prend en charge les méthodes d'authentification suivantes pour se connecter à Snowflake :
+ **Authentification par nom d’utilisateur et mot de passe :** indiquez les paramètres `sfUser` et `sfPassword`.
+ **Authentification par paire de clés :** indiquez les paramètres `sfUser` et `pem_private_key`. Lorsque vous utilisez l’authentification par paire de clés, le paramètre `sfPassword` n’est pas obligatoire.

Les deux méthodes d'authentification sont entièrement prises en charge et peuvent être configurées à l'aide de n'importe quelle combinaison d'options de connexion, de connexions au catalogue de données ou de AWS Secrets Manager secrets.

## Limites du connecteur Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-limitations"></a>

La connexion à Snowflake avec AWS Glue for Spark est soumise aux restrictions suivantes. 
+ Ce connecteur ne prend pas en charge les signets de tâches. Pour plus d’informations sur les signets de tâche, consultez [Suivi des données traitées à l'aide de signets de tâche](monitor-continuations.md).
+ Ce connecteur ne prend pas en charge les lectures et écritures Snowflake via les tables du catalogue de données AWS Glue à l'aide des méthodes `create_dynamic_frame.from_catalog` et`write_dynamic_frame.from_catalog`.
+ Ce connecteur prend en charge username/password l'authentification et l'authentification par paire de clés. Les autres méthodes d'authentification (telles que OAuth SAML) ne sont actuellement pas prises en charge.
+ Ce connecteur n'est pas pris en charge dans les tâches de streaming.
+ Ce connecteur prend en charge les requêtes basées sur des instructions `SELECT` lors de la récupération d'informations (par exemple avec le paramètre `query`). Les autres types de requêtes (telles que `SHOW`, `DESC` ou les instructions DML) ne sont pas pris en charge.
+ Snowflake limite la taille du texte de la requête (c'est-à-dire les instructions SQL) soumis par les clients Snowflake à 1 Mo par instruction. Pour plus d'informations, consultez [Limites de la taille du texte de requête](https://docs.snowflake.com/en/user-guide/query-size-limits).

# Connexions Teradata Vantage
<a name="aws-glue-programming-etl-connect-teradata-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables existantes dans Teradata Vantage dans AWS Glue 4.0 et versions ultérieures. Vous pouvez définir ce qu'il faut lire dans Teradata à l'aide d'une requête SQL. Vous pouvez vous connecter à Teradata à l'aide du nom d'utilisateur et du mot de passe enregistrés AWS Secrets Manager via une connexion AWS Glue.

Pour de plus amples informations sur Teradata, veuillez consulter la [documentation Teradata](https://docs.teradata.com/)

## Configuration de connexions Teradata
<a name="aws-glue-programming-etl-connect-teradata-configure"></a>

Pour vous connecter à Teradata depuis AWS Glue, vous devez créer et stocker vos informations d'identification Teradata dans un AWS Secrets Manager secret, puis associer ce secret à une connexion AWS Glue Teradata. Si votre instance Teradata se trouve dans un Amazon VPC, vous devrez également fournir des options réseau à votre connexion AWS Glue Teradata.

Pour vous connecter à Teradata depuis AWS Glue, vous aurez peut-être besoin de certaines conditions préalables :
+ Si vous accédez à votre environnement Teradata via Amazon VPC, configurez Amazon VPC pour permettre à votre tâche AWS Glue de communiquer avec l'environnement Teradata. Nous vous déconseillons d'accéder à l'environnement Teradata via l'Internet public.

  Dans Amazon VPC, identifiez ou créez un **VPC**, un **sous-réseau** et un **groupe de sécurité que** AWS Glue utilisera lors de l'exécution de la tâche. En outre, vous devez vous assurer qu'Amazon VPC est configuré pour autoriser le trafic réseau entre votre instance Teradata et cet emplacement. Votre tâche devra établir une connexion TCP avec votre port client Teradata. Pour de plus amples informations sur les ports Teradata, consultez la [documentation Teradata](https://docs.teradata.com/r/Teradata-VantageTM-on-AWS-DIY-Installation-and-Administration-Guide/April-2020/Before-Deploying-Vantage-on-AWS-DIY/Security-Groups-and-Ports).

  Selon la configuration de votre réseau, la connectivité VPC sécurisée peut nécessiter des modifications dans Amazon VPC et dans d'autres services réseau. Pour plus d'informations sur AWS la connectivité, consultez [les options de AWS connectivité](https://docs.teradata.com/r/Teradata-VantageCloud-Enterprise/Get-Started/Connecting-Your-Environment/AWS-Connectivity-Options) dans la documentation Teradata.

**Pour configurer une connexion AWS Glue Teradata :**

1. Dans votre configuration Teradata, identifiez ou créez un utilisateur et un mot de passe auxquels AWS Glue se connectera, *teradataUser* et*teradataPassword*. Pour plus d'informations, consultez la [présentation de Vantage Security](https://docs.teradata.com/r/Configuring-Teradata-VantageTM-After-Installation/January-2021/Security-Overview/Vantage-Security-Overview) dans la documentation Teradata.

1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification Teradata. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `user` contenant la valeur. *teradataUsername*
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `password` contenant la valeur. *teradataPassword*

1. Dans la console AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour l'étape suivante. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez Teradata.
   + Lorsque vous fournissez l'**URL JDBC**, indiquez l'URL de votre instance. Vous pouvez également coder en dur certains paramètres de connexion séparés par des virgules dans votre URL JDBC. L'URL doit être conforme au format suivant : `jdbc:teradata://teradataHostname/ParameterName=ParameterValue,ParameterName=ParameterValue`

     Les paramètres d'URL pris en charge sont les suivants :
     + `DATABASE` – nom de la base de données sur l'hôte à laquelle accéder par défaut.
     + `DBS_PORT` – le port de base de données utilisé lors de l'exécution sur un port non standard.
   + Lorsque vous sélectionnez un **type d'identifiant**, sélectionnez **AWS Secrets Manager**, puis définissez **AWS Secret** sur*secretName*.

1. Dans les situations suivantes, vous pouvez avoir besoin d'une configuration supplémentaire :
   + 

     Pour les instances Teradata hébergées sur AWS un Amazon VPC
     + Vous devrez fournir les informations de connexion Amazon VPC à la connexion AWS Glue qui définit vos informations de sécurité Teradata. Lorsque vous créez ou mettez à jour votre connexion, définissez le **VPC**, le **sous-réseau** et les **groupes de sécurité** dans les **options réseau**.

Après avoir créé une connexion AWS Glue Teradata, vous devez effectuer les étapes suivantes avant d'appeler votre méthode de connexion.
+ Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire*secretName*.
+ Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Lecture à partir de Teradata
<a name="aws-glue-programming-etl-connect-teradata-read"></a>

**Prérequis :**
+ Une table Teradata à partir de laquelle vous souhaitez lire. Vous aurez besoin du nom de la table,*tableName*.
+ Une connexion AWS Glue Teradata configurée pour fournir des informations d'authentification. Suivez les étapes *pour configurer une connexion à Teradata* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 

Par exemple : 

```
teradata_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableName"
    }
)
```

Vous pouvez également fournir une requête SQL SELECT pour filtrer les résultats renvoyés à votre DynamicFrame. Vous devrez configurer `query`.

Par exemple :

```
teradata_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName",
        "query": "query"
    }
)
```

## Écrire dans les tables Teradata
<a name="aws-glue-programming-etl-connect-teradata-write"></a>

**Prérequis :** une table Teradata dans laquelle vous souhaitez écrire,. *tableName* **Vous devez créer la table avant d'appeler la méthode de connexion.**

Par exemple :

```
teradata_write = glueContext.write_dynamic_frame.from_options(
    connection_type="teradata",
    connection_options={
        "connectionName": "connectionName", 
        "dbtable": "tableName"
    }
)
```

## Référence des options de connexion Teradata
<a name="aws-glue-programming-etl-connect-teradata-reference"></a>
+ `connectionName` — Obligatoire. Utilisé pour la lecture/l'écriture. Nom d'une connexion AWS Glue Teradata configurée pour fournir des informations d'authentification et de mise en réseau à votre méthode de connexion.
+ `dbtable` — obligatoire pour l'écriture, obligatoire pour la lecture à moins qu'une `query` ne soit fournie. Utilisé pour la lecture/l'écriture. Le nom de la table avec lequelle votre méthode de connexion va interagir.
+ `query` : utilisé pour la lecture. Une requête SELECT SQL définissant ce qui doit être récupéré lors de la lecture à partir de Teradata.

# Connexions Teradata Vantage NOS
<a name="connecting-to-data-teradata-nos"></a>

 La connexion Teradata NOS (Native Object Store) est une nouvelle connexion pour Teradata Vantage qui utilise la requête Teradata WRITE\$1NOS pour lire des tables existantes et la requête READ\$1NOS pour écrire dans des tables. Ces requêtes utilisent Amazon S3 comme répertoire intermédiaire. Le connecteur Teradata NOS est donc plus rapide que le connecteur Teradata existant (basé sur JDBC), surtout lorsqu’il s’agit de gérer de grandes quantités de données. 

 Vous pouvez utiliser la connexion Teradata NOS dans Spark AWS Glue pour lire et écrire dans des tables existantes dans Teradata Vantage dans les AWS Glue versions 5.0 et ultérieures. Vous pouvez définir ce qu'il faut lire dans Teradata à l'aide d'une requête SQL. Vous pouvez vous connecter à Teradata à l'aide des identifiants de nom d'utilisateur et de mot de passe enregistrés AWS Secrets Manager via une AWS Glue connexion. 

 Pour plus d’informations sur Teradata, veuillez consulter la [documentation Teradata](https://docs.teradata.com/) 

**Topics**
+ [

## Création d’une connexion Teradata NOS
](#creating-teradata-nos-connection)
+ [

## Lecture à partir de tables Teradata
](#reading-from-teradata-nos-tables)
+ [

## Écrire dans les tables Teradata
](#writing-to-teradata-nos-tables)
+ [

## Référence des options de connexion Teradata
](#teradata-nos-connection-option-reference)
+ [

## Fournir des options dans l'interface utilisateur AWS Glue Visual ETL
](#teradata-nos-connection-option-visual-etl-ui)

## Création d’une connexion Teradata NOS
<a name="creating-teradata-nos-connection"></a>

Pour vous connecter à Teradata NOS depuis AWS Glue, vous devez créer et stocker vos informations d'identification Teradata dans un AWS Secrets Manager secret, puis associer ce secret à une connexion AWS Glue Teradata NOS. Si votre instance Teradata se trouve dans un Amazon VPC, vous devrez également fournir des options réseau à AWS Glue votre connexion Teradata NOS. 

 **Prérequis :** 
+  Si vous accédez à votre environnement Teradata via Amazon VPC, configurez Amazon VPC pour permettre à AWS Glue votre tâche de communiquer avec l'environnement Teradata. Nous vous déconseillons d'accéder à l'environnement Teradata via l'Internet public. 
+  Dans Amazon VPC, identifiez ou créez un VPC, un sous-réseau et un groupe de sécurité qui AWS Glue seront utilisés lors de l'exécution de la tâche. En outre, vous devez vous assurer qu'Amazon VPC est configuré pour autoriser le trafic réseau entre votre instance Teradata et cet emplacement. Votre tâche devra établir une connexion TCP avec votre port client Teradata. Pour plus d’informations sur les ports Teradata, consultez [Security Groups for Teradata Vantage](https://docs.teradata.com/r/Teradata-VantageTM-on-AWS-DIY-Installation-and-Administration-Guide/April-2020/Before-Deploying-Vantage-on-AWS-DIY/Security-Groups-and-Ports). 
+  Selon la configuration de votre réseau, la connectivité VPC sécurisée peut nécessiter des modifications dans Amazon VPC et dans d'autres services réseau. Pour plus d'informations sur AWS la connectivité, consultez la section [Options de AWS connectivité](https://docs.teradata.com/r/Teradata-VantageCloud-Enterprise/Get-Started/Connecting-Your-Environment/AWS-Connectivity-Options) dans la documentation Teradata. 

### Pour configurer une connexion AWS Glue Teradata NOS :
<a name="creating-teradata-nos-connection-procedure"></a>

1.  Dans votre configuration Teradata, identifiez ou créez un *teradataUsername* et auquel *teradataPassword* AWS Glue vous vous connecterez. Pour plus d’informations, consultez [Vantage Security Overview](https://docs.teradata.com/r/Configuring-Teradata-VantageTM-After-Installation/January-2021/Security-Overview/Vantage-Security-Overview) dans la documentation Teradata. 

1.  Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification Teradata. Pour créer un secret dans AWS Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret dans la AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   +  Lorsque vous sélectionnez des Key/value paires, créez une paire pour la clé USERNAME avec la valeur*teradataUsername*. 
   +  Lorsque vous sélectionnez des Key/value paires, créez une paire pour la clé PASSWORD avec la valeur*teradataPassword*. 

1.  Dans la AWS Glue console, créez une connexion en suivant les étapes décrites dans [Ajouter une AWS Glue connexion](https://docs.aws.amazon.com/glue/latest/dg/console-connections.html). Après avoir créé la connexion, conservez le nom de la connexion pour l'étape suivante. *connectionName* 
   +  Lorsque vous sélectionnez un **type de connexion**, sélectionnez Teradata Vantage NOS. 
   +  Lorsque vous fournissez l'URL JDBC, indiquez l'URL de votre instance. Vous pouvez également coder en dur certains paramètres de connexion séparés par des virgules dans votre URL JDBC. L'URL doit être conforme au format suivant :` jdbc:teradata://teradataHostname/ParameterName=ParameterValue,ParameterName=ParameterValue `. 
   +  Les paramètres d'URL pris en charge sont les suivants : 
     +  `DATABASE` – nom de la base de données sur l'hôte à laquelle accéder par défaut. 
     +  `DBS_PORT` – le port de base de données utilisé lors de l'exécution sur un port non standard. 
   +  Lorsque vous sélectionnez un **type d'identifiant**, sélectionnez AWS Secrets Manager, puis définissez ** AWS Secret** sur*secretName*. 

1.  Dans les situations suivantes, vous pouvez avoir besoin d'une configuration supplémentaire : 
   +  Pour les instances Teradata AWS hébergées sur un Amazon VPC, vous devrez fournir les informations de connexion Amazon VPC à AWS Glue la connexion qui définit vos informations de sécurité Teradata. Lorsque vous créez ou mettez à jour votre connexion, définissez le **VPC**, le **sous-réseau** et les **groupes de sécurité** dans les **options réseau**. 

 Après avoir créé une connexion AWS Glue Teradata Vantage NOS, vous devez effectuer les étapes suivantes avant d'appeler votre méthode de connexion. 

1.  Accordez au rôle IAM associé à votre AWS Glue travail l'autorisation de lire*secretName*. 

1.  Dans la configuration de votre AWS Glue tâche, *connectionName* indiquez une **connexion réseau supplémentaire** sous **Connexions**. 

## Lecture à partir de tables Teradata
<a name="reading-from-teradata-nos-tables"></a>

### Prérequis :
<a name="w2aac67c11c24b8c41c17b3"></a>
+  Une table Teradata à partir de laquelle vous souhaitez lire. Vous aurez besoin du nom de la table,*tableName*. 
+  L'environnement Teradata dispose d'un accès en écriture au chemin Amazon S3 spécifié par l'`staging_fs_url`option,*stagingFsUrl*. 
+  Le rôle IAM associé à la AWS Glue tâche dispose d'un accès en écriture à l'emplacement Amazon S3 spécifié par `staging_fs_url` option. 
+  Une connexion AWS Glue Teradata NOS configurée pour fournir des informations d'authentification. Suivez la procédure [Pour configurer une connexion AWS Glue Teradata NOS :](#creating-teradata-nos-connection-procedure) pour configurer vos informations d’authentification. Vous aurez besoin du nom de la AWS Glue connexion,*connectionName*. 

 Exemple : 

```
teradata_read_table = glueContext.create_dynamic_frame.from_options(
    connection_type= "teradatanos",
    connection_options={
        "connectionName": "connectionName",
        "dbtable": "tableName",
        "staging_fs_url": "stagingFsUrl"
    }
)
```

 Vous pouvez également fournir une requête SQL SELECT pour filtrer les résultats renvoyés à votre DynamicFrame. Vous devrez configurer query. Si vous configurez à la fois dbTable et query, le connecteur ne parvient pas à lire les données. Par exemple : 

```
teradata_read_query = glueContext.create_dynamic_frame.from_options(
    connection_type="teradatanos",
    connection_options={
        "connectionName": "connectionName",
        "query": "query",
        "staging_fs_url": "stagingFsUrl"
    }
)
```

 En outre, vous pouvez utiliser l' DataFrame API Spark pour lire des tables Teradata. Par exemple : 

```
options = {
    "url": "JDBC_URL",
    "dbtable": "tableName",
    "user": "teradataUsername", # or use "username" as key here
    "password": "teradataPassword",
    "staging_fs_url": "stagingFsUrl"
}
teradata_read_table = spark.read.format("teradatanos").option(**options).load()
```

## Écrire dans les tables Teradata
<a name="writing-to-teradata-nos-tables"></a>

### Conditions préalables
<a name="writing-to-teradata-nos-tables-prerequisites"></a>
+  Une table Teradata dans laquelle vous souhaitez écrire :*tableName*. 
+  L'environnement Teradata dispose d'un accès en lecture à l'emplacement Amazon S3 spécifié par l'`staging_fs_url`option,* stagingFsUrl *. 
+  Le rôle IAM associé à la AWS Glue tâche dispose d'un accès en écriture à l'emplacement Amazon S3 spécifié par `staging_fs_url` option. 
+  Une connexion AWS Glue Teradata configurée pour fournir des informations d'authentification. Suivez la procédure indiquée dans [Pour configurer une connexion AWS Glue Teradata NOS :](#creating-teradata-nos-connection-procedure) pour configurer vos informations d’authentification. Vous aurez besoin du nom de la AWS Glue connexion,*connectionName*. 

   Par exemple : 

  ```
  teradata_write = glueContext.write_dynamic_frame.from_options(
      frame=dynamicFrame,
      connection_type= "teradatanos",
      connection_options={
          "connectionName": "connectionName", 
          "dbtable": "tableName",
          "staging_fs_url": "stagingFsUrl"
      }
  )
  ```

## Référence des options de connexion Teradata
<a name="teradata-nos-connection-option-reference"></a>

 **Options de connexion et d’opération :** 
+  `connectionName` — Obligatoire. Utilisé pour la lecture/l'écriture. Nom d'une connexion AWS Glue Teradata configurée pour fournir des informations d'authentification et de mise en réseau à votre méthode de connexion. 
+  `staging_fs_url` — Obligatoire. Utilisé pour la lecture/l'écriture. Emplacement accessible en écriture dans Amazon S3, à utiliser pour les données déchargées lors de la lecture depuis Teradata, et pour les données Parquet à charger dans Redshift lors de l’écriture sur Teradata. Le compartiment S3 doit se trouver dans la même région que celle de vos AWS Glue tâches. 
+  `dbtable` — obligatoire pour l'écriture, obligatoire pour la lecture à moins qu'une `query` ne soit fournie. Utilisé pour la lecture/l'écriture. Le nom de la table avec lequelle votre méthode de connexion va interagir. 
+  `query` : utilisé pour la lecture. Une requête SELECT SQL définissant ce qui doit être récupéré lors de la lecture à partir de Teradata. Vous ne pouvez pas réussir si l’option `dbtable` est fournie. 
+  `clean_staging_s3_dir`— Facultatif. Utilisé pour la lecture/l'écriture. Si la valeur est true, nettoyez les objets Amazon S3 intermédiaires après une lecture ou une écriture. La valeur par défaut est True. 
+  `pre_actions`— Facultatif. Utilisé pour écrire. Liste séparée par des points-virgules des commandes SQL exécutées avant le transfert des données entre Spark et Teradata Vantage. 
+  `post_actions`— Facultatif. Utilisé pour écrire. Liste séparée par des points-virgules des commandes SQL exécutées après le transfert des données entre Spark et Teradata Vantage. 
+  `truncate`— Facultatif. Utilisé pour écrire. Si la valeur est true, le connecteur tronque la table lors de l’écriture en mode de réécriture. Si la valeur est false, le connecteur supprime la table lors de l’écriture en mode de réécriture. La valeur par défaut est false. 
+  `create_table_script`— Facultatif. Utilisé pour écrire. Une instruction SQL pour créer une table lors de l’écriture sur Teradata Vantage. Cette option est utile lorsque vous souhaitez créer une table avec des métadonnées personnalisées (par exemple, table CREATE MULTISET ou SET ou modifier l’index principal). Notez que le nom de table utilisé dans le script de création de table doit correspondre au nom de table spécifié dans l’option `dbtable`. 
+  `partition_size_in_mb`— Facultatif. Utilisé pour la lecture. Taille maximale d’une partition Spark en mégaoctets lors de la lecture d’objets Amazon S3 intermédiaires. La valeur par défaut est 128. 

 Vous pouvez fournir des options avancées lors de la création d’un nœud Teradata. Ces options sont les mêmes que celles disponibles lors de la programmation AWS Glue de scripts Spark.

 Consultez [Connexions Teradata Vantage](aws-glue-programming-etl-connect-teradata-home.md). 

 **Options d’autorisation :** 

 Vous trouverez ci-dessous les options utilisées pour fournir les informations d'identification du AWS compte que le connecteur utilise pour accéder au compartiment Amazon S3 intermédiaire. Vous pouvez choisir (1) de ne fournir aucune option d'autorisation et d'utiliser des informations d'identification temporaires générées à partir de votre rôle d' AWS Glue exécution ; ou (2) de fournir un objet d'autorisation `auth_object` que vous avez créé ; ou (3) de le fournir `aws_access_key_id and aws_secret_access_key` si vous utilisez des informations d'identification à long terme, ou de fournir `aws_access_key``aws_secret_access_key`, et `aws_session_token` si vous utilisez des informations d'identification temporaires. 
+  `auth_object` : facultatif. Utilisé pour accéder au compartiment Amazon S3 intermédiaire. Chaîne d’objets d’autorisation créée dans une instance Teradata. Si elle est fournie, le connecteur utilisera cet objet d’autorisation pour accéder au compartiment Amazon S3 intermédiaire. Si elles ne sont pas fournies, `aws_access_key_id` et qu'elles ne le `aws_secret_access_key` sont pas non plus, une information d'identification temporaire sera extraite du rôle AWS Glue d'exécution et utilisée par le connecteur. Le AWS compte associé à cet objet d'autorisation doit se trouver dans la même région que vos AWS Glue tâches et votre compartiment Amazon S3 intermédiaire ou être configuré avec la confiance entre comptes. 
+  `aws_access_key_id` : facultatif. Utilisé pour accéder au compartiment Amazon S3 intermédiaire. Fait partie des informations d'identification de sécurité d'un AWS compte. Si `auth_object` n’est pas fourni et si `aws_access_key_id` est fourni avec `aws_secret_access_key`, le connecteur les utilisera pour accéder au compartiment Amazon S3 intermédiaire. Le AWS compte associé à cette clé d'accès doit se trouver dans la même région que vos AWS Glue tâches et votre compartiment Amazon S3 intermédiaire ou être configuré avec la confiance entre comptes. 
+  `aws_secret_access_key` : facultatif. Utilisé pour accéder au compartiment Amazon S3 intermédiaire. Fait partie des informations d'identification de sécurité d'un AWS compte. Si `auth_object` n’est pas fourni et si `aws_secret_access_key` est fourni avec `aws_access_key_id`, le connecteur les utilisera pour accéder au compartiment Amazon S3 intermédiaire. Le AWS compte associé à cette clé secrète doit se trouver dans la même région que vos AWS Glue tâches et votre compartiment Amazon S3 intermédiaire ou être configuré avec la confiance entre comptes. 
+  `aws_session_token` : facultatif. Utilisé pour accéder au compartiment Amazon S3 intermédiaire. Fait partie d'un identifiant de sécurité temporaire d'un AWS compte. Doit être fourni avec `aws_access_key_id` et `aws_secret_access_key`. 

## Fournir des options dans l'interface utilisateur AWS Glue Visual ETL
<a name="teradata-nos-connection-option-visual-etl-ui"></a>

 Vous pouvez indiquer toutes les options ci-dessus dans l’interface utilisateur de votre tâche ETL visuel. Pour l’option connectionName, vous devez choisir dans la liste déroulante des connexions Teradata Vantage NOS. Pour toutes les autres options, vous devez les fournir via les propriétés personnalisées de Teradata Vantage NOS sous forme de paires clé-valeur. 

![\[Le volet de la fenêtre indique que la connexion Teradata NOS Vantage est sélectionnée.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/teradata-nos-vantage-connection-options.png)


# Connexions Vertica
<a name="aws-glue-programming-etl-connect-vertica-home"></a>

Vous pouvez utiliser AWS Glue for Spark pour lire et écrire dans des tables dans Vertica dans AWS Glue 4.0 et versions ultérieures. Vous pouvez définir ce qu'il faut lire dans Vertica à l'aide d'une requête SQL. Vous vous connectez à Vertica à l'aide du nom d'utilisateur et du mot de passe enregistrés AWS Secrets Manager via une connexion AWS Glue.

Pour de plus amples informations sur Vertica, consultez la [documentation Vertica](https://www.vertica.com/docs/9.3.x/HTML/Content/Authoring/UsingVerticaOnAWS/UsingVerticaOnAWS.htm).

## Configuration de connexions Vertica
<a name="aws-glue-programming-etl-connect-vertica-configure"></a>

Pour vous connecter à Vertica depuis AWS Glue, vous devez créer et stocker vos informations d'identification Vertica dans un AWS Secrets Manager secret, puis associer ce secret à une connexion Vertica AWS Glue. Si votre instance Vertica se trouve dans un Amazon VPC, vous devrez également fournir des options réseau à votre connexion AWS Glue Vertica. Vous aurez besoin d'un compartiment Amazon S3 ou d'un dossier à utiliser pour le stockage temporaire lors de la lecture et de l'écriture dans la base de données.

Pour vous connecter à Vertica depuis AWS Glue, vous aurez besoin de certaines conditions préalables :
+ Un compartiment ou un dossier Amazon S3 à utiliser pour le stockage temporaire lors de la lecture et de l'écriture dans la base de données, désigné par*tempS3Path*.
**Note**  
Lorsque vous utilisez Vertica dans les aperçus des données des tâches AWS Glue, il est possible que les fichiers temporaires ne soient pas automatiquement supprimés. *tempS3Path* Pour garantir la suppression des fichiers temporaires, mettez directement fin à la session de prévisualisation des données en choisissant **Mettre fin à la session** dans le volet **Prévisualisation des données**.  
Si vous ne pouvez pas garantir la fin directe de la session de prévisualisation des données, pensez à configurer le cycle de vie d’Amazon S3 pour supprimer les anciennes données. Nous recommandons de supprimer les données de plus de 49 heures, sur la base de la durée d'exécution maximale des tâches plus une marge. Pour de plus amples informations sur la configuration du cycle de vie Amazon S3, consultez [Gestion du cycle de vie de votre stockage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html) dans la documentation Amazon S3.
+ Une politique IAM avec les autorisations appropriées pour votre chemin Amazon S3 que vous pouvez associer à votre rôle de travail AWS Glue.
+ Si votre instance Vertica se trouve dans un Amazon VPC, configurez Amazon VPC pour permettre à votre tâche AWS Glue de communiquer avec l'instance Vertica sans que le trafic ne transite par l'Internet public. 

  Dans Amazon VPC, identifiez ou créez un **VPC**, un **sous-réseau** et un **groupe de sécurité que** AWS Glue utilisera lors de l'exécution de la tâche. En outre, vous devez vous assurer qu'Amazon VPC est configuré pour autoriser le trafic réseau entre votre instance Vertica et cet emplacement. Votre tâche devra établir une connexion TCP avec votre port client Vertica (par défaut 5433). Selon la configuration de votre réseau, cela peut nécessiter des modifications des règles du groupe de sécurité, du réseau ACLs, des passerelles NAT et des connexions d'appairage.

Vous pouvez ensuite configurer AWS Glue pour l'utiliser avec Vertica.

**Pour configurer une connexion à Vertica :**

1. Dans AWS Secrets Manager, créez un secret à l'aide de vos informations d'identification Vertica, *verticaUsername* et*verticaPassword*. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la [section Créer un AWS Secrets Manager secret](https://docs.aws.amazon.com//secretsmanager/latest/userguide/create_secret.html) dans la AWS Secrets Manager documentation. Après avoir créé le secret, conservez le nom du secret *secretName* pour l'étape suivante. 
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `user` contenant la valeur. *verticaUsername*
   + Lorsque vous sélectionnez des **paires clé/valeur**, créez une paire pour la clé `password` contenant la valeur. *verticaPassword*

1. Dans la console AWS Glue, créez une connexion en suivant les étapes décrites dans[Ajouter une AWS Glue connexion](console-connections.md). Après avoir créé la connexion, conservez le nom de la connexion pour l'étape suivante. *connectionName* 
   + Lorsque vous sélectionnez un **type de connexion**, sélectionnez Vertica.
   + Lorsque vous sélectionnez l'**hôte Vertica**, indiquez le nome d'hôte de votre installation Vertica.
   + Lorsque vous sélectionnez le **port Vertica**, le port via lequel votre installation Vertica est disponible.
   + Lorsque vous sélectionnez un **AWS secret**, indiquez-le*secretName*.

1. Dans les situations suivantes, vous pouvez avoir besoin d'une configuration supplémentaire :
   + 

     Pour les instances Vertica hébergées AWS dans un Amazon VPC
     + Fournissez les informations de connexion Amazon VPC à la connexion AWS Glue qui définit vos informations de sécurité Vertica. Lorsque vous créez ou mettez à jour votre connexion, définissez le **VPC**, le **sous-réseau** et les **groupes de sécurité** dans les **options réseau**.

Après avoir créé une connexion AWS Glue Vertica, vous devez effectuer les étapes suivantes avant d'appeler votre méthode de connexion.
+ Accordez au rôle IAM associé à votre tâche AWS Glue des autorisations à*tempS3Path*.
+ Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire*secretName*.
+ Dans la configuration de votre tâche AWS Glue*connectionName*, fournissez une **connexion réseau supplémentaire**.

## Lecture à partir de Vertica
<a name="aws-glue-programming-etl-connect-vertica-read"></a>

**Prérequis :** 
+ Une table Vertica à partir de laquelle vous souhaitez lire. Vous aurez besoin du nom de la base de données Vertica *dbName* et du nom de la table. *tableName*
+ Une connexion AWS Glue Vertica configurée pour fournir des informations d'authentification. Suivez les étapes de la procédure précédente *Pour configurer une connexion à Vertica* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 
+ Un compartiment ou un dossier Amazon S3 à utiliser pour le stockage temporaire, mentionné précédemment. Vous aurez besoin du nom,*tempS3Path*. Vous devrez vous connecter à cet emplacement à l'aide du protocole `s3a`.

Par exemple : 

```
dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="vertica",
    connection_options={
        "connectionName": "connectionName",
        "staging_fs_url": "s3a://tempS3Path",
        "db": "dbName",
        "table": "tableName",
    }
)
```

Vous pouvez également fournir une requête SQL SELECT pour filtrer les résultats qui vous sont renvoyés DynamicFrame ou pour accéder à un ensemble de données à partir de plusieurs tables.

Par exemple :

```
dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="vertica",
    connection_options={
        "connectionName": "connectionName",
        "staging_fs_url": "s3a://tempS3Path",
        "db": "dbName",
        "query": "select * FROM tableName",
    },
)
```

## Écrire dans les tables Vertica
<a name="aws-glue-programming-etl-connect-vertica-write"></a>

Cet exemple écrit les informations d'un fichier existant DynamicFrame *dynamicFrame* dans Vertica. Si le tableau contient déjà des informations, AWS Glue ajoutera les données de votre DynamicFrame.

**Prérequis :** 
+ Nom de table actuel ou souhaité*tableName*, dans lequel vous souhaitez écrire. Vous aurez également besoin du nom de base de données Vertica correspondant,*dbName*.
+ Une connexion AWS Glue Vertica configurée pour fournir des informations d'authentification. Suivez les étapes de la procédure précédente *Pour configurer une connexion à Vertica* afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue,*connectionName*. 
+ Un compartiment ou un dossier Amazon S3 à utiliser pour le stockage temporaire, mentionné précédemment. Vous aurez besoin du nom,*tempS3Path*. Vous devrez vous connecter à cet emplacement à l'aide du protocole `s3a`.

Par exemple : 

```
glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="vertica",
    connection_options={
        "connectionName": "connectionName",
        "staging_fs_url": "s3a://tempS3Path",
        "db": "dbName",
        "table": "tableName",
    }
)
```

## Référence des options de connexion Vertica
<a name="aws-glue-programming-etl-connect-vertica-reference"></a>
+ `connectionName` — Obligatoire. Utilisé pour la lecture/l'écriture. Le nom d'une connexion AWS Glue Vertica configurée pour fournir des informations d'authentification et de réseau à votre méthode de connexion.
+ `db` — Obligatoire. Utilisé pour la lecture/l'écriture. Le nom d'une base de données dans Vertica avec lequelle votre méthode de connexion va interagir.
+ `dbSchema` — obligatoire si nécessaire pour identifier votre table. Utilisé pour la lecture/l'écriture. Valeur par défaut : `public`. Le nom d'un schéma avec lequel votre méthode de connexion va interagir.
+ `table` — obligatoire pour l'écriture, obligatoire pour la lecture à moins qu'une `query` ne soit fournie. Utilisé pour la lecture/l'écriture. Le nom de la table avec lequelle votre méthode de connexion va interagir.
+ `query` : utilisé pour la lecture. Une requête SELECT SQL définissant ce qui doit être récupéré lors de la lecture à partir de Teradata.
+ `staging_fs_url` — Obligatoire. Utilisé pour la lecture/l'écriture. Valeurs valides : `s3a` URLs. L'URL d'un compartiment ou d'un dossier Amazon S3 à utiliser pour le stockage temporaire.

## DataFrame options pour l'ETL dans AWS Glue 5.0 pour Spark
<a name="aws-glue-programming-etl-connect-dataframe"></a>

A DataFrame est un ensemble de données organisé en colonnes nommées semblables à une table et prenant en charge les opérations de style fonctionnel (map/reduce/filter/etc.) et les opérations SQL (sélection, projet, agrégation).

Pour créer un DataFrame pour une source de données prise en charge par Glue, les éléments suivants sont requis :
+ connecteur de source de données `ClassName`
+ connexion de source de données `Options`

De même, pour écrire un dans DataFrame un récepteur de données supporté par Glue, il en va de même :
+ connecteur de récepteur de données `ClassName`
+ connexion au récepteur de données `Options`

Notez que les fonctionnalités de AWS Glue telles que les signets de tâches et les DynamicFrame options telles que celles-ci ne `connectionName` sont pas prises en charge dans DataFrame. Pour plus de détails sur les opérations prises en charge DataFrame et pour en savoir plus, consultez la documentation de Spark pour [DataFrame](https://spark.apache.org/docs/3.5.2/api/python/reference/pyspark.sql/dataframe.html).

### Spécification du connecteur ClassName
<a name="aws-glue-programming-etl-connect-dataframe-classname"></a>

Pour spécifier le `ClassName` d’une source de données/d’un récepteur, utilisez l’option `.format` permettant de fournir le `ClassName` du connecteur correspondant qui définit la source de données/le récepteur.

**Connecteurs JDBC**  
Pour les connecteurs JDBC, indiquez `jdbc` en tant que valeur de l’option `.format` et fournissez le pilote JDBC `ClassName` dans l’option `driver`.

```
df = spark.read.format("jdbc").option("driver", "<DATA SOURCE JDBC DRIVER CLASSNAME>")...

df.write.format("jdbc").option("driver", "<DATA SINK JDBC DRIVER CLASSNAME>")...
```

Le tableau suivant répertorie le pilote JDBC de la source `ClassName` de données prise en charge dans AWS Glue for. DataFrames

| Source de données | Chauffeur ClassName | 
| --- |--- |
| PostgreSQL | pilote org.postgreSQL | 
| Oracle | oracle.jdbc.driver. OracleDriver | 
| SQLServer | com.microsoft.sqlserver.jdbc. SQLServerChauffeur | 
| MySQL | com.mysql.jdbc.driver | 
| SAPHana | com.sap.db.jdbc.driver | 
| Teradata | com.teradata.jdbc. TeraDriver | 

**Connecteurs Spark**  
Pour les connecteurs Spark, spécifiez le `ClassName` du connecteur en tant que valeur de l’option `.format`.

```
df = spark.read.format("<DATA SOURCE CONNECTOR CLASSNAME>")...

df.write.format("<DATA SINK CONNECTOR CLASSNAME>")...
```

Le tableau suivant répertorie le connecteur Spark `ClassName` de la source de données prise en charge dans AWS Glue for DataFrames.

| Source de données | ClassName | 
| --- |--- |
| MongoDB/DocumentDB | glue.spark.mongodb | 
| Redshift | io.github.spark\$1redshift\$1community.spark.redshift | 
| AzureCosmos | cosmos.oltp | 
| AzureSQL | com.microsoft.sqlserver.jdbc.spark | 
| BigQuery | com.google.cloud.spark.bigquery | 
| OpenSearch | org.opensearch.spark.sql | 
| Snowflake | net.snowflake.spark.snowflake | 
| Vertica | com.vertica.spark.datasource. VerticaSource | 

### Spécification des options de connexion
<a name="aws-glue-programming-etl-connect-dataframe-connection-options"></a>

Pour spécifier les `Options` de la connexion à une source de données/un récepteur, utilisez `.option(<KEY>, <VALUE>)` pour fournir des options individuelles ou `.options(<MAP>)` pour fournir plusieurs options sous forme de carte clé-valeur.

Chaque donnée source/sink prend en charge son propre ensemble de connexions`Options`. Pour plus de détails sur les connecteurs disponibles`Options`, reportez-vous à la documentation publique du connecteur de données source/sink Spark spécifique répertorié dans le tableau suivant.
+ [JDBC](https://spark.apache.org/docs/3.5.2/sql-data-sources-jdbc.html)
+ [MongoDB/DocumentDB](https://www.mongodb.com/docs/spark-connector/v10.4/)
+ [Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/spark-redshift-connector.html)
+ [AzureCosmos](https://github.com/Azure/azure-cosmosdb-spark)
+ [AzureSQL](https://learn.microsoft.com/en-us/sql/connect/spark/connector?view=sql-server-ver16)
+ [BigQuery](https://cloud.google.com/dataproc/docs/tutorials/bigquery-connector-spark-example)
+ [OpenSearch](https://github.com/opensearch-project/opensearch-hadoop/blob/main/USER_GUIDE.md#apache-spark)
+ [Snowflake](https://docs.snowflake.com/en/user-guide/spark-connector-use#setting-configuration-options-for-the-connector)
+ [Vertica](https://github.com/vertica/spark-connector)

### Exemples
<a name="aws-glue-programming-etl-connect-dataframe-examples"></a>

Les exemples suivants sont extraits de PostgreSQL et écrivent dans : SnowFlake

**Python**  
Exemple :

```
from awsglue.context import GlueContext
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

dataSourceClassName = "jdbc"
dataSourceOptions = {
  "driver": "org.postgresql.Driver",
  "url": "<url>",
  "user": "<user>",
  "password": "<password>",
  "dbtable": "<dbtable>",
}

dataframe = spark.read.format(className).options(**options).load()

dataSinkClassName = "net.snowflake.spark.snowflake"
dataSinkOptions = {
  "sfUrl": "<url>",
  "sfUsername": "<username>",
  "sfPassword": "<password>",
  "sfDatabase" -> "<database>",                              
  "sfSchema" -> "<schema>",                       
  "sfWarehouse" -> "<warehouse>"  
}

dataframe.write.format(dataSinkClassName).options(**dataSinkOptions).save()
```

**Scala**  
Exemple :

```
import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder().getOrCreate()

val dataSourceClassName = "jdbc"
val dataSourceOptions = Map(
  "driver" -> "org.postgresql.Driver",
  "url" -> "<url>",
  "user" -> "<user>",
  "password" -> "<password>",
  "dbtable" -> "<dbtable>"
)

val dataframe = spark.read.format(dataSourceClassName).options(dataSourceOptions).load()

val dataSinkClassName = "net.snowflake.spark.snowflake"
val dataSinkOptions = Map(
  "sfUrl" -> "<url>",
  "sfUsername" -> "<username>",
  "sfPassword" -> "<password>",
  "sfDatabase" -> "<database>",
  "sfSchema" -> "<schema>",
  "sfWarehouse" -> "<warehouse>"
)

dataframe.write.format(dataSinkClassName).options(dataSinkOptions).save()
```

## Valeurs personnalisées et AWS Marketplace ConnectionType
<a name="aws-glue-programming-etl-connect-market"></a>

Cela inclut les éléments suivants :
+ `"connectionType": "marketplace.athena"` : désigne une connexion à un magasin de données Amazon Athena. La connexion utilise un connecteur provenant de AWS Marketplace.
+ `"connectionType": "marketplace.spark"` : désigne une connexion à un magasin de données Apache Spark. La connexion utilise un connecteur provenant de AWS Marketplace.
+ `"connectionType": "marketplace.jdbc"` : désigne une connexion à un magasin de données JDBC. La connexion utilise un connecteur provenant de AWS Marketplace.
+ `"connectionType": "custom.athena"` : désigne une connexion à un magasin de données Amazon Athena. La connexion utilise un connecteur personnalisé que vous chargez sur AWS Glue Studio.
+ `"connectionType": "custom.spark"` : désigne une connexion à un magasin de données Apache Spark. La connexion utilise un connecteur personnalisé que vous chargez sur AWS Glue Studio.
+ `"connectionType": "custom.jdbc"` : désigne une connexion à un magasin de données JDBC. La connexion utilise un connecteur personnalisé que vous chargez sur AWS Glue Studio.

### Options de connexion pour le type custom.jdbc ou marketplace.jdbc
<a name="marketplace-jdbc-connect-options"></a>
+ `className` — chaîne, obligatoire, nom de la classe du pilote.
+ `connectionName` — chaîne, obligatoire, nom de la connexion associée au connecteur.
+ `url` — chaîne, obligatoire, URL JDBC avec des espaces réservés (`${}`) qui sont utilisés pour créer la connexion à la source de données. L'espace réservé `${secretKey}` est remplacé par le secret du même nom dans AWS Secrets Manager. Reportez-vous à la documentation du magasin de données pour plus d'informations sur la construction de l'URL. 
+ `secretId` ou `user/password` — chaîne, obligatoire, utilisée pour récupérer les informations d'identification de l'URL. 
+ `dbTable` ou `query` — chaîne, obligatoire, la table ou la requête SQL à partir de laquelle obtenir les données. Vous pouvez préciser `dbTable` ou `query`, mais pas les deux. 
+ `partitionColumn` — chaîne, facultatif, nom d'une colonne entière utilisée pour le partitionnement. Cette option fonctionne uniquement lorsqu'elle est incluse dans `lowerBound`, `upperBound` et `numPartitions`. Cette option fonctionne de la même manière que dans le lecteur JDBC SQL Spark. Pour plus d'informations, consultez la section [JDBC vers d'autres bases de données](https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html) dans le guide *Apache Spark SQL DataFrames et Datasets*.

  Les valeurs `lowerBound` et `upperBound` sont utilisées pour décider de la progression de la partition, pas pour filtrer les lignes de la table. Toutes les lignes de la table sont partitionnées et renvoyées. 
**Note**  
Lorsque vous utilisez une requête au lieu d'un nom de table, vous devez valider que la requête fonctionne avec la condition de partitionnement spécifiée. Par exemple :   
Si le format de votre requête est `"SELECT col1 FROM table1"`, testez la requête en ajoutant une clause `WHERE` à la fin de la requête qui utilise la colonne de partition. 
Si le format de votre requête est `SELECT col1 FROM table1 WHERE col2=val"`, testez la requête en étendant la clause `WHERE` avec `AND` et une expression qui utilise la colonne de partition.
+ `lowerBound` — entier, facultatif, valeur minimale de `partitionColumn` qui est utilisée pour décider de la progression de la partition. 
+ `upperBound` — entier, facultatif, valeur maximale de `partitionColumn` qui est utilisée pour décider de la progression de la partition. 
+ `numPartitions` — entier, facultatif, nombre de partitions. Cette valeur, ainsi que `lowerBound` (inclusive) et `upperBound` (exclusive) forment les progressions de partition pour les expressions de clause `WHERE` générées qui sont utilisées pour diviser le fichier `partitionColumn`. 
**Important**  
Soyez prudent avec le nombre de partitions, car avoir un trop grand nombre de partitions peut causer des problèmes sur vos systèmes de bases de données externes. 
+ `filterPredicate` — chaîne, facultative, clause de condition supplémentaire pour filtrer les données à partir de la source. Par exemple : 

  ```
  BillingCity='Mountain View'
  ```

  Lorsque vous utilisez une *requête* au lieu d'un nom de *table*, vous devez vérifier que la requête fonctionne avec le `filterPredicate` spécifié. Par exemple : 
  + Si le format de votre requête est `"SELECT col1 FROM table1"`, testez la requête en ajoutant une clause `WHERE` à la fin de la requête qui utilise le prédicat de filtre. 
  + Si le format de votre requête est `"SELECT col1 FROM table1 WHERE col2=val"`, testez la requête en étendant la clause `WHERE` avec `AND` et une expression qui utilise le prédicat de filtre.
+ `dataTypeMapping` — dictionnaire, facultatif, mappage de type de données personnalisé qui crée un mappage d'un type de données **JDBC** à un type de données **Glue**. Par exemple, l'option `"dataTypeMapping":{"FLOAT":"STRING"}` mappe les champs de données du type JDBC `FLOAT` sur le type Java `String` en appelant la méthode `ResultSet.getString()` du pilote, et l'utilise pour créer les enregistrements AWS Glue. L'objet est `ResultSet` implémenté par chaque pilote, donc le comportement est spécifique au pilote que vous utilisez. Reportez-vous à la documentation de votre pilote JDBC pour comprendre comment le pilote effectue les conversions. 
+ Les types de données AWS Glue actuellement pris en charge sont les suivants :
  + DATE
  + CHAÎNE
  + TIMESTAMP
  + INT
  + FLOAT
  + LONG
  + BIGDECIMAL
  + BYTE
  + SHORT
  + DOUBLE

   Les types de données JDBC pris en charge sont [Java8 java.sql.types](https://docs.oracle.com/javase/8/docs/api/java/sql/Types.html).

  Les mappages de type de données par défaut (de JDBC à AWS Glue) sont les suivants :
  +  DATE -> DATE
  +  VARCHAR -> STRING
  +  CHAR -> STRING
  +  LONGNVARCHAR -> STRING
  +  TIMESTAMP -> TIMESTAMP
  +  INTEGER -> INT
  +  FLOAT -> FLOAT
  +  REAL -> FLOAT
  +  BIT -> BOOLEAN
  +  BOOLEAN -> BOOLEAN
  +  BIGINT -> LONG
  +  DECIMAL -> BIGDECIMAL
  +  NUMERIC -> BIGDECIMAL
  +  TINYINT -> SHORT
  +  SMALLINT -> SHORT
  +  DOUBLE -> DOUBLE

  Si vous utilisez un mappage de type de données personnalisé avec l'option `dataTypeMapping`, vous pouvez remplacer un mappage de type de données par défaut. Seuls les types de données JDBC répertoriés dans l'option `dataTypeMapping` sont affectés ; le mappage par défaut est utilisé pour tous les autres types de données JDBC. Vous pouvez ajouter des mappages pour des types de données JDBC supplémentaires si nécessaire. Si un type de données JDBC n'est inclus ni dans le mappage par défaut ni dans un mappage personnalisé, le type de données est converti en type de données AWS Glue `STRING` par défaut. 

L'exemple de code Python suivant montre comment lire à partir de bases de données JDBC avec des pilotes AWS Marketplace JDBC. Il montre la lecture à partir d'une base de données et l'écriture dans un emplacement S3. 

```
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
     
    ## @params: [JOB_NAME]
    args = getResolvedOptions(sys.argv, ['JOB_NAME'])
     
    sc = SparkContext()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)
    job.init(args['JOB_NAME'], args)
    ## @type: DataSource
    ## @args: [connection_type = "marketplace.jdbc", connection_options = 
     {"dataTypeMapping":{"INTEGER":"STRING"},"upperBound":"200","query":"select id, 
       name, department from department where id < 200","numPartitions":"4",
       "partitionColumn":"id","lowerBound":"0","connectionName":"test-connection-jdbc"},
        transformation_ctx = "DataSource0"]
    ## @return: DataSource0
    ## @inputs: []
    DataSource0 = glueContext.create_dynamic_frame.from_options(connection_type = 
      "marketplace.jdbc", connection_options = {"dataTypeMapping":{"INTEGER":"STRING"},
      "upperBound":"200","query":"select id, name, department from department where 
       id < 200","numPartitions":"4","partitionColumn":"id","lowerBound":"0",
       "connectionName":"test-connection-jdbc"}, transformation_ctx = "DataSource0")
    ## @type: ApplyMapping
    ## @args: [mappings = [("department", "string", "department", "string"), ("name", "string",
      "name", "string"), ("id", "int", "id", "int")], transformation_ctx = "Transform0"]
    ## @return: Transform0
    ## @inputs: [frame = DataSource0]
    Transform0 = ApplyMapping.apply(frame = DataSource0, mappings = [("department", "string",
      "department", "string"), ("name", "string", "name", "string"), ("id", "int", "id", "int")], 
       transformation_ctx = "Transform0")
    ## @type: DataSink
    ## @args: [connection_type = "s3", format = "json", connection_options = {"path": 
     "s3://<S3 path>/", "partitionKeys": []}, transformation_ctx = "DataSink0"]
    ## @return: DataSink0
    ## @inputs: [frame = Transform0]
    DataSink0 = glueContext.write_dynamic_frame.from_options(frame = Transform0, 
      connection_type = "s3", format = "json", connection_options = {"path": 
      "s3://<S3 path>/", "partitionKeys": []}, transformation_ctx = "DataSink0")
    job.commit()
```

### Options de connexion pour le type custom.athena ou marketplace.athena
<a name="marketplace-athena-connect-options"></a>
+ `className` — chaîne, obligatoire, nom de la classe du pilote. Lorsque vous utilisez le CloudWatch connecteur Athena, cette valeur de paramètre est le préfixe de la classe Name (par exemple,). `"com.amazonaws.athena.connectors"` Le CloudWatch connecteur Athena est composé de deux classes : un gestionnaire de métadonnées et un gestionnaire d'enregistrements. Si vous fournissez le préfixe commun ici, l'API charge les classes correctes en fonction de ce préfixe.
+ `tableName`— Chaîne, obligatoire, nom du flux de CloudWatch journal à lire. Cet extrait de code utilise le nom de vue spécial `all_log_streams`, ce qui signifie que la trame de données dynamique renvoyée contiendra les données de tous les flux de journaux du groupe de journaux.
+ `schemaName`— Chaîne, obligatoire, nom du groupe de CloudWatch journaux à partir duquel la lecture doit être effectuée. Par exemple, `/aws-glue/jobs/output`.
+ `connectionName` — chaîne, obligatoire, nom de la connexion associée au connecteur.

Pour des options supplémentaires pour ce connecteur, consultez le [fichier README du CloudWatch connecteur Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-cloudwatch) sur. GitHub

L'exemple de code Python suivant montre comment lire à partir d'un magasin de données Athena à l'aide d'un connecteur AWS Marketplace . Il montre la lecture à partir d'Athena et l'écriture dans un emplacement S3. 

```
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
     
    ## @params: [JOB_NAME]
    args = getResolvedOptions(sys.argv, ['JOB_NAME'])
     
    sc = SparkContext()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)
    job.init(args['JOB_NAME'], args)
    ## @type: DataSource
    ## @args: [connection_type = "marketplace.athena", connection_options = 
     {"tableName":"all_log_streams","schemaName":"/aws-glue/jobs/output",
      "connectionName":"test-connection-athena"}, transformation_ctx = "DataSource0"]
    ## @return: DataSource0
    ## @inputs: []
    DataSource0 = glueContext.create_dynamic_frame.from_options(connection_type = 
      "marketplace.athena", connection_options = {"tableName":"all_log_streams",,
      "schemaName":"/aws-glue/jobs/output","connectionName":
      "test-connection-athena"}, transformation_ctx = "DataSource0")
    ## @type: ApplyMapping
    ## @args: [mappings = [("department", "string", "department", "string"), ("name", "string",
      "name", "string"), ("id", "int", "id", "int")], transformation_ctx = "Transform0"]
    ## @return: Transform0
    ## @inputs: [frame = DataSource0]
    Transform0 = ApplyMapping.apply(frame = DataSource0, mappings = [("department", "string",
      "department", "string"), ("name", "string", "name", "string"), ("id", "int", "id", "int")], 
       transformation_ctx = "Transform0")
    ## @type: DataSink
    ## @args: [connection_type = "s3", format = "json", connection_options = {"path": 
     "s3://<S3 path>/", "partitionKeys": []}, transformation_ctx = "DataSink0"]
    ## @return: DataSink0
    ## @inputs: [frame = Transform0]
    DataSink0 = glueContext.write_dynamic_frame.from_options(frame = Transform0, 
      connection_type = "s3", format = "json", connection_options = {"path": 
      "s3://<S3 path>/", "partitionKeys": []}, transformation_ctx = "DataSink0")
    job.commit()
```

### Options de connexion pour le type custom.spark ou marketplace.spark
<a name="marketplace-spark-connect-options"></a>
+ `className` — chaîne, obligatoire, nom de la classe du connecteur. 
+ `secretId` — chaîne, facultative, utilisée pour récupérer les informations d'identification pour la connexion du connecteur.
+ `connectionName` — chaîne, obligatoire, nom de la connexion associée au connecteur.
+ D'autres options dépendent du magasin de données. Par exemple, les options OpenSearch de configuration commencent par le préfixe`es`, comme décrit dans la documentation d'[Elasticsearch pour Apache](https://www.elastic.co/guide/en/elasticsearch/hadoop/current/configuration.html) Hadoop. Les connexions Spark à Snowflake utilisent des options telles que `sfUser` et `sfPassword`, comme décrit dans [Using the Spark Connector](https://docs.snowflake.com/en/user-guide/spark-connector-use.html) dans le guide *Connecting to Snowflake*.

L'exemple de code Python suivant montre comment lire depuis un magasin de OpenSearch données à l'aide d'une `marketplace.spark` connexion.

```
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
     
    ## @params: [JOB_NAME]
    args = getResolvedOptions(sys.argv, ['JOB_NAME'])
     
    sc = SparkContext()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)
    job.init(args['JOB_NAME'], args)
    ## @type: DataSource
    ## @args: [connection_type = "marketplace.spark", connection_options = {"path":"test",
      "es.nodes.wan.only":"true","es.nodes":"https://<AWS endpoint>",
      "connectionName":"test-spark-es","es.port":"443"}, transformation_ctx = "DataSource0"]
    ## @return: DataSource0
    ## @inputs: []
    DataSource0 = glueContext.create_dynamic_frame.from_options(connection_type = 
      "marketplace.spark", connection_options = {"path":"test","es.nodes.wan.only":
      "true","es.nodes":"https://<AWS endpoint>","connectionName":
      "test-spark-es","es.port":"443"}, transformation_ctx = "DataSource0")
    ## @type: DataSink
    ## @args: [connection_type = "s3", format = "json", connection_options = {"path": 
         "s3://<S3 path>/", "partitionKeys": []}, transformation_ctx = "DataSink0"]
    ## @return: DataSink0
    ## @inputs: [frame = DataSource0]
    DataSink0 = glueContext.write_dynamic_frame.from_options(frame = DataSource0, 
       connection_type = "s3", format = "json", connection_options = {"path": 
       "s3://<S3 path>/", "partitionKeys": []}, transformation_ctx = "DataSink0")
    job.commit()
```

## Options générales
<a name="aws-glue-programming-etl-connect-general-options"></a>

Les options de cette section sont fournies en tant que `connection_options`, mais ne s'appliquent pas à un connecteur en particulier.

Les paramètres suivants sont généralement utilisés lors de la configuration de signets. Ils peuvent s'appliquer aux flux de travail Amazon S3 ou JDBC. Pour de plus amples informations, veuillez consulter [Utilisation des marque-pages de tâche](programming-etl-connect-bookmarks.md).
+ `jobBookmarkKeys` : un tableau des noms des colonnes. 
+ `jobBookmarkKeysSortOrder` : chaîne définissant comment comparer les valeurs en fonction de l'ordre de tri. Valeurs valides : `"asc"`, `"desc"`.
+ `useS3ListImplementation` : utilisé pour gérer les performances de la mémoire lors de la liste du contenu du compartiment Amazon S3. Pour plus d'informations, consultez [Optimiser la gestion de la mémoire dans AWS Glue](https://aws.amazon.com/blogs/big-data/optimize-memory-management-in-aws-glue/).

# Options de format pour les entrées et sorties dans AWS Glue pour Spark
<a name="aws-glue-programming-etl-format"></a>

Ces pages fournissent des informations sur la prise en charge des fonctionnalités et les paramètres de configuration pour les formats de données pris en charge par AWS Glue pour Spark. Reportez-vous à la section suivante pour une description de l'utilisation et de l'applicabilité de ces informations. 

## Prise en charge des fonctionnalités de tous les formats de données dans AWS Glue
<a name="aws-glue-programming-etl-format-features"></a>

 Chaque format de données peut prendre en charge différentes fonctionnalités AWS de Glue. Les fonctionnalités communes suivantes peuvent être prises en charge ou non en fonction de votre type de format. Reportez-vous à la documentation de votre format de données pour comprendre comment tirer parti de nos caractéristiques pour répondre à vos besoins. 


|  |  | 
| --- |--- |
| Lecture | AWS Glue peut reconnaître et interpréter ce format de données sans ressources supplémentaires, telles que des connecteurs. | 
| Écrire | AWS Glue peut écrire des données dans ce format sans ressources supplémentaires. Vous pouvez inclure des bibliothèques tierces dans votre travail et utiliser les fonctions standard d'Apache Spark pour écrire des données, comme vous le feriez dans d'autres environnements Spark. Pour plus d'informations sur ces bibliothèques, consultez [Utiliser les bibliothèques Python avec AWS Glue](aws-glue-programming-python-libraries.md). | 
| Lecture en streaming | AWS Glue peut reconnaître et interpréter ce format de données à partir d'un flux de messages Apache Kafka, Amazon Managed Streaming for Apache Kafka ou Amazon Kinesis. Nous nous attendons à ce que les flux présentent les données dans un format cohérent, afin qu'elles soient lues comme DataFrames. | 
| Groupement des petits fichiers | AWS Glue peut regrouper des fichiers pour créer un travail par lots envoyé à chaque nœud lors de transformations avec AWS Glue. Cela peut améliorer considérablement les performances pour les charges de travail impliquant de grandes quantités de petits fichiers. Pour de plus amples informations, veuillez consulter [Lecture des fichiers en entrée dans des groupes de plus grande taille](grouping-input-files.md).  | 
| Signets de tâche | AWS Glue peut suivre la progression des transformations effectuant le même travail sur le même jeu de données d'une exécution à l'autre à l'aide de signets de tâches. Cela peut améliorer les performances des charges de travail impliquant des jeux de données pour lesquels le travail doit uniquement être effectué sur les nouvelles données depuis la dernière exécution de la tâche. Pour de plus amples informations, veuillez consulter [Suivi des données traitées à l'aide de signets de tâche](monitor-continuations.md). | 

## Paramètres utilisés pour interagir avec les formats de données dans AWS Glue
<a name="aws-glue-programming-etl-format-parameters"></a>

Certains types de connexion AWS Glue prennent en charge plusieurs `format` types, ce qui vous oblige à spécifier des informations sur le format de vos données avec un `format_options` objet lorsque vous utilisez des méthodes telles que`GlueContext.write_dynamic_frame.from_options`.
+ `s3`— Pour plus d'informations, consultez Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez également afficher la documentation des méthodes facilitant ce type de connexion :[create\$1dynamic\$1frame\$1from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options) et [write\$1dynamic\$1frame\$1from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options) en Python et dans les méthodes Scala correspondantes [getSourceWithFormat def](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat) et [getSinkWithFormat def](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat). 

  
+ `kinesis`— Pour plus d'informations, consultez Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion Kinesis](aws-glue-programming-etl-connect-kinesis-home.md#aws-glue-programming-etl-connect-kinesis). Vous pouvez également afficher la documentation de la méthode facilitant ce type de connexion :[create\$1data\$1frame\$1from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create-dataframe-from-options) et la méthode Scala correspondante [def createDataFrame FromOptions](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-createDataFrameFromOptions).
+ `kafka`— Pour plus d'informations, consultez Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion de Kafka](aws-glue-programming-etl-connect-kafka-home.md#aws-glue-programming-etl-connect-kafka). Vous pouvez également afficher la documentation de la méthode facilitant ce type de connexion :[create\$1data\$1frame\$1from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create-dataframe-from-options) et la méthode Scala correspondante [def createDataFrame FromOptions](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-createDataFrameFromOptions).

Certains types de connexion ne nécessitent pas`format_options`. Par exemple, dans le cadre d'une utilisation normale, une connexion JDBC à une base de données relationnelle récupère les données dans un format de données tabulaire cohérent. Par conséquent, la lecture à partir d'une connexion JDBC ne nécessiterait pas `format_options`.

Certaines méthodes pour lire et écrire des données dans de la colle ne nécessitent pas`format_options`. Par exemple, en utilisant `GlueContext.create_dynamic_frame.from_catalog` les crawlers AWS Glue. Les robots d'exploration déterminent la forme de vos données. Lorsque vous utilisez des robots d'exploration, un classificateur AWS Glue examinera vos données afin de prendre des décisions éclairées quant à la manière de représenter le format de vos données. Il stockera ensuite une représentation de vos données dans le catalogue de données AWS Glue, qui peut être utilisé dans un script AWS Glue ETL pour récupérer vos données avec la `GlueContext.create_dynamic_frame.from_catalog` méthode. Les robots d'exploration éliminent la nécessité de spécifier manuellement des informations sur le format de vos données.

Pour les tâches qui accèdent aux tables AWS Lake Formation gouvernées, AWS Glue prend en charge la lecture et l'écriture dans tous les formats pris en charge par les tables régies par Lake Formation. Pour consulter la liste actuelle des formats pris en charge pour les tables AWS Lake Formation gouvernées, consultez la section [Remarques et restrictions relatives aux tables gouvernées](https://docs.aws.amazon.com/lake-formation/latest/dg/governed-table-restrictions.html) dans le *guide du AWS Lake Formation développeur*.

**Note**  
Pour écrire Apache Parquet, AWS Glue ETL prend uniquement en charge l'écriture dans une table régie en spécifiant une option pour un type de dispositif d'écriture Parquet personnalisé optimisé pour les cadres dynamiques. Lorsque vous écrivez sur une table régie avec le format `parquet`, vous devez ajouter la clé `useGlueParquetWriter` avec une valeur de `true` dans les paramètres de la table.

**Topics**
+ [

## Prise en charge des fonctionnalités de tous les formats de données dans AWS Glue
](#aws-glue-programming-etl-format-features)
+ [

## Paramètres utilisés pour interagir avec les formats de données dans AWS Glue
](#aws-glue-programming-etl-format-parameters)
+ [

# Utilisation du format CSV dans AWS Glue
](aws-glue-programming-etl-format-csv-home.md)
+ [

# Utilisation du format Parquet dans AWS Glue
](aws-glue-programming-etl-format-parquet-home.md)
+ [

# Utilisation du format XML dans AWS Glue
](aws-glue-programming-etl-format-xml-home.md)
+ [

# Utilisation du format Avro dans Glue AWS
](aws-glue-programming-etl-format-avro-home.md)
+ [

# Utilisation du format GrokLog dans Glue AWS
](aws-glue-programming-etl-format-grokLog-home.md)
+ [

# Utilisation du format Ion dans AWS Glue
](aws-glue-programming-etl-format-ion-home.md)
+ [

# Utilisation du format JSON dans AWS Glue
](aws-glue-programming-etl-format-json-home.md)
+ [

# Utilisation du format ORC dans Glue AWS
](aws-glue-programming-etl-format-orc-home.md)
+ [

# Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL
](aws-glue-programming-etl-datalake-native-frameworks.md)
+ [

## Référence de configuration partagée
](#aws-glue-programming-etl-format-shared-reference)

# Utilisation du format CSV dans AWS Glue
<a name="aws-glue-programming-etl-format-csv-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format CSV, ce document présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue. 

 AWS Glue prend en charge l'utilisation du format CSV (valeurs séparées par des virgules). Il s'agit d'un format de données minimal basé sur des lignes. CSVs ne sont souvent pas strictement conformes à une norme, mais vous pouvez vous référer aux [RFC 4180 et RFC](https://tools.ietf.org/html/rfc4180) [7111](https://tools.ietf.org/html/rfc7111) pour plus d'informations. 

Vous pouvez utiliser AWS Glue pour lire CSVs depuis Amazon S3 et depuis des sources de streaming, ainsi que CSVs pour écrire sur Amazon S3. Vous pouvez lire et écrire des archives `bzip` et `gzip` contenant des fichiers CSV provenant de S3. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page. 

Le tableau suivant indique les fonctionnalités courantes de AWS Glue compatibles avec l'option de format CSV.


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | 

## Exemple : lecture de fichiers ou de dossiers CSV depuis S3
<a name="aws-glue-programming-etl-format-csv-read"></a>

 **Prérequis :** vous aurez besoin des chemins S3 (`s3path`) vers des fichiers ou dossiers CSV que vous souhaitez lire. 

 **Configuration :** dans vos options de fonction, spécifiez `format="csv"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier `s3path`. Vous pouvez configurer la manière dont le lecteur interagit avec S3 dans `connection_options`. Pour plus de détails, voir Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez configurer la manière dont le lecteur interprète les fichiers CSV dans votre `format_options`. Pour plus d'informations, consultez [CSV Configuration Reference](#aws-glue-programming-etl-format-csv-reference) (Référence de configuration CSV). 

Le script AWS Glue ETL suivant montre le processus de lecture de fichiers ou de dossiers CSV à partir de S3.

 Nous fournissons un lecteur CSV personnalisé avec des optimisations de performances pour les flux de travail courants à travers la clé de configuration `optimizePerformance`. Pour déterminer si ce lecteur est adapté à votre charge de travail, consultez [Optimiser les performances de lecture avec un lecteur CSV SIMD vectorisé](#aws-glue-programming-etl-format-simd-csv-reader). 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
# Example: Read CSV from S3
# For show, we handle a CSV with a header row.  Set the withHeader option.
# Consider whether optimizePerformance is right for your workflow.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://s3path"]},
    format="csv",
    format_options={
        "withHeader": True,
        # "optimizePerformance": True,
    },
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
dataFrame = spark.read\
    .format("csv")\
    .option("header", "true")\
    .load("s3://s3path")
```

------
#### [ Scala ]

Pour cet exemple, utilisez l'opération [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
// Example: Read CSV from S3
// For show, we handle a CSV with a header row.  Set the withHeader option.
// Consider whether optimizePerformance is right for your workflow.

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      formatOptions=JsonOptions("""{"withHeader": true}"""),
      connectionType="s3",
      format="csv",
      options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""")
    ).getDynamicFrame()
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`org.apache.spark.sql.DataFrame`).

```
val dataFrame = spark.read
  .option("header","true")
  .format("csv")
  .load("s3://s3path“)
```

------

## Exemple : écriture de fichiers et dossiers CSV dans S3
<a name="aws-glue-programming-etl-format-csv-write"></a>

 **Prérequis :** Vous aurez besoin d'un initialisé DataFrame (`dataFrame`) ou d'un DynamicFrame (`dynamicFrame`). Vous aurez également besoin de votre chemin de sortie S3, `s3path`. 

 **Configuration :** dans vos options de fonction, spécifiez `format="csv"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier `s3path`. Vous pouvez configurer la manière dont le scripteur interagit avec S3 dans `connection_options`. Pour plus de détails, voir Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez configurer la manière dont votre opération écrit le contenu de vos fichiers dans `format_options`. Pour plus d'informations, consultez [CSV Configuration Reference](#aws-glue-programming-etl-format-csv-reference) (Référence de configuration CSV). Le script ETL AWS Glue suivant montre le processus d'écriture de fichiers et dossiers CSV vers S3. 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [write\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options).

```
# Example: Write CSV to S3
# For show, customize how we write string type values.  Set quoteChar to -1 so our values are not quoted.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="s3",
    connection_options={"path": "s3://s3path"},
    format="csv",
    format_options={
        "quoteChar": -1,
    },
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
dataFrame.write\
    .format("csv")\
    .option("quote", None)\
    .mode("append")\
    .save("s3://s3path")
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat).

```
// Example: Write CSV to S3
// For show, customize how we write string type values. Set quoteChar to -1 so our values are not quoted.

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    
    glueContext.getSinkWithFormat(
        connectionType="s3",
        options=JsonOptions("""{"path": "s3://s3path"}"""),
        format="csv"
    ).writeDynamicFrame(dynamicFrame)
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`org.apache.spark.sql.DataFrame`).

```
dataFrame.write
    .format("csv")
    .option("quote", null)
    .mode("Append")
    .save("s3://s3path")
```

------

## Référence de configuration CSV
<a name="aws-glue-programming-etl-format-csv-reference"></a>

Vous pouvez utiliser ce qui suit `format_options` partout où les bibliothèques AWS Glue le spécifient `format="csv"` : 
+ `separator` – spécifie le caractère délimiteur. La valeur par défaut est une virgule, mais tout autre caractère peut être spécifié.
  + **Type :** texte, **Valeur par défaut :** `","`
+ `escaper` – spécifie le caractère à utiliser pour l'échappement. Cette option est utilisée uniquement lors de la lecture de fichiers CSV, pas l'écriture. Si cette option est activée, le caractère qui suit immédiatement est utilisé tel quel, sauf pour un petit ensemble d'échappements connus (`\n`, `\r`, `\t` et `\0`).
  + **Type :** texte, **Valeur par défaut :** aucune
+ `quoteChar` – spécifie le caractère à utiliser pour les guillemets. La valeur par défaut est les guillemets doubles. Définissez ce champ sur `-1` pour désactiver entièrement les guillemets.
  + **Type :** texte, **Valeur par défaut :** `'"'`
+ `multiLine` – spécifie si un même enregistrement peut couvrir plusieurs lignes. Cela peut se produire lorsqu’un champ contient un caractère de nouvelle ligne. Vous devez définir cette option sur `True` si aucun enregistrement ne s’étend sur plusieurs lignes. L'activation de `multiLine` peut réduire les performances, car elle nécessite un fractionnement plus prudent des fichiers lors de l'analyse.
  + **Type :** Booléen, **Valeur par défaut :** `false`
+ `withHeader` – spécifie spécifie s'il convient de traiter la première ligne comme un en-tête. Cette option peut être utilisée dans la classe `DynamicFrameReader`.
  + **Type :** Booléen, **Valeur par défaut :** `false`
+ `writeHeader` – spécifie s'il convient d'écrire l'en-tête dans la sortie. Cette option peut être utilisée dans la classe `DynamicFrameWriter`.
  + **Type :** Booléen, **Valeur par défaut :** `true`
+ `skipFirst` – spécifie s'il convient d'ignorer la première ligne de données.
  + **Type :** Booléen, **Valeur par défaut :** `false`
+ `optimizePerformance` –spécifie s'il faut utiliser le lecteur CSV SIMD avancé avec les formats de mémoire en colonnes basés sur Apache Arrow. Disponible uniquement dans les versions 3.0 et ultérieures d'AWS Glue.
  + **Type :** Booléen, **Valeur par défaut :** `false`
+ `strictCheckForQuoting`— Lors de l'écriture CSVs, Glue peut ajouter des guillemets aux valeurs qu'elle interprète comme des chaînes. Cela est fait pour éviter toute ambiguïté dans ce qui est écrit. Pour gagner du temps au moment de décider quoi écrire, Glue peut ajouter des guillemets dans certaines situations où ils ne sont pas nécessaires. L'activation d'une vérification stricte effectuera un calcul plus intensif et n'ajoutera de guillemets qu'en cas de nécessité absolue. Disponible uniquement dans les versions 3.0 et ultérieures d'AWS Glue.
  + **Type :** Booléen, **Valeur par défaut :** `false`

## Optimiser les performances de lecture avec un lecteur CSV SIMD vectorisé
<a name="aws-glue-programming-etl-format-simd-csv-reader"></a>

La version 3.0 d'AWS Glue ajoute un lecteur CSV optimisé qui peut considérablement accélérer les performances globales des tâches par rapport aux lecteurs CSV basés sur des lignes. 

 Le lecteur optimisé :
+ utilise les instructions SIMD du processeur pour lire sur le disque
+ ecrit immédiatement les enregistrements en mémoire dans un format en colonnes (Apache Arrow) 
+ divise les enregistrements en lots

Cette méthode permet de gagner du temps de traitement lorsque les enregistrements sont ultérieurement regroupés ou convertis en format en colonnes. Certains exemples concernent la modification de schémas ou la récupération de données par colonne. 

Pour utiliser le lecteur optimisé, définissez `"optimizePerformance"` sur `true` dans le `format_options` ou la propriété table.

```
glueContext.create_dynamic_frame.from_options(
    frame = datasource1,
    connection_type = "s3", 
    connection_options = {"paths": ["s3://s3path"]}, 
    format = "csv", 
    format_options={
        "optimizePerformance": True, 
        "separator": ","
        }, 
    transformation_ctx = "datasink2")
```

**Limitations du lecteur CSV vectorisé**  
Notez les limitations suivantes du lecteur CSV vectorisé :
+ Il ne prend pas en charge les options de formatage `multiLine` et `escaper`. Il utilise la valeur par défaut `escaper` du caractère guillemets doubles `'"'`. Lorsque ces options sont définies, AWS Glue revient automatiquement à l'utilisation du lecteur CSV basé sur les lignes.
+ Il ne prend pas en charge la création d'un DynamicFrame avec [ChoiceType](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-types.html#aws-glue-api-crawler-pyspark-extensions-types-awsglue-choicetype). 
+ Il ne prend pas en charge la création d'un DynamicFrame avec des [enregistrements d'erreur](https://docs.aws.amazon.com/glue/latest/dg/glue-etl-scala-apis-glue-dynamicframe-class.html#glue-etl-scala-apis-glue-dynamicframe-class-defs-errorsAsDynamicFrame).
+ Il ne prend pas en charge la lecture de fichiers CSV contenant des caractères multioctets tels que des caractères japonais ou chinois.

# Utilisation du format Parquet dans AWS Glue
<a name="aws-glue-programming-etl-format-parquet-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format de données Parquet, ce document présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue. 

AWS Supports à colle au format Parquet. Ce format est un format de données en colonnes, orienté vers la performance. Pour accéder à une présentation du format par l'autorité standard, consultez [Apache Parquet Documentation Overview](https://parquet.apache.org/docs/overview/) (Présentation de la documentation Apache Parquet).

Vous pouvez utiliser AWS Glue pour lire des fichiers Parquet depuis Amazon S3 et depuis des sources de streaming, ainsi que pour écrire des fichiers Parquet sur Amazon S3. Vous pouvez lire et écrire des archives `bzip` et `gzip` contenant des fichiers Parquet provenant de S3. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page.

Le tableau suivant indique les fonctionnalités courantes de AWS Glue compatibles avec l'option de format Parquet.


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Pris en charge | Pris en charge | Non pris en charge | Pris en charge\$1 | 

\$1 Supporté dans la version 1.0\$1 de AWS Glue

## Exemple : lecture de fichiers ou dossiers Parquet depuis S3
<a name="aws-glue-programming-etl-format-parquet-read"></a>

** Prérequis :** vous aurez besoin des chemins S3 (`s3path`) vers des fichiers ou dossiers Parquet que vous souhaitez lire. 

 **Configuration :** dans vos options de fonction, spécifiez `format="parquet"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier votre `s3path`. 

Vous pouvez configurer la manière dont le lecteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3).

 Vous pouvez configurer la manière dont le lecteur interprète les fichiers Parquet dans votre `format_options`. Pour plus d'informations, consultez [Parquet Configuration Reference](#aws-glue-programming-etl-format-parquet-reference) (Référence de configuration Parquet).

Le script AWS Glue ETL suivant montre le processus de lecture des fichiers ou dossiers Parquet depuis S3 : 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
# Example: Read Parquet from S3

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type = "s3", 
    connection_options = {"paths": ["s3://s3path/"]}, 
    format = "parquet"
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
dataFrame = spark.read.parquet("s3://s3path/")
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
// Example: Read Parquet from S3

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    
    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType="s3",
      format="parquet",
      options=JsonOptions("""{"paths": ["s3://s3path"]}""")
    ).getDynamicFrame()
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`org.apache.spark.sql.DataFrame`).

```
spark.read.parquet("s3://s3path/")
```

------

## Exemple : écriture de fichiers et dossiers Parquet dans S3
<a name="aws-glue-programming-etl-format-parquet-write"></a>

**Prérequis :** Vous aurez besoin d'un initialisé DataFrame (`dataFrame`) ou DynamicFrame (`dynamicFrame`). Vous aurez également besoin de votre chemin de sortie S3, `s3path`. 

 **Configuration :** dans vos options de fonction, spécifiez `format="parquet"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier `s3path`. 

Vous pouvez modifier davantage la manière dont le scripteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez configurer la manière dont votre opération écrit le contenu de vos fichiers dans `format_options`. Pour plus d'informations, consultez [Parquet Configuration Reference](#aws-glue-programming-etl-format-parquet-reference) (Référence de configuration Parquet).

Le script AWS Glue ETL suivant montre le processus d'écriture de fichiers et de dossiers Parquet dans S3. 

Nous fournissons un rédacteur de parquet personnalisé avec des optimisations de performances DynamicFrames, grâce à la clé de `useGlueParquetWriter` configuration. Pour déterminer si ce scripteur est adapté à votre charge de travail, consultez [Glue Parquet Writer](#aws-glue-programming-etl-format-glue-parquet-writer) (Scripteur Parquet Glue). 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [write\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options).

```
# Example: Write Parquet to S3
# Consider whether useGlueParquetWriter is right for your workflow.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="s3",
    format="parquet",
    connection_options={
        "path": "s3://s3path",
    },
    format_options={
        # "useGlueParquetWriter": True,
    },
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
df.write.parquet("s3://s3path/")
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat).

```
// Example: Write Parquet to S3
// Consider whether useGlueParquetWriter is right for your workflow.

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    
    glueContext.getSinkWithFormat(
        connectionType="s3",
        options=JsonOptions("""{"path": "s3://s3path"}"""),
        format="parquet"
    ).writeDynamicFrame(dynamicFrame)
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`org.apache.spark.sql.DataFrame`).

```
df.write.parquet("s3://s3path/")
```

------

## Référence de configuration Parquet
<a name="aws-glue-programming-etl-format-parquet-reference"></a>

Vous pouvez utiliser ce qui suit `format_options` partout où les bibliothèques AWS Glue le spécifient `format="parquet"` : 
+ `useGlueParquetWriter`— Spécifie l'utilisation d'un rédacteur Parquet personnalisé doté d'optimisations des performances pour DynamicFrame les flux de travail. Pour plus d'informations, consultez [Glue Parquet Writer](#aws-glue-programming-etl-format-glue-parquet-writer) (Scripteur Parquet Glue). 
  + **Type :** Booléen, **Valeur par défaut :**`false`
+ `compression` – spécifie le codec de compression utilisé. Les valeurs sont entièrement compatibles avec `org.apache.parquet.hadoop.metadata.CompressionCodecName`. 
  + **Type :** Texte énuméré, **Valeur par défaut :** `"snappy"`
  + Valeurs : `"uncompressed"`, `"snappy"`, `"gzip"`, et `"lzo"`
+ `blockSize` – spécifie la taille en octets d'un groupe de lignes mis en mémoire. Vous l'utilisez pour régler les performances. La taille doit être divisée exactement en un certain nombre de mégaoctets.
  + **Type :** Numérique, **Valeur par défaut :**`134217728`
  + La valeur par défaut est égale à 128 Mo.
+ `pageSize` – spécifie la taille d'une page en octets. Vous l'utilisez pour régler les performances. Une page est la plus petite unité qui doit être lue entièrement pour accéder à un enregistrement unique.
  + **Type :** Numérique, **Valeur par défaut :**`1048576`
  + La valeur par défaut est égale à 1 Mo.

**Note**  
De plus, toutes les options acceptées par le code SparkSQL sous-jacent peuvent être transmises à ce format via le paramètre map `connection_options`. Par exemple, vous pouvez définir une configuration Spark telle que [mergeSchema](https://spark.apache.org/docs/latest/sql-data-sources-parquet.html#schema-merging) pour le dispositif d'écriture AWS Glue Spark pour fusionner le schéma de tous les fichiers.

## Optimisez les performances d'écriture avec AWS Glue Parquet Writer
<a name="aws-glue-programming-etl-format-glue-parquet-writer"></a>

**Note**  
 Le rédacteur AWS Glue Parquet a toujours été accessible via le type de `glueparquet` format. Ce modèle d'accès n'est plus préconisé. Utilisez plutôt le type `parquet` avec `useGlueParquetWriter` activé. 

Le graveur AWS Glue Parquet présente des améliorations de performances qui permettent d'écrire plus rapidement les fichiers Parquet. Le scripteur traditionnel calcule un schéma avant d'écrire. Le format Parquet ne stocke pas le schéma de manière rapidement récupérable, ce qui peut prendre un certain temps. Avec le rédacteur AWS Glue Parquet, aucun schéma précalculé n'est requis. Au fur et à mesure que les données sont introduites, le scripteur calcule et modifie le schéma de manière dynamique.

Notez les limitations suivantes lorsque vous spécifiez `useGlueParquetWriter` :
+ Le dispositif d'écriture prend uniquement en charge l'évolution du schéma, comme l'ajout ou la suppression de colonnes, mais pas la modification des types de colonnes, par exemple avec `ResolveChoice`.
+ Le rédacteur ne prend pas en charge l'écriture vide DataFrames, par exemple pour écrire un fichier contenant uniquement des schémas. Lors de l'intégration au catalogue de données AWS Glue via un paramètre`enableUpdateCatalog=True`, toute tentative d'écriture d'un fichier vide ne DataFrame mettra pas à jour le catalogue de données. Cela entraînera la création d’une table sans schéma dans le catalogue de données.

Si votre transformation ne nécessite pas ces limitations, l'activation du graveur AWS Glue Parquet devrait améliorer les performances.

# Utilisation du format XML dans AWS Glue
<a name="aws-glue-programming-etl-format-xml-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format de données XML, ce document présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue. 

AWS Glue prend en charge l'utilisation du format XML. Ce format représente des structures de données hautement configurables et définies de manière rigide qui ne sont pas basées sur des lignes ou des colonnes. Le XML est hautement standardisé. Pour accéder à une présentation du format par l'autorité standard, consultez [XML Essentials](https://www.w3.org/standards/xml/core) (Essentiels XML). 

Vous pouvez utiliser AWS Glue pour lire des fichiers XML depuis Amazon S3, ainsi que `bzip` des `gzip` archives contenant des fichiers XML. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page. 

Le tableau suivant indique les fonctionnalités courantes de AWS Glue compatibles avec l'option de format XML.


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Pris en charge | 

## Exemple : lecture de XML depuis S3
<a name="aws-glue-programming-etl-format-xml-read"></a>

 Le lecteur XML prend un nom de balise XML. Il examine les éléments comportant cette balise dans son entrée pour en déduire un schéma et remplit un DynamicFrame avec les valeurs correspondantes. La fonctionnalité AWS Glue XML se comporte de la même manière que la [source de données XML pour Apache Spark](https://github.com/databricks/spark-xml). Vous pourriez être en mesure de mieux comprendre le comportement de base en comparant ce lecteur à la documentation de ce projet. 

**Prérequis :**Vous aurez besoin des chemins S3 (`s3path`) vers les fichiers ou dossiers XML que vous souhaitez lire, ainsi qu'à certaines informations concernant votre fichier XML. Vous aurez également besoin de la balise pour l'élément XML que vous souhaitez lire, `xmlTag`. 

 **Configuration :** dans vos options de fonction, spécifiez `format="xml"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier `s3path`. Vous pouvez configurer plus en détail la manière dont le lecteur interagit avec S3 dans le `connection_options`. Pour plus de détails, voir Types de connexion et options pour l'ETL dans AWS Glue :[Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Dans vos `format_options`, utilisez la clé `rowTag` pour spécifier `xmlTag`. Vous pouvez configurer plus en détail la façon dont le lecteur interprète les fichiers XML dans votre `format_options`. Pour plus d'informations, consultez .[XML Configuration Reference](#aws-glue-programming-etl-format-xml-reference) (Référence de configuration XML).

Le script AWS Glue ETL suvant montre le processus de lecture de fichiers ou dossiers XML à partir de S3. 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
# Example: Read XML from S3
# Set the rowTag option to configure the reader.

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://s3path"]},
    format="xml",
    format_options={"rowTag": "xmlTag"},
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
dataFrame = spark.read\
    .format("xml")\
    .option("rowTag", "xmlTag")\
    .load("s3://s3path")
```

------
#### [ Scala ]

Pour cet exemple, utilisez l'opération [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
// Example: Read XML from S3
// Set the rowTag option to configure the reader.

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.GlueContext
import org.apache.spark.sql.SparkSession

val glueContext = new GlueContext(SparkContext.getOrCreate())
val sparkSession: SparkSession = glueContext.getSparkSession

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val dynamicFrame = glueContext.getSourceWithFormat(
      formatOptions=JsonOptions("""{"rowTag": "xmlTag"}"""), 
      connectionType="s3", 
      format="xml", 
      options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""")
    ).getDynamicFrame()
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`org.apache.spark.sql.DataFrame`).

```
val dataFrame = spark.read
  .option("rowTag", "xmlTag")
  .format("xml")
  .load("s3://s3path“)
```

------

## Référence de configurations XML
<a name="aws-glue-programming-etl-format-xml-reference"></a>

Vous pouvez utiliser ce qui suit `format_options` partout où les bibliothèques AWS Glue le spécifient `format="xml"` :
+ `rowTag` – spécifie la balise XML du fichier à traiter comme ligne. Les balises de ligne ne se ferment pas automatiquement.
  + **Type :** Texte, **Obligatoire**
+ `encoding` – spécifie le codage de caractère. Il peut s'agir du nom ou de l'alias d'un[Charset](https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html)pris en charge par notre environnement d'exécution. Nous ne donnons pas de garanties spécifiques concernant la prise en charge de l'encodage, mais les principaux codages devraient fonctionner. 
  + **Type :** texte, **Valeur par défaut :** `"UTF-8"`
+ `excludeAttribute` –  spécifie si vous souhaitez ou pas exclure les attributs dans les éléments.
  + **Type :** Booléen, **Valeur par défaut :** `false`
+ `treatEmptyValuesAsNulls` –  pécifie s'il convient de traiter un espace blanc comme valeur nulle.
  + **Type :** Booléen, **Valeur par défaut :** `false`
+ `attributePrefix` – Un préfixe des attributs pour les différencier des éléments. Ce préfixe est utilisé pour les noms de champs.
  + **Type :** texte, **Valeur par défaut :** `"_"`
+ `valueTag` –  La balise utilisée pour une valeur lorsqu'il y a des attributs de l'élément qui n'ont pas d'enfant.
  + **Type :** texte, **Valeur par défaut :** `"_VALUE"`
+ `ignoreSurroundingSpaces` – spécifie si les espaces blancs qui entourent les valeurs doivent être ignorés.
  + **Type :** Booléen, **Valeur par défaut :** `false`
+ `withSchema` – Contient le schéma attendu, dans les cas où vous souhaitez remplacer le schéma déduit. Si vous n'utilisez pas cette option, AWS Glue déduit le schéma des données XML.
  + **Type :**Texte, **Par défaut:** Non applicable
  + La valeur doit être un objet JSON qui représente un `StructType`.

## Spécifier manuellement le schéma XML
<a name="aws-glue-programming-etl-format-xml-withschema"></a>

**Exemple de schéma XML manuel**

Il s'agit d'un exemple d'utilisation de l'option format `withSchema` pour spécifier le schéma des données XML.

```
from awsglue.gluetypes import *

schema = StructType([ 
  Field("id", IntegerType()),
  Field("name", StringType()),
  Field("nested", StructType([
    Field("x", IntegerType()),
    Field("y", StringType()),
    Field("z", ChoiceType([IntegerType(), StringType()]))
  ]))
])

datasource0 = create_dynamic_frame_from_options(
    connection_type, 
    connection_options={"paths": ["s3://xml_bucket/someprefix"]},
    format="xml", 
    format_options={"withSchema": json.dumps(schema.jsonValue())},
    transformation_ctx = ""
)
```

# Utilisation du format Avro dans Glue AWS
<a name="aws-glue-programming-etl-format-avro-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format de données Avro, ce document présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue.

AWS Glue supporte l'utilisation du format Avro. Ce format est un format de données en colonnes et orienté vers la performance. Pour accéder à une présentation du format par l'autorité standard, consultez [ documentation Apache Avro 1.8.2 ](https://avro.apache.org/docs/1.8.2/).

Vous pouvez utiliser AWS Glue pour lire des fichiers Avro depuis Amazon S3 et depuis des sources de streaming, ainsi que pour écrire des fichiers Avro sur Amazon S3. Vous pouvez lire et écrire `bzip2` et `gzip`des archives contenant des fichiers Avro provenant de S3. De plus, vous pouvez écrire des archives `deflate`, `snappy` et `xz` contenant des fichiers Avro. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page. 

Le tableau suivant indique quelles opérations AWS Glue courantes prennent en charge l'option de format Avro.


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Pris en charge | Pris en charge\$1 | Non pris en charge | Pris en charge | 

\$1 Pris en charge avec des restrictions. Pour de plus amples informations, veuillez consulter [Notes et restrictions pour les sources en streaming Avro](add-job-streaming.md#streaming-avro-notes).

## Exemple : lecture de fichiers Avro ou de dossiers de S3
<a name="aws-glue-programming-etl-format-avro-read"></a>

**Prérequis :** vous aurez besoin des chemins S3 (`s3path`) vers des fichiers ou dossiers Avro que vous souhaitez lire. 

**Configuration :** dans vos options de fonction, spécifiez `format="avro"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier `s3path`. Vous pouvez configurer la manière dont le lecteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Options de format de données pour les entrées et sorties ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez configurer la manière dont le lecteur interprète les fichiers Avro dans votre `format_options`. Pour plus d'informations, consultez .[Référence de configuration Avro](#aws-glue-programming-etl-format-avro-reference).

Le script AWS Glue ETL suivant montre le processus de lecture de fichiers ou de dossiers Avro depuis S3 : 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://s3path"]},
    format="avro"
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez l'opération [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.GlueContext
import org.apache.spark.sql.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType="s3",
      format="avro",
      options=JsonOptions("""{"paths": ["s3://s3path"]}""")
    ).getDynamicFrame()
  }
```

------

## Exemple : écriture de fichiers et dossiers Avro dans S3
<a name="aws-glue-programming-etl-format-avro-write"></a>

**Prérequis :** Vous aurez besoin d'un initialisé DataFrame (`dataFrame`) ou DynamicFrame (`dynamicFrame`). Vous aurez également besoin de votre chemin de sortie S3, `s3path`. 

**Configuration :** dans vos options de fonction, spécifiez `format="avro"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier votre `s3path`. Vous pouvez modifier davantage la manière dont le scripteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Options de format de données pour les entrées et sorties ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez modifier la façon dont le rédacteur interprète les fichiers Avro dans votre `format_options`. Pour plus d'informations, consultez .[Référence de configuration Avro](#aws-glue-programming-etl-format-avro-reference). 

Le script AWS Glue ETL suivant montre le processus d'écriture de fichiers ou de dossiers Avro dans S3.

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [write\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options).

```
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="s3",
    format="avro",
    connection_options={
        "path": "s3://s3path"
    }
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    glueContext.getSinkWithFormat(
      connectionType="s3",
      options=JsonOptions("""{"path": "s3://s3path"}"""),
      format="avro"
    ).writeDynamicFrame(dynamicFrame)
  }
}
```

------

## Référence de configurations Avro
<a name="aws-glue-programming-etl-format-avro-reference"></a>

Vous pouvez utiliser les `format_options` valeurs suivantes partout où les bibliothèques AWS Glue le spécifient `format="avro"` :
+ `version`— Spécifie la version du reader/writer format Apache Avro à prendre en charge. La valeur par défaut est 1.7. Vous pouvez spécifier `format_options={"version": “1.8”}` pour activer la lecture et l'écriture d'un type logique Avro. Pour plus d'informations, consultez les [spécifications Apache Avro 1.7.7](https://avro.apache.org/docs/1.7.7/spec.html) et les [spécifications Apache Avro 1.8.2](https://avro.apache.org/docs/1.8.2/spec.html).

  Le connecteur Apache Avro 1.8 prend en charge les conversions de type logique suivantes :

Pour le lecteur : ce tableau montre la conversion entre le type de données Avro (type logique et type primitif Avro) et le type de données AWS Glue `DynamicFrame` pour le lecteur Avro 1.7 et 1.8.


| Type de données Avro : Type logique | Type de données Avro : Type Avro primitif | GlueDynamicFrame Type de données :Avro Reader 1.7 | GlueDynamicFrame Type de données : Avro Reader 1.8 | 
| --- | --- | --- | --- | 
| Décimal | octets | BINAIRE | Décimal | 
| Décimal | corrigé(e)(s) | BINAIRE | Décimal | 
| Date | int | INT | Date | 
| Temps (milliseconde) | int | INT | INT | 
| Temps (microseconde) | long | LONG | LONG | 
| Horodatage (milliseconde) | long | LONG | Horodatage | 
| Horodatage (microseconde) | long | LONG | LONG | 
| Durée (pas un type logique) | corrigé(e)(s) sur 12 | BINAIRE | BINAIRE | 

Pour le dispositif d'écriture : ce tableau affiche la conversion entre le type de données AWS Glue `DynamicFrame` et le type de données Avro pour le dispositif d'écriture Avro 1.7 et 1.8.


| Type de données AWS Glue `DynamicFrame` | Type de données Avro :Avro Writer 1.7 | Type de données Avro :Avro Writer 1.8 | 
| --- | --- | --- | 
| Décimal | String | decimal | 
| Date | String | date | 
| Horodatage | String | timestamp-micros | 

## Assistance Avro Spark DataFrame
<a name="aws-glueprogramming-etl-format-avro-dataframe-support"></a>

Pour utiliser Avro depuis l' DataFrame API Spark, vous devez installer le plugin Spark Avro pour la version de Spark correspondante. La version de Spark disponible dans votre tâche est déterminée par votre version de AWS Glue. Pour plus d'informations sur les versions Spark, consultez [AWS Glue versions](release-notes.md). Ce plugin est maintenu par Apache, nous ne donnons pas de garanties spécifiques de support.

Dans AWS Glue 2.0, utilisez la version 2.4.3 du plugin Spark Avro. Vous pouvez trouver ce fichier JAR sur Maven Central, voir[org.apache.spark:spark-avro\$12.12:2.4.3](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

Dans AWS Glue 3.0, utilisez la version 3.1.1 du plugin Spark Avro. Vous pouvez trouver ce fichier JAR sur Maven Central, voir[org.apache.spark : spark-avro\$12.12:3.1.1](https://search.maven.org/artifact/org.apache.spark/spark-avro_2.12/3.1.1/jar).

Pour inclure des éléments supplémentaires JARs dans une tâche AWS Glue ETL, utilisez le paramètre `--extra-jars` job. Pour de plus amples informations sur la définition des paramètres de la tâche, consultez [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md). Vous pouvez également configurer ce paramètre dans AWS Management Console.

# Utilisation du format GrokLog dans Glue AWS
<a name="aws-glue-programming-etl-format-grokLog-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées dans un format de texte brut peu structuré, ce document présente les fonctionnalités disponibles pour utiliser vos données dans les modèles AWS Glue through Grok.

AWS Supports à colle utilisant des motifs Grok. Les modèles Grok sont similaires aux groupes de capture d'expressions régulières. Ils reconnaissent les modèles de séquences de caractères dans un fichier texte brut et leur donnent un type et un objectif. Dans AWS Glue, leur objectif principal est de lire les journaux. Pour une introduction au Grok par les auteurs, voir[Référence Logstash : plug-in de filtre Grok](https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html).


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Ne s'applique pas | Pris en charge | Pris en charge | Non pris en charge | 

## Référence de configuration grokLog
<a name="aws-glue-programming-etl-format-groklog-reference"></a>

Vous pouvez utiliser les valeurs `format_options` suivantes avec `format="grokLog"` :
+ `logFormat` — spécifie le modèle Grok correspondant au format du journal.
+ `customPatterns` — spécifie les modèles Grok supplémentaires utilisés ici.
+ `MISSING` — spécifie le signal à utiliser lors de l'identification des valeurs manquantes. La valeur par défaut est `'-'`.
+ `LineCount` — spécifie le nombre de lignes de chaque enregistrement de journal. La valeur par défaut est `'1'`, et actuellement seuls les enregistrements d'une ligne sont pris en charge.
+ `StrictMode` — valeur booléenne indiquant si le mode strict est activé. En mode strict, le lecteur n'exécute pas de conversion ou récupération de type automatique. La valeur par défaut est `"false"`.

# Utilisation du format Ion dans AWS Glue
<a name="aws-glue-programming-etl-format-ion-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format de données Ion, ce document présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue.

AWS Glue supporte l'utilisation du format Ion. Ce format représente des structures de données (qui ne sont pas basées sur des lignes ou des colonnes) dans des représentations binaires et en texte brut interchangeables. Pour accéder à une présentation du format par les auteurs, consultez [Amazon Ion](https://amzn.github.io/ion-docs/). (Pour plus d'informations, consultez la [spécification Amazon Ion](https://amzn.github.io/ion-docs/spec.html).)

Vous pouvez utiliser AWS Glue pour lire les fichiers Ion depuis Amazon S3. Vous pouvez lire`bzip` `gzip` et des archives contenant des fichiers lon provenant de S3. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page.

Le tableau suivant indique quelles opérations AWS Glue courantes prennent en charge l'option de format Ion.


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Non pris en charge | Non pris en charge | Pris en charge | Non pris en charge | 

## Exemple : lecture de fichiers ou de dossiers lon de S3
<a name="aws-glue-programming-etl-format-ion-read"></a>

** Prérequis :** vous aurez besoin des chemins S3 (`s3path`) vers des fichiers ou dossiers lon que vous souhaitez lire. 

**Configuration :** dans vos options de fonction, spécifiez `format="json"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier votre `s3path`. Vous pouvez configurer la manière dont le lecteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Types de connexion et options pour l'ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). 

Le script AWS Glue ETL suivant montre le processus de lecture de fichiers ou de dossiers Ion depuis S3 :

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
# Example: Read ION from S3

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://s3path"]},
    format="ion"
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez l'opération [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
// Example: Read ION from S3

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.GlueContext
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType="s3",
      format="ion",
      options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""")
    ).getDynamicFrame()
  }
}
```

------

## Référence de configurations lon
<a name="aws-glue-programming-etl-format-ion-reference"></a>

Il n'y a aucune valeur `format_options` pour `format="ion"`.

# Utilisation du format JSON dans AWS Glue
<a name="aws-glue-programming-etl-format-json-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format JSON, ce document vous présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue.

AWS Glue prend en charge l'utilisation du format JSON. Ce format représente des structures de données avec une forme uniforme mais un contenu flexible qui ne sont pas basés sur des lignes ou des colonnes. Le JSON est défini par des normes parallelles émises par plusieurs autorités, dont l’ECMA-404. Pour accéder à une présentation du format par une source fréquemment référencée, consultez [Introducing JSON](https://www.json.org/) (Présentation de JSON).

Vous pouvez utiliser AWS Glue pour lire des fichiers JSON depuis Amazon S3, ainsi que `bzip` des fichiers JSON `gzip` compressés. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page. 


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Pris en charge | Pris en charge | Pris en charge | Pris en charge | 

## Exemple : lecture de fichiers ou de dossiers JSON de S3
<a name="aws-glue-programming-etl-format-json-read"></a>

**Prérequis :** vous aurez besoin des chemins S3 (`s3path`) vers des fichiers ou dossiers JSON que vous souhaitez lire. 

**Configuration :** dans vos options de fonction, spécifiez `format="json"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier votre `s3path`. Vous pouvez également modifier la façon dont votre opération de lecture traversera s3 dans les options de connexion, consultez [Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) pour plus d’informations. Vous pouvez configurer la manière dont le lecteur interprète les fichiers JSON dans votre `format_options`. Pour plus d'informations, consultez [JSON Configuration Reference](#aws-glue-programming-etl-format-json-reference) (Référence de configuration JSON). 

 Le script AWS Glue ETL suivant montre le processus de lecture de fichiers ou de dossiers JSON depuis S3 : 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
# Example: Read JSON from S3
# For show, we handle a nested JSON file that we can limit with the JsonPath parameter
# For show, we also handle a JSON where a single entry spans multiple lines
# Consider whether optimizePerformance is right for your workflow.

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://s3path"]},
    format="json",
    format_options={
        "jsonPath": "$.id",
        "multiline": True,
        # "optimizePerformance": True, -> not compatible with jsonPath, multiline
    }
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
dataFrame = spark.read\
    .option("multiline", "true")\
    .json("s3://s3path")
```

------
#### [ Scala ]

Pour cet exemple, utilisez l'opération [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
// Example: Read JSON from S3
// For show, we handle a nested JSON file that we can limit with the JsonPath parameter
// For show, we also handle a JSON where a single entry spans multiple lines
// Consider whether optimizePerformance is right for your workflow.

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    val dynamicFrame = glueContext.getSourceWithFormat(
      formatOptions=JsonOptions("""{"jsonPath": "$.id", "multiline": true, "optimizePerformance":false}"""),
      connectionType="s3",
      format="json",
      options=JsonOptions("""{"paths": ["s3://s3path"], "recurse": true}""")
    ).getDynamicFrame()
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
val dataFrame = spark.read
    .option("multiline", "true")
    .json("s3://s3path")
```

------

## Exemple : écriture de fichiers et dossiers JSON dans S3
<a name="aws-glue-programming-etl-format-json-write"></a>

**Prérequis :** Vous aurez besoin d'un initialisé DataFrame (`dataFrame`) ou DynamicFrame (`dynamicFrame`). Vous aurez également besoin de votre chemin de sortie S3, `s3path`. 

**Configuration :** dans vos options de fonction, spécifiez `format="json"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier `s3path`. Vous pouvez modifier davantage la manière dont le scripteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Options de format de données pour les entrées et sorties ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). Vous pouvez configurer la manière dont le lecteur interprète les fichiers JSON dans votre `format_options`. Pour plus d'informations, consultez [JSON Configuration Reference](#aws-glue-programming-etl-format-json-reference) (Référence de configuration JSON). 

Le script AWS Glue ETL suivant montre le processus d'écriture de fichiers ou de dossiers JSON à partir de S3 :

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [write\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options).

```
# Example: Write JSON to S3

from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="s3",
    connection_options={"path": "s3://s3path"},
    format="json"
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
df.write.json("s3://s3path/")
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat).

```
// Example: Write JSON to S3

import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    glueContext.getSinkWithFormat(
        connectionType="s3",
        options=JsonOptions("""{"path": "s3://s3path"}"""),
        format="json"
    ).writeDynamicFrame(dynamicFrame)
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
df.write.json("s3://s3path")
```

------

## Référence de configurations Json
<a name="aws-glue-programming-etl-format-json-reference"></a>

Vous pouvez utiliser les valeurs `format_options` suivantes avec `format="json"` :
+ `jsonPath`— [JsonPath](https://github.com/json-path/JsonPath)Expression qui identifie un objet à lire dans des enregistrements. Cette expression est particulièrement utile lorsqu’un fichier contient des enregistrements imbriqués à l’intérieur d’un tableau externe. Par exemple, l' JsonPath expression suivante cible le `id` champ d'un objet JSON.

  ```
  format="json", format_options={"jsonPath": "$.id"}
  ```
+ `multiline` — valeur booléenne qui spécifie si un même enregistrement peut couvrir plusieurs lignes. Cela peut se produire lorsqu’un champ contient un caractère de nouvelle ligne. Vous devez définir cette option sur `"true"` si aucun enregistrement ne s’étend sur plusieurs lignes. La valeur par défaut est `"false"`, qui permet un fractionnement en fichiers plus agressif pendant l’analyse.
+ `optimizePerformance` — valeur booléenne qui spécifie s’il faut utiliser le lecteur CSV SIMD avancé avec les formats de mémoire en colonnes basés sur Apache Arrow. Disponible uniquement dans AWS Glue 3.0. Non compatible avec `multiline` ou `jsonPath`. Si vous fournissez l'une ou l'autre de ces options, AWS Glue sera obligée de revenir au lecteur standard.
+ `withSchema` — Une valeur String qui spécifie un schéma de table au format décrit dans [Spécifier manuellement le schéma XML](aws-glue-programming-etl-format-xml-home.md#aws-glue-programming-etl-format-xml-withschema). Utilisé uniquement avec `optimizePerformance` lors de la lecture à partir de connexions hors catalogue.

## Utilisation d’un lecteur CSV SIMD vectorisé avec le format en colonnes Apache Arrow
<a name="aws-glue-programming-etl-format-simd-json-reader"></a>

AWS Glue La version 3.0 ajoute un lecteur vectorisé pour les données JSON. Il fonctionne deux fois plus vite dans certaines conditions que le lecteur standard. Ce lecteur est livré avec certaines limitations dont les utilisateurs doivent être conscients avant utilisation, décrites dans cette section.

Pour utiliser le lecteur optimisé, définissez `"optimizePerformance"` sur True dans le `format_options` ou la propriété table. Vous devrez également fournir `withSchema` sauf si vous lisez le catalogue. `withSchema` attend une entrée comme décrit dans le [Spécifier manuellement le schéma XML](aws-glue-programming-etl-format-xml-home.md#aws-glue-programming-etl-format-xml-withschema).

```
// Read from S3 data source        
glueContext.create_dynamic_frame.from_options(
    connection_type = "s3", 
    connection_options = {"paths": ["s3://s3path"]}, 
    format = "json", 
    format_options={
        "optimizePerformance": True,
        "withSchema": SchemaString
        })    
 
// Read from catalog table
glueContext.create_dynamic_frame.from_catalog(
    database = database, 
    table_name = table, 
    additional_options = {
    // The vectorized reader for JSON can read your schema from a catalog table property.
        "optimizePerformance": True,
        })
```

Pour plus d'informations sur la création d'un *SchemaString* dans la bibliothèque AWS Glue, consultez[PySpark types d'extensions](aws-glue-api-crawler-pyspark-extensions-types.md).

**Limitations du lecteur CSV vectorisé**  
Prenez en compte les limitations suivantes :
+ Les éléments JSON avec des objets imbriqués ou des valeurs de tableau ne sont pas pris en charge. S'il est fourni, AWS Glue retournera au lecteur standard.
+ Un schéma doit être fourni, soit à partir du catalogue, soit avec `withSchema`.
+ Non compatible avec `multiline` ou `jsonPath`. Si vous fournissez l'une ou l'autre de ces options, AWS Glue sera obligée de revenir au lecteur standard.
+ Le fait de fournir des enregistrements d’entrée qui ne correspondent pas au schéma d’entrée entraînera un dysfonctionnement du lecteur.
+ [Les enregistrements d’erreurs](https://docs.aws.amazon.com/glue/latest/dg/glue-etl-scala-apis-glue-dynamicframe-class.html#glue-etl-scala-apis-glue-dynamicframe-class-defs-errorsAsDynamicFrame) ne seront pas créés.
+ Les fichiers JSON contenant des caractères à plusieurs octets (tels que les caractères japonais ou chinois) ne sont pas pris en charge.

# Utilisation du format ORC dans Glue AWS
<a name="aws-glue-programming-etl-format-orc-home"></a>

AWS Glue récupère les données des sources et écrit les données sur des cibles stockées et transportées dans différents formats de données. Si vos données sont stockées ou transportées au format ORC, ce document présente les fonctionnalités disponibles pour utiliser vos données dans AWS Glue.

AWS Glue supporte l'utilisation du format ORC. Ce format est un format de données en colonnes, orienté vers la performance. Pour accéder à une présentation du format par l'autorité standard, consultez [Apache Orc](https://orc.apache.org/docs/).

Vous pouvez utiliser AWS Glue pour lire des fichiers ORC depuis Amazon S3 et depuis des sources de streaming, ainsi que pour écrire des fichiers ORC sur Amazon S3. Vous pouvez lire et écrire des archives `bzip` et `gzip` contenant des fichiers CSV provenant de S3. Vous configurez le comportement de compression sur [Paramètres de connexion S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3) plutôt que dans la configuration décrite sur cette page.

Le tableau suivant indique quelles opérations AWS Glue courantes prennent en charge l'option de format ORC.


| Lecture | Écrire | Lecture en streaming | Groupement des petits fichiers | Signets de tâche | 
| --- | --- | --- | --- | --- | 
| Pris en charge | Pris en charge | Pris en charge | Non pris en charge | Pris en charge\$1 | 

\$1 Supporté dans la version 1.0\$1 de AWS Glue

## Exemple : lecture de fichiers ou de dossiers ORC à partir de S3
<a name="aws-glue-programming-etl-format-orc-read"></a>

** Prérequis :** vous aurez besoin des chemins S3 (`s3path`) vers des fichiers ou dossiers ORC que vous souhaitez lire. 

**Configuration :** dans vos options de fonction, spécifiez `format="orc"`. Dans vos `connection_options`, utilisez la clé `paths` pour spécifier votre `s3path`. Vous pouvez configurer la manière dont le lecteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Types de connexion et options pour l'ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3).

 Le script AWS Glue ETL suivant montre le processus de lecture de fichiers ou de dossiers ORC depuis S3 : 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create_dynamic_frame_from_options).

```
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

dynamicFrame = glueContext.create_dynamic_frame.from_options(
    connection_type="s3",
    connection_options={"paths": ["s3://s3path"]},
    format="orc"
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
dataFrame = spark.read\
    .orc("s3://s3path")
```

------
#### [ Scala ]

Pour cet exemple, utilisez l'opération [getSourceWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSourceWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.GlueContext
import org.apache.spark.sql.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    val dynamicFrame = glueContext.getSourceWithFormat(
      connectionType="s3",
      format="orc",
      options=JsonOptions("""{"paths": ["s3://s3path"]}""")
    ).getDynamicFrame()
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
val dataFrame = spark.read
    .orc("s3://s3path")
```

------

## Exemple : écriture de fichiers et dossiers ORC dans S3
<a name="aws-glue-programming-etl-format-orc-write"></a>

**Prérequis :** Vous aurez besoin d'un initialisé DataFrame (`dataFrame`) ou DynamicFrame (`dynamicFrame`). Vous aurez également besoin de votre chemin de sortie S3, `s3path`. 

**Configuration :** dans vos options de fonction, spécifiez `format="orc"`. Dans vos options de connexion, utilisez`paths`touche à spécifier`s3path`. Vous pouvez modifier davantage la manière dont le scripteur interagit avec S3 dans les `connection_options`. Pour plus de détails, voir Options de format de données pour les entrées et sorties ETL dans AWS Glue :[Référence des options de connexion Amazon S3](aws-glue-programming-etl-connect-s3-home.md#aws-glue-programming-etl-connect-s3). L'exemple de code suivant montre le processus : 

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [write\$1dynamic\$1frame.from\$1options](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_dynamic_frame_from_options).

```
from pyspark.context import SparkContext
from awsglue.context import GlueContext

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)

glueContext.write_dynamic_frame.from_options(
    frame=dynamicFrame,
    connection_type="s3",
    format="orc",
    connection_options={
        "path": "s3://s3path"
    }
)
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
df.write.orc("s3://s3path/")
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getSinkWithFormat](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat).

```
import com.amazonaws.services.glue.util.JsonOptions
import com.amazonaws.services.glue.{DynamicFrame, GlueContext}
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)

    glueContext.getSinkWithFormat(
      connectionType="s3",
      options=JsonOptions("""{"path": "s3://s3path"}"""),
      format="orc"
    ).writeDynamicFrame(dynamicFrame)
  }
}
```

Vous pouvez également l'utiliser DataFrames dans un script (`pyspark.sql.DataFrame`).

```
df.write.orc("s3://s3path/")
```

------

## Référence de configuration ORC
<a name="aws-glue-programming-etl-format-orc-reference"></a>

Il n'y a aucune valeur `format_options` pour `format="orc"`. Cependant, les options acceptées par le code SparkSQL sous-jacent peuvent lui être transmises au moyen du paramètre de carte `connection_options`. 

# Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL
<a name="aws-glue-programming-etl-datalake-native-frameworks"></a>

Les frameworks de lacs de données open source simplifient le traitement incrémentiel des données pour les fichiers que vous stockez dans des lacs de données basés sur Amazon S3. AWS Glue La version 3.0 et les versions ultérieures prennent en charge les frameworks de lacs de données open source suivants :
+ Apache Hudi
+ Linux Foundation Delta Lake
+ Apache Iceberg

Nous fournissons une prise en charge native de ces cadres afin de vous permettre de lire et écrire les données à stocker dans Amazon S3 de manière cohérente sur le plan transactionnel. Il n'est pas nécessaire d'installer un connecteur distinct ou d'effectuer des étapes de configuration supplémentaires pour utiliser ces cadres dans les tâches AWS Glue ETL.

Lorsque vous gérez des ensembles de données via le AWS Glue Data Catalog, vous pouvez utiliser AWS Glue des méthodes pour lire et écrire des tables de lacs de données avec Spark DataFrames. Vous pouvez également lire et écrire des données Amazon S3 à l'aide de l' DataFrame API Spark.

Dans cette vidéo, vous découvrirez les principes de base du fonctionnement d'Apache Hudi, d'Apache Iceberg et de Delta Lake. Vous découvrirez comment insérer, mettre à jour et supprimer des données dans votre lac de données et comment chacun de ces cadres fonctionne.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/fryfx0Zg7KA/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/fryfx0Zg7KA)


**Topics**
+ [

# Limitations
](aws-glue-programming-etl-datalake-native-frameworks-limitations.md)
+ [

# Utilisation du framework Hudi dans Glue AWS
](aws-glue-programming-etl-format-hudi.md)
+ [

# Utilisation du framework Delta Lake dans AWS Glue
](aws-glue-programming-etl-format-delta-lake.md)
+ [

# Utilisation du framework Iceberg dans Glue AWS
](aws-glue-programming-etl-format-iceberg.md)

# Limitations
<a name="aws-glue-programming-etl-datalake-native-frameworks-limitations"></a>

Tenez compte des limites suivantes avant d'utiliser des frameworks de lacs de données avec AWS Glue.
+ Les AWS Glue `GlueContext` méthodes suivantes DynamicFrame ne prennent pas en charge la lecture et l'écriture de tables du framework Data Lake. Utilisez plutôt les `GlueContext` méthodes pour DataFrame ou DataFrame l'API Spark.
  + `create_dynamic_frame.from_catalog`
  + `write_dynamic_frame.from_catalog`
  + `getDynamicFrame`
  + `writeDynamicFrame`
+ Les `GlueContext` méthodes suivantes DataFrame sont prises en charge par le contrôle des autorisations de Lake Formation :
  + `create_data_frame.from_catalog`
  + `write_data_frame.from_catalog`
  + `getDataFrame`
  + `writeDataFrame`
+ Le [regroupement de petits fichiers](grouping-input-files.md) n'est pas pris en charge.
+ Les [signets de tâche](monitor-continuations.md) ne sont pas pris en charge.
+ Apache Hudi 0.10.1 pour AWS Glue 3.0 ne prend pas en charge les tables Hudi Merge on Read (MoR).
+ `ALTER TABLE … RENAME TO`n'est pas disponible pour Apache Iceberg 0.13.1 pour 3.0. AWS Glue 

## Limitations des tables au format de lac de données gérées par les autorisations de Lake Formation
<a name="w2aac67c11c24c11c31c17b7"></a>

Les formats de lac de données sont intégrés à l' AWS Glue ETL via les autorisations Lake Formation. La création d'un DynamicFrame utilisateur n'`create_dynamic_frame`est pas prise en charge. Pour plus d’informations, consultez les exemples suivants :
+ [Exemple : lecture et écriture d'une table Iceberg avec contrôle des autorisations de Lake Formation](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-iceberg.html#aws-glue-programming-etl-format-iceberg-read-write-lake-formation-tables)
+ [Exemple : lecture et écriture d'une table Hudi avec contrôle des autorisations de Lake Formation](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-hudi.html#aws-glue-programming-etl-format-hudi-read-write-lake-formation-tables)
+ [Exemple : lecture et écriture d'une table Delta Lake avec contrôle des autorisations de Lake Formation](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-format-delta-lake.html#aws-glue-programming-etl-format-delta-lake-read-write-lake-formation-tables)

**Note**  
L'intégration avec les autorisations AWS Glue ETL via Lake Formation pour Apache Hudi, Apache Iceberg et Delta Lake n'est prise en charge que dans la AWS Glue version 4.0.

Apache Iceberg offre la meilleure intégration avec l' AWS Glue ETL via les autorisations Lake Formation. Il prend en charge presque toutes les opérations et inclut la prise en charge de SQL.

Hudi prend en charge la plupart des opérations de base à l'exception des opérations administratives. C'est parce que ces options sont généralement effectuées via l'écriture de dataframes et spécifiées via `additional_options`. Vous devez l'utiliser pour créer AWS Glue APIs DataFrames pour vos opérations car SparkSQL n'est pas supporté.

Delta Lake prend uniquement en charge la lecture, l'ajout et le remplacement de données de table. Delta Lake nécessite l'utilisation de ses propres bibliothèques pour pouvoir effectuer diverses tâches telles que les mises à jour.

Les fonctionnalités suivantes ne sont pas disponibles pour les tables Iceberg gérées par les autorisations de Lake Formation.
+ Compaction à l'aide AWS Glue de l'ETL
+ Support de Spark SQL via AWS Glue ETL

Les limites des tables Hudi gérées par les autorisations de Lake Formation sont les suivantes :
+ Suppression de fichiers orphelins

Les limites des tables Delta Lake gérées par les autorisations de Lake Formation sont les suivantes :
+ Toutes les fonctionnalités autres que l'insertion et la lecture à partir des tables de Delta Lake.

# Utilisation du framework Hudi dans Glue AWS
<a name="aws-glue-programming-etl-format-hudi"></a>

AWS Glue 3.0 et versions ultérieures prennent en charge le framework Apache Hudi pour les lacs de données. Hudi est un cadre de stockage de lac de données open source qui simplifie le traitement incrémentiel des données et le développement de pipelines de données. Cette rubrique décrit les fonctionnalités disponibles pour utiliser vos données dans AWS Glue lorsque vous transportez ou stockez vos données dans une table Hudi. Pour en savoir plus sur Hudi, consultez la [documentation officielle d'Apache Hudi](https://hudi.apache.org/docs/overview/). 

Vous pouvez utiliser AWS Glue pour effectuer des opérations de lecture et d'écriture sur des tables Hudi dans Amazon S3, ou travailler avec des tables Hudi à l'aide du catalogue de données AWS Glue. Des opérations supplémentaires, notamment l'insertion, la mise à jour et toutes les [opérations d'Apache Spark](https://hudi.apache.org/docs/quick-start-guide/), sont également prises en charge.

**Note**  
[L'implémentation d'Apache Hudi 0.15.0 dans AWS Glue 5.0 rétablit en interne le HUDI-7001.](https://github.com/apache/hudi/pull/9936) Elle ne présente pas la régression liée à la génération de clés complexes lorsque la clé d’enregistrement est constituée d’un seul champ. Toutefois, ce comportement est différent de celui d’OSS Apache Hudi 0.15.0.  
Apache Hudi 0.10.1 pour AWS Glue 3.0 ne prend pas en charge les tables Hudi Merge on Read (MoR).

Le tableau suivant répertorie la version Hudi incluse dans chaque version de AWS Glue.


****  

| AWS Version Glue | Version de Hudi prise en charge | 
| --- | --- | 
| 5.1 | 1.0.2 | 
| 5.0 | 0,15,0 | 
| 4.0 | 0.12.1 | 
| 3.0 | 0,1,1 | 

Pour en savoir plus sur les frameworks de lacs de données pris en charge par AWS Glue, consultez[Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL](aws-glue-programming-etl-datalake-native-frameworks.md).

## Activation de Hudi
<a name="aws-glue-programming-etl-format-hudi-enable"></a>

Pour activer Hudi for AWS Glue, effectuez les tâches suivantes :
+ Spécifiez `hudi` comme valeur pour le paramètre de tâche `--datalake-formats`. Pour de plus amples informations, veuillez consulter [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).
+ Créez une clé nommée `--conf` d'après votre tâche AWS Glue et définissez-la sur la valeur suivante. Vous pouvez également définir la configuration suivante à l'aide de `SparkConf` dans votre script. Ces paramètres permettent à Apache Spark de gérer correctement les tables Hudi.

  ```
  spark.serializer=org.apache.spark.serializer.KryoSerializer
  ```
+ La prise en charge des autorisations de Lake Formation pour Hudi est activée par défaut pour AWS Glue 4.0. Aucune configuration supplémentaire n'est nécessaire pour les tables Hudi enregistrées pour reading/writing To Lake Formation. Pour lire une table Hudi enregistrée, le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SELECT. Pour écrire dans une table Hudi enregistrée, le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SUPER. Pour en savoir plus sur la gestion des autorisations de Lake Formation, consultez la section [Octroi et révocation d'autorisations liées aux ressources du catalogue de données](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html).

**Utilisation d'une autre version de Hudi**

Pour utiliser une version de Hudi non prise en charge par AWS Glue, spécifiez vos propres fichiers JAR Hudi à l'aide du paramètre `--extra-jars` job. N'incluez pas `hudi` comme valeur du paramètre de tâche `--datalake-formats`. Si vous utilisez AWS Glue 5.0 ou une version ultérieure, vous devez définir le paramètre de `--user-jars-first true` tâche.

## Exemple : écrire une table Hudi sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-hudi-write"></a>

Cet exemple de script montre comment écrire une table Hudi sur Amazon S3 et enregistrer la table dans le catalogue de données AWS Glue. L'exemple utilise l'[outil de synchronisation Hive](https://hudi.apache.org/docs/syncing_metastore/) de Hudi pour enregistrer la table.

**Note**  
Dans cet exemple, vous devez définir le paramètre `--enable-glue-datacatalog` job afin d'utiliser le catalogue de données AWS Glue comme métastore Apache Spark Hive. Pour en savoir plus, veuillez consulter la section [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).

------
#### [ Python ]

```
# Example: Create a Hudi table from a DataFrame 
# and register the table to Glue Data Catalog

additional_options={
    "hoodie.table.name": "<your_table_name>",
    "hoodie.database.name": "<your_database_name>",
    "hoodie.datasource.write.storage.type": "COPY_ON_WRITE",
    "hoodie.datasource.write.operation": "upsert",
    "hoodie.datasource.write.recordkey.field": "<your_recordkey_field>",
    "hoodie.datasource.write.precombine.field": "<your_precombine_field>",
    "hoodie.datasource.write.partitionpath.field": "<your_partitionkey_field>",
    "hoodie.datasource.write.hive_style_partitioning": "true",
    "hoodie.datasource.hive_sync.enable": "true",
    "hoodie.datasource.hive_sync.database": "<your_database_name>",
    "hoodie.datasource.hive_sync.table": "<your_table_name>",
    "hoodie.datasource.hive_sync.partition_fields": "<your_partitionkey_field>",
    "hoodie.datasource.hive_sync.partition_extractor_class": "org.apache.hudi.hive.MultiPartKeysValueExtractor",
    "hoodie.datasource.hive_sync.use_jdbc": "false",
    "hoodie.datasource.hive_sync.mode": "hms",
    "path": "s3://<s3Path/>"
}

dataFrame.write.format("hudi") \
    .options(**additional_options) \
    .mode("overwrite") \
    .save()
```

------
#### [ Scala ]

```
// Example: Example: Create a Hudi table from a DataFrame
// and register the table to Glue Data Catalog

val additionalOptions = Map(
  "hoodie.table.name" -> "<your_table_name>",
  "hoodie.database.name" -> "<your_database_name>",
  "hoodie.datasource.write.storage.type" -> "COPY_ON_WRITE",
  "hoodie.datasource.write.operation" -> "upsert",
  "hoodie.datasource.write.recordkey.field" -> "<your_recordkey_field>",
  "hoodie.datasource.write.precombine.field" -> "<your_precombine_field>",
  "hoodie.datasource.write.partitionpath.field" -> "<your_partitionkey_field>",
  "hoodie.datasource.write.hive_style_partitioning" -> "true",
  "hoodie.datasource.hive_sync.enable" -> "true",
  "hoodie.datasource.hive_sync.database" -> "<your_database_name>",
  "hoodie.datasource.hive_sync.table" -> "<your_table_name>",
  "hoodie.datasource.hive_sync.partition_fields" -> "<your_partitionkey_field>",
  "hoodie.datasource.hive_sync.partition_extractor_class" -> "org.apache.hudi.hive.MultiPartKeysValueExtractor",
  "hoodie.datasource.hive_sync.use_jdbc" -> "false",
  "hoodie.datasource.hive_sync.mode" -> "hms",
  "path" -> "s3://<s3Path/>")

dataFrame.write.format("hudi")
  .options(additionalOptions)
  .mode("append")
  .save()
```

------

## Exemple : lecture d'une table Hudi depuis Amazon S3 à l'aide du catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-hudi-read"></a>

Cet exemple lit la table Hudi que vous avez créée dans [Exemple : écrire une table Hudi sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue](#aws-glue-programming-etl-format-hudi-write) depuis Amazon S3.

**Note**  
Dans cet exemple, vous devez définir le paramètre `--enable-glue-datacatalog` job afin d'utiliser le catalogue de données AWS Glue comme métastore Apache Spark Hive. Pour en savoir plus, veuillez consulter la section [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).

------
#### [ Python ]

Pour cet exemple, utilisez la méthode `GlueContext.create\$1data\$1frame.from\$1catalog()`.

```
# Example: Read a Hudi table from Glue Data Catalog

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

dataFrame = glueContext.create_data_frame.from_catalog(
    database = "<your_database_name>",
    table_name = "<your_table_name>"
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getCatalogSource](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSource).

```
// Example: Read a Hudi table from Glue Data Catalog

import com.amazonaws.services.glue.GlueContext
import org.apache.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    
    val dataFrame = glueContext.getCatalogSource(
      database = "<your_database_name>",
      tableName = "<your_table_name>"
    ).getDataFrame()
  }
}
```

------

## Exemple : mise à jour et insertion d'un `DataFrame` dans une table Hudi d'Amazon S3
<a name="aws-glue-programming-etl-format-hudi-update-insert"></a>

Cet exemple utilise le catalogue de données AWS Glue pour DataFrame insérer un dans la table Hudi que vous avez créée dans[Exemple : écrire une table Hudi sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue](#aws-glue-programming-etl-format-hudi-write).

**Note**  
Dans cet exemple, vous devez définir le paramètre `--enable-glue-datacatalog` job afin d'utiliser le catalogue de données AWS Glue comme métastore Apache Spark Hive. Pour en savoir plus, veuillez consulter la section [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).

------
#### [ Python ]

Pour cet exemple, utilisez la méthode `GlueContext.write\$1data\$1frame.from\$1catalog()`.

```
# Example: Upsert a Hudi table from Glue Data Catalog

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

glueContext.write_data_frame.from_catalog(
    frame = dataFrame,
    database = "<your_database_name>",
    table_name = "<your_table_name>",
    additional_options={
        "hoodie.table.name": "<your_table_name>",
        "hoodie.database.name": "<your_database_name>",
        "hoodie.datasource.write.storage.type": "COPY_ON_WRITE",
        "hoodie.datasource.write.operation": "upsert",
        "hoodie.datasource.write.recordkey.field": "<your_recordkey_field>",
        "hoodie.datasource.write.precombine.field": "<your_precombine_field>",
        "hoodie.datasource.write.partitionpath.field": "<your_partitionkey_field>",
        "hoodie.datasource.write.hive_style_partitioning": "true",
        "hoodie.datasource.hive_sync.enable": "true",
        "hoodie.datasource.hive_sync.database": "<your_database_name>",
        "hoodie.datasource.hive_sync.table": "<your_table_name>",
        "hoodie.datasource.hive_sync.partition_fields": "<your_partitionkey_field>",
        "hoodie.datasource.hive_sync.partition_extractor_class": "org.apache.hudi.hive.MultiPartKeysValueExtractor",
        "hoodie.datasource.hive_sync.use_jdbc": "false",
        "hoodie.datasource.hive_sync.mode": "hms"
    }
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getCatalogSink](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSink).

```
// Example: Upsert a Hudi table from Glue Data Catalog

import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.JsonOptions
import org.apacke.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    glueContext.getCatalogSink("<your_database_name>", "<your_table_name>",
      additionalOptions = JsonOptions(Map(
        "hoodie.table.name" -> "<your_table_name>",
        "hoodie.database.name" -> "<your_database_name>",
        "hoodie.datasource.write.storage.type" -> "COPY_ON_WRITE",
        "hoodie.datasource.write.operation" -> "upsert",
        "hoodie.datasource.write.recordkey.field" -> "<your_recordkey_field>",
        "hoodie.datasource.write.precombine.field" -> "<your_precombine_field>",
        "hoodie.datasource.write.partitionpath.field" -> "<your_partitionkey_field>",
        "hoodie.datasource.write.hive_style_partitioning" -> "true",
        "hoodie.datasource.hive_sync.enable" -> "true",
        "hoodie.datasource.hive_sync.database" -> "<your_database_name>",
        "hoodie.datasource.hive_sync.table" -> "<your_table_name>",
        "hoodie.datasource.hive_sync.partition_fields" -> "<your_partitionkey_field>",
        "hoodie.datasource.hive_sync.partition_extractor_class" -> "org.apache.hudi.hive.MultiPartKeysValueExtractor",
        "hoodie.datasource.hive_sync.use_jdbc" -> "false",
        "hoodie.datasource.hive_sync.mode" -> "hms"
      )))
      .writeDataFrame(dataFrame, glueContext)
  }
}
```

------

## Exemple : lecture d'une table Hudi depuis Amazon S3 à l'aide de Spark
<a name="aws-glue-programming-etl-format-hudi-read-spark"></a>

Cet exemple lit une table Hudi depuis Amazon S3 à l'aide de l' DataFrameAPI Spark.

------
#### [ Python ]

```
# Example: Read a Hudi table from S3 using a Spark DataFrame

dataFrame = spark.read.format("hudi").load("s3://<s3path/>")
```

------
#### [ Scala ]

```
// Example: Read a Hudi table from S3 using a Spark DataFrame

val dataFrame = spark.read.format("hudi").load("s3://<s3path/>")
```

------

## Exemple : écriture d'une table Hudi sur Amazon S3 à l'aide de Spark
<a name="aws-glue-programming-etl-format-hudi-write-spark"></a>

Cet exemple écrit une table Hudi sur Amazon S3 à l'aide de Spark.

------
#### [ Python ]

```
# Example: Write a Hudi table to S3 using a Spark DataFrame

dataFrame.write.format("hudi") \
    .options(**additional_options) \
    .mode("overwrite") \
    .save("s3://<s3Path/>)
```

------
#### [ Scala ]

```
// Example: Write a Hudi table to S3 using a Spark DataFrame

dataFrame.write.format("hudi")
  .options(additionalOptions)
  .mode("overwrite")
  .save("s3://<s3path/>")
```

------

## Exemple : lecture et écriture d'une table Hudi avec contrôle des autorisations de Lake Formation
<a name="aws-glue-programming-etl-format-hudi-read-write-lake-formation-tables"></a>

Cet exemple lit et écrit dans une table Hudi avec contrôle des autorisations de Lake Formation.

1. Créez une table Hudi et enregistrez-la dans Lake Formation.

   1. Pour activer le contrôle des autorisations de Lake Formation, vous devez d'abord enregistrer le chemin d'accès Amazon S3 de la table sur Lake Formation. Pour plus d’informations, consultez la rubrique [Enregistrement d’un emplacement Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html). Vous pouvez l'enregistrer depuis la console Lake Formation ou à l'aide de la AWS CLI :

      ```
      aws lakeformation register-resource --resource-arn arn:aws:s3:::<s3-bucket>/<s3-folder> --use-service-linked-role --region <REGION>
      ```

      Une fois que vous avez enregistré un emplacement Amazon S3, toute table AWS Glue pointant vers cet emplacement (ou l'un de ses emplacements enfants) renverra la valeur du `IsRegisteredWithLakeFormation` paramètre comme vraie lors de l'`GetTable`appel.

   1. Créez une table Hudi qui pointe vers le chemin Amazon S3 enregistré via l'API Spark dataframe :

      ```
      hudi_options = {
          'hoodie.table.name': table_name,
          'hoodie.database.name': database_name,
          'hoodie.datasource.write.storage.type': 'COPY_ON_WRITE',
          'hoodie.datasource.write.recordkey.field': 'product_id',
          'hoodie.datasource.write.table.name': table_name,
          'hoodie.datasource.write.operation': 'upsert',
          'hoodie.datasource.write.precombine.field': 'updated_at',
          'hoodie.datasource.write.hive_style_partitioning': 'true',
          'hoodie.upsert.shuffle.parallelism': 2,
          'hoodie.insert.shuffle.parallelism': 2,
          'path': <S3_TABLE_LOCATION>,
          'hoodie.datasource.hive_sync.enable': 'true',
          'hoodie.datasource.hive_sync.database': database_name,
          'hoodie.datasource.hive_sync.table': table_name,
          'hoodie.datasource.hive_sync.use_jdbc': 'false',
          'hoodie.datasource.hive_sync.mode': 'hms'
      }
      
      df_products.write.format("hudi")  \
          .options(**hudi_options)  \
          .mode("overwrite")  \
          .save()
      ```

1. Accordez à Lake Formation l'autorisation d'accéder au rôle IAM AWS Glue Job. Vous pouvez accorder des autorisations à partir de la console Lake Formation ou à l'aide de la AWS CLI. Pour plus d'informations, consultez la rubrique [Octroi d'autorisations de table via la console Lake Formation et la méthode de ressource nommée](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-table-permissions.html)

1.  Lisez la table Hudi enregistrée dans Lake Formation. Le code est le même que celui de la lecture d'une table Hudi non enregistrée. Notez que le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SELECT pour que la lecture réussisse.

   ```
    val dataFrame = glueContext.getCatalogSource(
         database = "<your_database_name>",
         tableName = "<your_table_name>"
       ).getDataFrame()
   ```

1. Écrire dans une table Hudi enregistrée dans Lake Formation. Le code est le même que celui de l'écriture dans une table Hudi non enregistrée. Notez que le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SUPER pour que l'écriture réussisse.

   ```
   glueContext.getCatalogSink("<your_database_name>", "<your_table_name>",
         additionalOptions = JsonOptions(Map(
           "hoodie.table.name" -> "<your_table_name>",
           "hoodie.database.name" -> "<your_database_name>",
           "hoodie.datasource.write.storage.type" -> "COPY_ON_WRITE",
           "hoodie.datasource.write.operation" -> "<write_operation>",
           "hoodie.datasource.write.recordkey.field" -> "<your_recordkey_field>",
           "hoodie.datasource.write.precombine.field" -> "<your_precombine_field>",
           "hoodie.datasource.write.partitionpath.field" -> "<your_partitionkey_field>",
           "hoodie.datasource.write.hive_style_partitioning" -> "true",
           "hoodie.datasource.hive_sync.enable" -> "true",
           "hoodie.datasource.hive_sync.database" -> "<your_database_name>",
           "hoodie.datasource.hive_sync.table" -> "<your_table_name>",
           "hoodie.datasource.hive_sync.partition_fields" -> "<your_partitionkey_field>",
           "hoodie.datasource.hive_sync.partition_extractor_class" -> "org.apache.hudi.hive.MultiPartKeysValueExtractor",
           "hoodie.datasource.hive_sync.use_jdbc" -> "false",
           "hoodie.datasource.hive_sync.mode" -> "hms"
         )))
         .writeDataFrame(dataFrame, glueContext)
   ```

# Utilisation du framework Delta Lake dans AWS Glue
<a name="aws-glue-programming-etl-format-delta-lake"></a>

AWS Glue 3.0 et versions ultérieures prennent en charge le framework Delta Lake de la Linux Foundation. Delta Lake est un cadre de stockage de lac de données open source qui vous permet d'effectuer des transactions ACID, d'adapter la gestion des métadonnées et d'unifier le streaming et le traitement des données par lots. Cette rubrique décrit les fonctionnalités disponibles pour utiliser vos données dans AWS Glue lorsque vous transportez ou stockez vos données dans une table Delta Lake. Pour en savoir plus sur Delta Lake, consultez la [documentation officielle de Delta Lake](https://docs.delta.io/latest/delta-intro.html). 

Vous pouvez utiliser AWS Glue pour effectuer des opérations de lecture et d'écriture sur des tables Delta Lake dans Amazon S3, ou travailler avec des tables Delta Lake à l'aide du catalogue de données AWS Glue. Des opérations supplémentaires telles que l'insertion, la mise à jour et la [lecture et l'écriture de tables par lots](https://docs.delta.io/0.7.0/api/python/index.html) sont également prises en charge. Lorsque vous utilisez des tables Delta Lake, vous avez également la possibilité d'avoir recours à des méthodes de la bibliothèque Python de Delta Lake, telles que `DeltaTable.forPath`. Pour plus d’informations sur la bibliothèque Python de Delta Lake, consultez la documentation Python de Delta Lake.

Le tableau suivant répertorie les versions de Delta Lake incluses dans chaque version de AWS Glue.


****  

| AWS Version Glue | Version de Delta Lake prise en charge | 
| --- | --- | 
| 5.1 | 3.3.2 | 
| 5.0 | 3.3.0 | 
| 4.0 | 2.1.0 | 
| 3.0 | 1.0.0 | 

Pour en savoir plus sur les frameworks de lacs de données pris en charge par AWS Glue, consultez[Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL](aws-glue-programming-etl-datalake-native-frameworks.md).

## Activer Delta Lake pour AWS Glue
<a name="aws-glue-programming-etl-format-delta-lake-enable"></a>

Pour activer Delta Lake for AWS Glue, effectuez les tâches suivantes :
+ Spécifiez `delta` comme valeur pour le paramètre de tâche `--datalake-formats`. Pour de plus amples informations, veuillez consulter [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).
+ Créez une clé nommée `--conf` d'après votre tâche AWS Glue et définissez-la sur la valeur suivante. Vous pouvez également définir la configuration suivante à l'aide de `SparkConf` dans votre script. Ces paramètres permettent à Apache Spark de gérer correctement les tables Delta Lake.

  ```
  spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog --conf spark.delta.logStore.class=org.apache.spark.sql.delta.storage.S3SingleDriverLogStore
  ```
+ La prise en charge des autorisations Lake Formation pour les tables Delta est activée par défaut pour AWS Glue 4.0. Aucune configuration supplémentaire n'est nécessaire reading/writing pour les tables Delta enregistrées par To Lake Formation. Pour lire une table Delta enregistrée, le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SELECT. Pour écrire dans une table Delta enregistrée, le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SUPER. Pour en savoir plus sur la gestion des autorisations de Lake Formation, consultez la section [Octroi et révocation d'autorisations liées aux ressources du catalogue de données](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html).

**Utilisation d'une autre version de Delta Lake**

Pour utiliser une version de Delta Lake non prise en charge par AWS Glue, spécifiez vos propres fichiers JAR Delta Lake à l'aide du paramètre `--extra-jars` job. N'incluez pas `delta` comme valeur du paramètre de tâche `--datalake-formats`. Si vous utilisez AWS Glue 5.0 ou une version ultérieure, vous devez définir le paramètre de `--user-jars-first true` tâche. Dans cette situation, pour utiliser la bibliothèque Python de Delta Lake, vous devez spécifier les fichiers JAR de la bibliothèque à l'aide du paramètre de tâche `--extra-py-files`. La bibliothèque Python est fournie dans les fichiers JAR de Delta Lake.

## Exemple : écrire une table Delta Lake sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-delta-lake-write"></a>

Le script AWS Glue ETL suivant montre comment écrire une table Delta Lake sur Amazon S3 et enregistrer la table dans le catalogue de données AWS Glue.

------
#### [ Python ]

```
# Example: Create a Delta Lake table from a DataFrame 
# and register the table to Glue Data Catalog

additional_options = {
    "path": "s3://<s3Path>"
}
dataFrame.write \
    .format("delta") \
    .options(**additional_options) \
    .mode("append") \
    .partitionBy("<your_partitionkey_field>") \
    .saveAsTable("<your_database_name>.<your_table_name>")
```

------
#### [ Scala ]

```
// Example: Example: Create a Delta Lake table from a DataFrame
// and register the table to Glue Data Catalog

val additional_options = Map(
  "path" -> "s3://<s3Path>"
)
dataFrame.write.format("delta")
  .options(additional_options)
  .mode("append")
  .partitionBy("<your_partitionkey_field>")
  .saveAsTable("<your_database_name>.<your_table_name>")
```

------

## Exemple : lecture d'une table Delta Lake depuis Amazon S3 à l'aide du catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-delta-lake-read"></a>

Le script AWS Glue ETL suivant lit la table Delta Lake que vous avez créée dans[Exemple : écrire une table Delta Lake sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue](#aws-glue-programming-etl-format-delta-lake-write).

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [create\$1data\$1frame.from\$1catalog](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-create-dataframe-from-catalog).

```
# Example: Read a Delta Lake table from Glue Data Catalog

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

df = glueContext.create_data_frame.from_catalog(
    database="<your_database_name>",
    table_name="<your_table_name>",
    additional_options=additional_options
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getCatalogSource](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSource).

```
// Example: Read a Delta Lake table from Glue Data Catalog

import com.amazonaws.services.glue.GlueContext
import org.apacke.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val df = glueContext.getCatalogSource("<your_database_name>", "<your_table_name>",
      additionalOptions = additionalOptions)
      .getDataFrame()
  }
}
```

------

## Exemple : insérez un `DataFrame` dans une table Delta Lake dans Amazon S3 à l'aide du catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-delta-lake-insert"></a>

Cet exemple insère des données dans la table Delta Lake que vous avez créée dans [Exemple : écrire une table Delta Lake sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue](#aws-glue-programming-etl-format-delta-lake-write).

**Note**  
Dans cet exemple, vous devez définir le paramètre `--enable-glue-datacatalog` job afin d'utiliser le catalogue de données AWS Glue comme métastore Apache Spark Hive. Pour en savoir plus, veuillez consulter la section [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).

------
#### [ Python ]

Pour cet exemple, utilisez la méthode [write\$1data\$1frame.from\$1catalog](aws-glue-api-crawler-pyspark-extensions-glue-context.md#aws-glue-api-crawler-pyspark-extensions-glue-context-write_data_frame_from_catalog).

```
# Example: Insert into a Delta Lake table in S3 using Glue Data Catalog

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

glueContext.write_data_frame.from_catalog(
    frame=dataFrame,
    database="<your_database_name>",
    table_name="<your_table_name>",
    additional_options=additional_options
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getCatalogSink](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSink).

```
// Example: Insert into a Delta Lake table in S3 using Glue Data Catalog

import com.amazonaws.services.glue.GlueContext
import org.apacke.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    glueContext.getCatalogSink("<your_database_name>", "<your_table_name>",
      additionalOptions = additionalOptions)
      .writeDataFrame(dataFrame, glueContext)
  }
}
```

------

## Exemple : lecture d'une table Delta Lake depuis Amazon S3 à l'aide de l'API Spark
<a name="aws-glue-programming-etl-format-delta_lake-read-spark"></a>

Cet exemple lit une table Delta Lake depuis Amazon S3 à l'aide de l'API Spark.

------
#### [ Python ]

```
# Example: Read a Delta Lake table from S3 using a Spark DataFrame

dataFrame = spark.read.format("delta").load("s3://<s3path/>")
```

------
#### [ Scala ]

```
// Example: Read a Delta Lake table from S3 using a Spark DataFrame

val dataFrame = spark.read.format("delta").load("s3://<s3path/>")
```

------

## Exemple : écriture d'une table Delta Lake sur Amazon S3 à l'aide de Spark
<a name="aws-glue-programming-etl-format-delta_lake-write-spark"></a>

Cet exemple écrit une table Delta Lake sur Amazon S3 à l'aide de Spark.

------
#### [ Python ]

```
# Example: Write a Delta Lake table to S3 using a Spark DataFrame

dataFrame.write.format("delta") \
    .options(**additional_options) \
    .mode("overwrite") \
    .partitionBy("<your_partitionkey_field>")
    .save("s3://<s3Path>")
```

------
#### [ Scala ]

```
// Example: Write a Delta Lake table to S3 using a Spark DataFrame

dataFrame.write.format("delta")
  .options(additionalOptions)
  .mode("overwrite")
  .partitionBy("<your_partitionkey_field>")
  .save("s3://<s3path/>")
```

------

## Exemple : lecture et écriture d'une table Delta Lake avec contrôle des autorisations de Lake Formation
<a name="aws-glue-programming-etl-format-delta-lake-read-write-lake-formation-tables"></a>

Cet exemple lit et écrit dans une table Delta Lake avec contrôle des autorisations de Lake Formation.

1. Créez une table Delta et enregistrez-la dans Lake Formation

   1. Pour activer le contrôle des autorisations de Lake Formation, vous devez d'abord enregistrer le chemin d'accès Amazon S3 de la table sur Lake Formation. Pour plus d’informations, consultez la rubrique [Enregistrement d’un emplacement Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html). Vous pouvez l'enregistrer depuis la console Lake Formation ou à l'aide de la AWS CLI :

      ```
      aws lakeformation register-resource --resource-arn arn:aws:s3:::<s3-bucket>/<s3-folder> --use-service-linked-role --region <REGION>
      ```

      Une fois que vous avez enregistré un emplacement Amazon S3, toute table AWS Glue pointant vers cet emplacement (ou l'un de ses emplacements enfants) renverra la valeur du `IsRegisteredWithLakeFormation` paramètre comme vraie lors de l'`GetTable`appel.

   1. Créez une table Delta qui pointe vers le chemin Amazon S3 enregistré via Spark :
**Note**  
Voici des exemples Python.

      ```
      dataFrame.write \
      	.format("delta") \
      	.mode("overwrite") \
      	.partitionBy("<your_partitionkey_field>") \
      	.save("s3://<the_s3_path>")
      ```

      Une fois les données écrites sur Amazon S3, utilisez le robot AWS Glue pour créer une nouvelle table de catalogue Delta. Pour plus d'informations, voir [Présentation du support de table natif de Delta Lake avec les robots AWS Glue](https://aws.amazon.com/blogs/big-data/introducing-native-delta-lake-table-support-with-aws-glue-crawlers/).

      Vous pouvez également créer le tableau manuellement via l'`CreateTable`API AWS Glue.

1. Accordez à Lake Formation l'autorisation d'accéder au rôle IAM AWS Glue Job. Vous pouvez accorder des autorisations depuis la console Lake Formation ou utiliser la AWS CLI. Pour plus d'informations, consultez la rubrique [Octroi d'autorisations de table via la console Lake Formation et la méthode de ressource nommée](https://docs.aws.amazon.com/lake-formation/latest/dg/granting-table-permissions.html)

1.  Lisez la table Delta enregistrée dans Lake Formation. Le code est le même que celui de la lecture d'une table Delta non enregistrée. Notez que le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SELECT pour que la lecture réussisse.

   ```
   # Example: Read a Delta Lake table from Glue Data Catalog
   
   df = glueContext.create_data_frame.from_catalog(
       database="<your_database_name>",
       table_name="<your_table_name>",
       additional_options=additional_options
   )
   ```

1. Écrire dans une table Delta enregistrée dans Lake Formation. Le code est le même que celui de l'écriture dans une table Delta non enregistrée. Notez que le rôle IAM de la tâche AWS Glue doit disposer de l'autorisation SUPER pour que l'écriture réussisse.

   Par défaut, AWS Glue utilise `Append` le mode SaveMode. Vous pouvez le modifier en définissant l'option saveMode dans `additional_options`. Pour plus d'informations sur la prise en charge du mode SaveMode dans les tables Delta, consultez [Écrire dans une table](https://docs.delta.io/latest/delta-batch.html#write-to-a-table).

   ```
   glueContext.write_data_frame.from_catalog(
       frame=dataFrame,
       database="<your_database_name>",
       table_name="<your_table_name>",
       additional_options=additional_options
   )
   ```

# Utilisation du framework Iceberg dans Glue AWS
<a name="aws-glue-programming-etl-format-iceberg"></a>

AWS Glue 3.0 et versions ultérieures prennent en charge le framework Apache Iceberg pour les lacs de données. Iceberg fournit un format de table hautement performant qui fonctionne exactement comme une table SQL. Cette rubrique décrit les fonctionnalités disponibles pour utiliser vos données dans AWS Glue lorsque vous transportez ou stockez vos données dans une table Iceberg. Pour en savoir plus sur Iceberg, consultez la [documentation officielle d'Apache Iceberg](https://iceberg.apache.org/docs/latest/). 

Vous pouvez utiliser AWS Glue pour effectuer des opérations de lecture et d'écriture sur des tables Iceberg dans Amazon S3, ou travailler avec des tables Iceberg à l'aide du catalogue de données AWS Glue. Des opérations supplémentaires, notamment l’insertion et toutes les [requêtes Spark](https://iceberg.apache.org/docs/latest/spark-queries/) et [écritures Spark](https://iceberg.apache.org/docs/latest/spark-writes/), sont également prises en charge. La mise à jour n’est pas prise en charge pour les tables Iceberg. 

**Note**  
`ALTER TABLE … RENAME TO` n'est pas disponible pour Apache Iceberg 0.13.1 pour AWS Glue 3.0.

Le tableau suivant répertorie les versions d'Iceberg incluses dans chaque version de AWS Glue.


****  

| AWS Version Glue | Version d'Iceberg prise en charge | 
| --- | --- | 
| 5.1 | 1.10.0 | 
| 5.0 | 1.7.1 | 
| 4.0 | 1.0.0 | 
| 3.0 | 0.13.1 | 

Pour en savoir plus sur les frameworks de lacs de données pris en charge par AWS Glue, consultez[Utilisation de frameworks de lacs de données avec des tâches AWS Glue ETL](aws-glue-programming-etl-datalake-native-frameworks.md).

## Activation du cadre Iceberg
<a name="aws-glue-programming-etl-format-iceberg-enable"></a>

Pour activer Iceberg for AWS Glue, effectuez les tâches suivantes :
+ Spécifiez `iceberg` comme valeur pour le paramètre de tâche `--datalake-formats`. Pour de plus amples informations, veuillez consulter [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).
+ Créez une clé nommée `--conf` d'après votre tâche AWS Glue et définissez-la sur la valeur suivante. Vous pouvez également définir la configuration suivante à l'aide de `SparkConf` dans votre script. Ces paramètres permettent à Apache Spark de gérer correctement les tables Iceberg.

  ```
  spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions 
  --conf spark.sql.catalog.glue_catalog=org.apache.iceberg.spark.SparkCatalog 
  --conf spark.sql.catalog.glue_catalog.warehouse=s3://<your-warehouse-dir>/ 
  --conf spark.sql.catalog.glue_catalog.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog 
  --conf spark.sql.catalog.glue_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO
  ```

  Si vous lisez ou écrivez sur des tables Iceberg enregistrées auprès de Lake Formation, suivez les instructions de AWS Glue 5.0 et versions ultérieures. [Utiliser AWS Glue with AWS Lake Formation pour un contrôle d'accès précis](security-lf-enable.md) Dans AWS Glue 4.0, ajoutez la configuration suivante pour activer la prise en charge de Lake Formation.

  ```
  --conf spark.sql.catalog.glue_catalog.glue.lakeformation-enabled=true
  --conf spark.sql.catalog.glue_catalog.glue.id=<table-catalog-id>
  ```

  Si vous utilisez AWS Glue 3.0 avec Iceberg 0.13.1, vous devez définir les configurations supplémentaires suivantes pour utiliser le gestionnaire de verrouillage Amazon DynamoDB afin de garantir une transaction atomique. AWS Glue 4.0 ou version ultérieure utilise le verrouillage optimiste par défaut. Pour plus d'informations, consultez [Iceberg AWS Integrations](https://iceberg.apache.org/docs/latest/aws/#dynamodb-lock-manager) dans la documentation officielle d'Apache Iceberg.

  ```
  --conf spark.sql.catalog.glue_catalog.lock-impl=org.apache.iceberg.aws.glue.DynamoLockManager 
  --conf spark.sql.catalog.glue_catalog.lock.table=<your-dynamodb-table-name>
  ```

**Utilisation d'une autre version d'Iceberg**

Pour utiliser une version d'Iceberg non prise en charge par AWS Glue, spécifiez vos propres fichiers JAR Iceberg à l'aide du paramètre `--extra-jars` job. N'incluez pas `iceberg` comme valeur du paramètre `--datalake-formats`. Si vous utilisez AWS Glue 5.0 ou une version ultérieure, vous devez définir le paramètre de `--user-jars-first true` tâche.

**Activation du chiffrement pour les tables Iceberg**

**Note**  
Les tables Iceberg possèdent leurs propres mécanismes pour activer le chiffrement côté serveur. Vous devez activer cette configuration en plus de la configuration de sécurité de AWS Glue.

Pour activer le chiffrement côté serveur sur les tables Iceberg, consultez les conseils de la [documentation d'Iceberg](https://iceberg.apache.org/docs/latest/aws/#s3-server-side-encryption).

**Ajouter une configuration Spark pour les différentes régions Iceberg**

Pour ajouter une configuration Spark supplémentaire pour l'accès aux tables interrégionales d'Iceberg avec le AWS Glue Data Catalog AWS Lake Formation, suivez les étapes ci-dessous :

1. Créez un [point d’accès multi-régions](https://docs.aws.amazon.com/AmazonS3/latest/userguide/multi-region-access-point-create-examples.html).

1. Définissez les propriétés Spark suivantes :

   ```
   -----
       --conf spark.sql.catalog.my_catalog.s3.use-arn-region-enabled=true \
       --conf spark.sql.catalog.{CATALOG}.s3.access-points.bucket1", "arn:aws:s3::<account-id>:accesspoint/<mrap-id>.mrap \
       --conf spark.sql.catalog.{CATALOG}.s3.access-points.bucket2", "arn:aws:s3::<account-id>:accesspoint/<mrap-id>.mrap
   -----
   ```

## Exemple : écrire une table Iceberg sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-iceberg-write"></a>

Cet exemple de script montre comment écrire dans une table Iceberg dans Amazon S3. L'exemple utilise [Iceberg AWS Integrations](https://iceberg.apache.org/docs/latest/aws/) pour enregistrer la table dans le catalogue de données AWS Glue.

------
#### [ Python ]

```
# Example: Create an Iceberg table from a DataFrame 
# and register the table to Glue Data Catalog

dataFrame.createOrReplaceTempView("tmp_<your_table_name>")

query = f"""
CREATE TABLE glue_catalog.<your_database_name>.<your_table_name>
USING iceberg
TBLPROPERTIES ("format-version"="2")
AS SELECT * FROM tmp_<your_table_name>
"""
spark.sql(query)
```

------
#### [ Scala ]

```
// Example: Example: Create an Iceberg table from a DataFrame
// and register the table to Glue Data Catalog

dataFrame.createOrReplaceTempView("tmp_<your_table_name>")

val query = """CREATE TABLE glue_catalog.<your_database_name>.<your_table_name>
USING iceberg
TBLPROPERTIES ("format-version"="2")
AS SELECT * FROM tmp_<your_table_name>
"""
spark.sql(query)
```

------

Vous pouvez également écrire dans une table Iceberg sur Amazon S3 et dans le catalogue de données à l'aide des méthodes Spark.

Conditions préalables : vous devez créer un catalogue pour que la bibliothèque Iceberg puisse l'utiliser. Lorsque vous utilisez le AWS catalogue de données AWS Glue, Glue simplifie les choses. Le catalogue de données AWS Glue est préconfiguré pour être utilisé par les bibliothèques Spark en tant que`glue_catalog`. Les tables du catalogue de données sont identifiées par a *databaseName* et *tableName* a. Pour plus d'informations sur le catalogue de données AWS Glue, consultez[Découverte et catalogage des données dans AWS Glue](catalog-and-crawler.md).

Si vous n'utilisez pas le catalogue de données AWS Glue, vous devrez approvisionner un catalogue via le Spark APIs. Pour plus d'informations, consultez [Spark Configuration](https://iceberg.apache.org/docs/latest/spark-configuration/) dans la documentation Iceberg.

Cet exemple écrit une table Iceberg dans Amazon S3 et le catalogue de données à l'aide de Spark.

------
#### [ Python ]

```
# Example: Write an Iceberg table to S3 on the Glue Data Catalog

# Create (equivalent to CREATE TABLE AS SELECT)
dataFrame.writeTo("glue_catalog.databaseName.tableName") \
    .tableProperty("format-version", "2") \
    .create()

# Append (equivalent to INSERT INTO)
dataFrame.writeTo("glue_catalog.databaseName.tableName") \
    .tableProperty("format-version", "2") \
    .append()
```

------
#### [ Scala ]

```
// Example: Write an Iceberg table to S3 on the Glue Data Catalog

// Create (equivalent to CREATE TABLE AS SELECT)
dataFrame.writeTo("glue_catalog.databaseName.tableName")
    .tableProperty("format-version", "2")
    .create()

// Append (equivalent to INSERT INTO)
dataFrame.writeTo("glue_catalog.databaseName.tableName")
    .tableProperty("format-version", "2")
    .append()
```

------

## Exemple : lecture d'une table Iceberg depuis Amazon S3 à l'aide du catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-iceberg-read"></a>

Cet exemple lit la table Iceberg que vous avez créée dans [Exemple : écrire une table Iceberg sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue](#aws-glue-programming-etl-format-iceberg-write).

------
#### [ Python ]

Pour cet exemple, utilisez la méthode `GlueContext.create\$1data\$1frame.from\$1catalog()`.

```
# Example: Read an Iceberg table from Glue Data Catalog

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

df = glueContext.create_data_frame.from_catalog(
    database="<your_database_name>",
    table_name="<your_table_name>",
    additional_options=additional_options
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getCatalogSource](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSource).

```
// Example: Read an Iceberg table from Glue Data Catalog

import com.amazonaws.services.glue.GlueContext
import org.apacke.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val df = glueContext.getCatalogSource("<your_database_name>", "<your_table_name>",
      additionalOptions = additionalOptions)
      .getDataFrame()
  }
}
```

------

## Exemple : `DataFrame` insérer un dans une table Iceberg dans Amazon S3 à l'aide du catalogue de données AWS Glue
<a name="aws-glue-programming-etl-format-iceberg-insert"></a>

Cet exemple insère des données dans la table Iceberg que vous avez créée dans [Exemple : écrire une table Iceberg sur Amazon S3 et l'enregistrer dans le catalogue de données AWS Glue](#aws-glue-programming-etl-format-iceberg-write).

**Note**  
Dans cet exemple, vous devez définir le paramètre `--enable-glue-datacatalog` job afin d'utiliser le catalogue de données AWS Glue comme métastore Apache Spark Hive. Pour en savoir plus, veuillez consulter la section [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md).

------
#### [ Python ]

Pour cet exemple, utilisez la méthode `GlueContext.write\$1data\$1frame.from\$1catalog()`.

```
# Example: Insert into an Iceberg table from Glue Data Catalog

from awsglue.context import GlueContext
from pyspark.context import SparkContext

sc = SparkContext()
glueContext = GlueContext(sc)

glueContext.write_data_frame.from_catalog(
    frame=dataFrame,
    database="<your_database_name>",
    table_name="<your_table_name>",
    additional_options=additional_options
)
```

------
#### [ Scala ]

Pour cet exemple, utilisez la méthode [getCatalogSink](glue-etl-scala-apis-glue-gluecontext.md#glue-etl-scala-apis-glue-gluecontext-defs-getCatalogSink).

```
// Example: Insert into an Iceberg table from Glue Data Catalog

import com.amazonaws.services.glue.GlueContext
import org.apacke.spark.SparkContext

object GlueApp {
  def main(sysArgs: Array[String]): Unit = {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    glueContext.getCatalogSink("<your_database_name>", "<your_table_name>",
      additionalOptions = additionalOptions)
      .writeDataFrame(dataFrame, glueContext)
  }
}
```

------

## Exemple : lecture d'une table Iceberg depuis Amazon S3 à l'aide de Spark
<a name="aws-glue-programming-etl-format-iceberg-read-spark"></a>

Conditions préalables : vous devez créer un catalogue pour que la bibliothèque Iceberg puisse l'utiliser. Lorsque vous utilisez le AWS catalogue de données AWS Glue, Glue simplifie les choses. Le catalogue de données AWS Glue est préconfiguré pour être utilisé par les bibliothèques Spark en tant que`glue_catalog`. Les tables du catalogue de données sont identifiées par a *databaseName* et *tableName* a. Pour plus d'informations sur le catalogue de données AWS Glue, consultez[Découverte et catalogage des données dans AWS Glue](catalog-and-crawler.md).

Si vous n'utilisez pas le catalogue de données AWS Glue, vous devrez approvisionner un catalogue via le Spark APIs. Pour plus d'informations, consultez [Spark Configuration](https://iceberg.apache.org/docs/latest/spark-configuration/) dans la documentation Iceberg.

Cet exemple lit une table Iceberg dans Amazon S3 à partir du catalogue de données à l'aide de Spark.

------
#### [ Python ]

```
# Example: Read an Iceberg table on S3 as a DataFrame from the Glue Data Catalog

dataFrame = spark.read.format("iceberg").load("glue_catalog.databaseName.tableName")
```

------
#### [ Scala ]

```
// Example: Read an Iceberg table on S3 as a DataFrame from the Glue Data Catalog

val dataFrame = spark.read.format("iceberg").load("glue_catalog.databaseName.tableName")
```

------

## Exemple : lecture et écriture d'une table Iceberg avec contrôle des autorisations de Lake Formation
<a name="aws-glue-programming-etl-format-iceberg-read-write-lake-formation-tables"></a>

Cet exemple lit et écrit dans une table Iceberg avec contrôle des autorisations de Lake Formation.

**Note**  
Cet exemple ne fonctionne que dans AWS Glue 4.0. Dans AWS Glue 5.0 et versions ultérieures, suivez les instructions fournies dans[Utiliser AWS Glue with AWS Lake Formation pour un contrôle d'accès précis](security-lf-enable.md).

1. Créez une table Iceberg et enregistrez-la dans Lake Formation :

   1. Pour activer le contrôle des autorisations de Lake Formation, vous devez d'abord enregistrer le chemin d'accès Amazon S3 de la table sur Lake Formation. Pour plus d’informations, consultez la rubrique [Enregistrement d’un emplacement Amazon S3](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html). Vous pouvez l'enregistrer depuis la console Lake Formation ou à l'aide de la AWS CLI :

      ```
      aws lakeformation register-resource --resource-arn arn:aws:s3:::<s3-bucket>/<s3-folder> --use-service-linked-role --region <REGION>
      ```

      Une fois que vous avez enregistré un emplacement Amazon S3, toute table AWS Glue pointant vers cet emplacement (ou l'un de ses emplacements enfants) renverra la valeur du `IsRegisteredWithLakeFormation` paramètre comme vraie lors de l'`GetTable`appel.

   1. Créez une table Iceberg qui pointe vers le chemin enregistré via Spark SQL :
**Note**  
Voici des exemples Python.

      ```
      dataFrame.createOrReplaceTempView("tmp_<your_table_name>")
      
      query = f"""
      CREATE TABLE glue_catalog.<your_database_name>.<your_table_name>
      USING iceberg
      AS SELECT * FROM tmp_<your_table_name>
      """
      spark.sql(query)
      ```

      Vous pouvez également créer le tableau manuellement via l'`CreateTable`API AWS Glue. Pour plus d'informations, consultez la section [Création de tables Apache Iceberg](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-iceberg-tables.html).
**Note**  
L’API `UpdateTable` ne prend actuellement pas en charge le format de table Iceberg en tant qu’entrée de l’opération.

1. Accordez à Lake Formation l'autorisation d'accéder au rôle IAM da la tâche. Vous pouvez accorder des autorisations à partir de la console Lake Formation ou à l'aide de la AWS CLI. Pour plus d'informations, voir : https://docs.aws.amazon.com/lake-formation/ latest/dg/granting -table-permissions.html

1. Lisez une table Iceberg enregistrée dans Lake Formation. Le code est le même que celui de la lecture d'une table Iceberg non enregistrée. Notez que le rôle IAM de votre job AWS Glue doit disposer de l'autorisation SELECT pour que la lecture réussisse.

   ```
   # Example: Read an Iceberg table from the AWS Glue Data Catalog
   from awsglue.context import GlueContextfrom pyspark.context import SparkContext
   
   sc = SparkContext()
   glueContext = GlueContext(sc)
   
   df = glueContext.create_data_frame.from_catalog(
       database="<your_database_name>",
       table_name="<your_table_name>",
       additional_options=additional_options
   )
   ```

1. Écrivez dans une table Iceberg enregistrée dans Lake Formation. Le code est le même que celui de l'écriture dans une table Iceberg non enregistrée. Notez que le rôle IAM de votre tâche AWS Glue doit disposer de l'autorisation SUPER pour que l'écriture réussisse.

   ```
   glueContext.write_data_frame.from_catalog(
       frame=dataFrame,
       database="<your_database_name>",
       table_name="<your_table_name>",
       additional_options=additional_options
   )
   ```

## Référence de configuration partagée
<a name="aws-glue-programming-etl-format-shared-reference"></a>

 Vous pouvez utiliser les valeurs `format_options` suivantes avec tout type de format. 
+ `attachFilename` : une chaîne au format approprié à utiliser comme nom de colonne. Si vous fournissez cette option, le nom du fichier source de l'enregistrement sera ajouté à l'enregistrement. La valeur du paramètre sera utilisée comme nom de colonne.
+ `attachTimestamp` : une chaîne au format approprié à utiliser comme nom de colonne. Si vous fournissez cette option, l'heure de la modification du fichier source de l'enregistrement sera ajoutée à l'enregistrement. La valeur du paramètre sera utilisée comme nom de colonne.

# AWS Support de Glue Data Catalog pour les tâches Spark SQL
<a name="aws-glue-programming-etl-glue-data-catalog-hive"></a>

Le catalogue de données AWS Glue est un catalogue compatible avec le métastore Apache Hive. Vous pouvez configurer vos tâches et points de terminaison de développement AWS Glue de manière à utiliser Data Catalog en tant que métastore Apache Hive externe. Vous pouvez alors exécuter directement les requêtes Apache Spark SQL sur les tables stockées dans le Data Catalog. Les images dynamiques AWS Glue s'intègrent au Catalog Data par défaut. Toutefois, avec cette fonctionnalité, les tâches Spark SQL peuvent commencer à utiliser Data Catalog en tant que métastore Hive externe.

Cette fonctionnalité nécessite un accès réseau à l'API de point de terminaison AWS Glue. Pour AWS Glue avec des connexions situées dans des sous-réseaux privés, vous devez configurer un point de terminaison VPC ou une passerelle NAT pour fournir l'accès au réseau. Pour plus d'informations sur la configuration des points de terminaison de VPC, reportez-vous à [Configuration de l'accès réseau aux magasins de données](start-connecting.md). Pour créer une passerelle NAT, veuillez consulter [Passerelles NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html) dans le *Guide de l'utilisateur Amazon VPC*.

Vous pouvez configurer des tâches et des points de terminaison de développement AWS Glue en ajoutant l'argument `"--enable-glue-datacatalog": ""` aux arguments de tâche et aux arguments de point de terminaison de développement, respectivement. La transmission de cet argument définit certaines configurations dans Spark qui lui permettent d'accéder à Data Catalog en tant que métastore Hive externe. Elle [permet également la prise en charge de Hive](https://spark.apache.org/docs/latest/api/java/org/apache/spark/sql/SparkSession.Builder.html#enableHiveSupport--) dans l'objet `SparkSession` créé dans la tâche ou le point de terminaison de développement AWS Glue. 

Pour activer l'accès au catalogue de données, cochez la case **Utiliser le catalogue de données AWS Glue comme métastore Hive** dans le groupe d'**options du catalogue** sur la page Ajouter une **tâche ou Ajouter un** **point de terminaison** de la console. Notez que le rôle IAM utilisé pour la tâche ou le point de terminaison de développement doit disposer des autorisations `glue:CreateDatabase`. Une base de données appelée « `default` » est créée dans Data Catalog, si elle n'existe pas déjà. 

Prenons l'exemple de la façon dont vous pouvez utiliser cette fonction dans vos tâches Spark SQL. L'exemple suivant suppose que vous avez analysé l'ensemble de données des législateurs américains disponible dans `s3://awsglue-datasets/examples/us-legislators`.

Pour accéder aux serialize/deserialize données des tables définies dans le catalogue de données AWS Glue, Spark SQL a besoin de la SerDe classe [Hive](https://cwiki.apache.org/confluence/display/Hive/SerDe) pour le format défini dans le catalogue de données AWS Glue dans le chemin de classe de la tâche Spark. 

SerDes car certains formats courants sont distribués parAWS Glue. Voici les liens Amazon S3 pour :
+ [JSON](https://s3.us-west-2.amazonaws.com/crawler-public/json/serde/json-serde.jar)
+ [XML](https://s3.us-west-2.amazonaws.com/crawler-public/xml/serde/hivexmlserde-1.0.5.3.jar)
+ [Grok](https://s3.us-west-2.amazonaws.com/crawler-public/grok/serde/AWSGlueHiveGrokSerDe-1.0-super.jar)

Ajoutez le JSON SerDe en tant que [JAR supplémentaire au point de terminaison de développement](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-dev-endpoint.html#aws-glue-api-dev-endpoint-DevEndpointCustomLibraries). Pour les tâches, vous pouvez ajouter l'`--extra-jars`argument SerDe using the dans le champ des arguments. Pour de plus amples informations, veuillez consulter [Utilisation des paramètres des tâches dans les tâches AWS Glue](aws-glue-programming-etl-glue-arguments.md). 

Voici un exemple d'entrée JSON pour créer un point de terminaison de développement avec Data Catalog activé pour Spark SQL.

```
{
    "EndpointName": "Name",
    "RoleArn": "role_ARN",
    "PublicKey": "public_key_contents",
    "NumberOfNodes": 2,
    "Arguments": {
      "--enable-glue-datacatalog": ""
    },
    "ExtraJarsS3Path": "s3://crawler-public/json/serde/json-serde.jar"
}
```

Maintenant, interrogez les tables créées à partir de l'ensemble de données des législateurs américains à l'aide de Spark SQL.

```
>>> spark.sql("use legislators")
DataFrame[]
>>> spark.sql("show tables").show()
+-----------+------------------+-----------+
|   database|         tableName|isTemporary|
+-----------+------------------+-----------+
|legislators|        areas_json|      false|
|legislators|    countries_json|      false|
|legislators|       events_json|      false|
|legislators|  memberships_json|      false|
|legislators|organizations_json|      false|
|legislators|      persons_json|      false|
+-----------+------------------+-----------+
>>> spark.sql("describe memberships_json").show()
+--------------------+---------+-----------------+
|            col_name|data_type|          comment|
+--------------------+---------+-----------------+
|             area_id|   string|from deserializer|
|     on_behalf_of_id|   string|from deserializer|
|     organization_id|   string|from deserializer|
|                role|   string|from deserializer|
|           person_id|   string|from deserializer|
|legislative_perio...|   string|from deserializer|
|          start_date|   string|from deserializer|
|            end_date|   string|from deserializer|
+--------------------+---------+-----------------+
```

Si la SerDe classe correspondant au format n'est pas disponible dans le chemin de classe de la tâche, une erreur semblable à la suivante s'affichera.

```
>>> spark.sql("describe memberships_json").show()

Caused by: MetaException(message:java.lang.ClassNotFoundException Class org.openx.data.jsonserde.JsonSerDe not found)
    at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:399)
    at org.apache.hadoop.hive.ql.metadata.Table.getDeserializerFromMetaStore(Table.java:276)
    ... 64 more
```

Pour afficher uniquement les éléments `organization_id` distincts à partir de la table `memberships`, exécutez la requête SQL suivante.

```
>>> spark.sql("select distinct organization_id from memberships_json").show()
+--------------------+
|     organization_id|
+--------------------+
|d56acebe-8fdc-47b...|
|8fa6c3d2-71dc-478...|
+--------------------+
```

Si vous devez faire de même avec des images dynamiques, exécutez le code suivant.

```
>>> memberships = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="memberships_json")
>>> memberships.toDF().createOrReplaceTempView("memberships")
>>> spark.sql("select distinct organization_id from memberships").show()
+--------------------+
|     organization_id|
+--------------------+
|d56acebe-8fdc-47b...|
|8fa6c3d2-71dc-478...|
+--------------------+
```

Bien qu' DynamicFrames ils soient optimisés pour les opérations ETL, le fait de permettre à Spark SQL d'accéder directement au catalogue de données fournit un moyen concis d'exécuter des instructions SQL complexes ou de porter des applications existantes.

# Utilisation des marque-pages de tâche
<a name="programming-etl-connect-bookmarks"></a>

AWS Glue pour Spark utilise les signets de tâche pour suivre les données qui ont déjà été traitées. Pour un résumé de la fonctionnalité des signets de tâches et de ce qu'elle prend en charge, consultez [Suivi des données traitées à l'aide de signets de tâche](monitor-continuations.md). Lorsque vous programmez une AWS Glue tâche avec des signets, vous avez accès à une flexibilité qui n'est pas disponible dans les tâches visuelles.
+  Lorsque vous lisez à partir de JDBC, vous pouvez spécifier la ou les colonnes à utiliser comme clés de signet dans votre script. AWS Glue 
+  Vous pouvez choisir la `transformation_ctx` à appliquer à chaque appel de méthode. 

*Appelez toujours `job.init` au début du script et `job.commit` à la fin du script avec les paramètres correctement configurés*. Ces deux fonctions initialisent le service de signet et mettent à jour le changement d'état vers le service. Les marque-pages ne fonctionnent pas s’ils ne sont pas appelés.

## Spécifier les clés des signets
<a name="programming-etl-connect-bookmarks-columns"></a>

Pour les flux de travail JDBC, le signet assure le suivi des lignes lues par votre tâche en comparant les valeurs des champs clés à la valeur d'un signet. Cela n'est ni nécessaire ni applicable aux flux de travail Amazon S3. Lorsque vous écrivez un AWS Glue script sans l'éditeur visuel, vous pouvez spécifier la colonne à suivre à l'aide de signets. Vous pouvez aussi spécifier plusieurs colonnes. Des écarts dans la séquence de valeurs sont autorisés lorsque vous spécifiez des clés de signet définies par l'utilisateur. 

**Avertissement**  
Si des clés de signets définies par l'utilisateur sont utilisées, elles doivent toutes croître ou diminuer de façon monotone. Lorsque vous sélectionnez des champs supplémentaires pour une clé composée, les champs correspondants à des concepts tels que les « versions mineures » ou « numéros de révision » ne répondent pas à ce critère, car leurs valeurs sont réutilisées dans l'ensemble de votre jeu de données.

Vous pouvez spécifier `jobBookmarkKeys` et `jobBookmarkKeysSortOrder` de la manière suivante : 
+ `create_dynamic_frame.from_catalog` – Utiliser `additional_options`.
+ `create_dynamic_frame.from_options` – Utiliser `connection_options`.

## Contexte de transformation
<a name="monitor-continuations-implement-context"></a>

De nombreuses méthodes de trame AWS Glue PySpark dynamique incluent un paramètre facultatif nommé`transformation_ctx`, qui est un identifiant unique pour l'instance d'opérateur ETL. Le paramètre `transformation_ctx` permet d'identifier les informations d'état dans un marque-page de tâche pour l'opérateur donné. Plus précisément, AWS Glue utilise `transformation_ctx` pour indexer la clé sur l'état du marque-page. 

**Avertissement**  
Le paramètre `transformation_ctx` sert de clé pour rechercher dans l'état du marque-page une source spécifique dans votre script. Pour que le marque-page fonctionne correctement, vous devez toujours conserver la source et la cohérence du paramètre `transformation_ctx` associée. La modification de la propriété source ou le renommage du paramètre `transformation_ctx` peut rendre le marque-page précédent invalide et le filtrage basé sur l'horodatage peut ne pas donner le bon résultat.

Pour que les marque-pages de tâche fonctionnent correctement, activez le paramètre de signet de tâche et définissez le paramètre `transformation_ctx`. Si vous ne transmettez pas le paramètre `transformation_ctx`, les marque-pages de tâche ne sont pas activés pour une trame dynamique ou un tableau utilisé dans la méthode. Par exemple, si vous avez une tâche ETL qui lit et joint deux sources Amazon S3, vous pouvez choisir de transmettre le paramètre `transformation_ctx` uniquement aux méthodes qui doivent activer les marque-pages. Si vous réinitialisez le marque-page de tâche d'une tâche, toutes les transformations associées à cette tâche sont réinitialisées, quel que soit le paramètre `transformation_ctx` utilisé. 

Pour plus d'informations sur la classe `DynamicFrameReader`, consultez [DynamicFrameReader classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-reader.md). Pour plus d'informations sur les PySpark extensions, consultez[AWS Référence des PySpark extensions Glue](aws-glue-programming-python-extensions.md). 

## Exemples
<a name="monitor-continuations-implement-examples"></a>

**Example**  
Voici un exemple de script généré pour une source de données Amazon S3. Les parties du script nécessaires à l'utilisation des signets de tâche sont indiquées en italique. Pour plus d'informations sur ces éléments, consultez l'API [GlueContext classe](aws-glue-api-crawler-pyspark-extensions-glue-context.md) et l'API [DynamicFrameWriter classe](aws-glue-api-crawler-pyspark-extensions-dynamic-frame-writer.md).  

```
# Sample Script
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

datasource0 = glueContext.create_dynamic_frame.from_catalog(
    database = "database",
    table_name = "relatedqueries_csv",
    transformation_ctx = "datasource0"
)

applymapping1 = ApplyMapping.apply(
    frame = datasource0,
    mappings = [("col0", "string", "name", "string"), ("col1", "string", "number", "string")],
    transformation_ctx = "applymapping1"
)

datasink2 = glueContext.write_dynamic_frame.from_options(
    frame = applymapping1,
    connection_type = "s3",
    connection_options = {"path": "s3://input_path"},
    format = "json",
    transformation_ctx = "datasink2"
)


job.commit()
```

**Example**  
Voici un exemple de script généré pour une source JDBC. La table source est une table d'employés avec la colonne `empno` comme clé principale. Bien que par défaut la tâche utilise une clé principale séquentielle comme clé de marque-page si aucune clé de marque-page n'est spécifiée, car `empno` n'est pas nécessairement séquentiel, il peut y avoir des lacunes dans les valeurs, elle n'est pas considérée comme une clé de marque-page par défaut. Par conséquent, le script désigne explicitement `empno` comme clé de marque-page. Cette partie du code est affichée en italique.  

```
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

datasource0 = glueContext.create_dynamic_frame.from_catalog(
    database = "hr",
    table_name = "emp",
    transformation_ctx = "datasource0",
    additional_options = {"jobBookmarkKeys":["empno"],"jobBookmarkKeysSortOrder":"asc"}
)

applymapping1 = ApplyMapping.apply(
    frame = datasource0,
    mappings = [("ename", "string", "ename", "string"), ("hrly_rate", "decimal(38,0)", "hrly_rate", "decimal(38,0)"), ("comm", "decimal(7,2)", "comm", "decimal(7,2)"), ("hiredate", "timestamp", "hiredate", "timestamp"), ("empno", "decimal(5,0)", "empno", "decimal(5,0)"), ("mgr", "decimal(5,0)", "mgr", "decimal(5,0)"), ("photo", "string", "photo", "string"), ("job", "string", "job", "string"), ("deptno", "decimal(3,0)", "deptno", "decimal(3,0)"), ("ssn", "decimal(9,0)", "ssn", "decimal(9,0)"), ("sal", "decimal(7,2)", "sal", "decimal(7,2)")],
    transformation_ctx = "applymapping1"
)

datasink2 = glueContext.write_dynamic_frame.from_options(
    frame = applymapping1,
    connection_type = "s3",
    connection_options = {"path": "s3://hr/employees"},
    format = "csv",
    transformation_ctx = "datasink2"
)

job.commit()
```

# Utilisation de la détection des données sensibles en dehors de AWS Glue Studio
<a name="aws-glue-api-sensitive-data-example"></a>

 AWS Glue Studio vous permet de détecter les données sensibles, mais vous pouvez également utiliser la fonctionnalité de détection des données sensibles en dehors de AWS Glue Studio. 

 Pour afficher la liste complète des types de données sensibles gérés, consultez [Managed data types](https://docs.aws.amazon.com/glue/latest/dg/sensitive-data-managed-data-types.html). 

## Détection de données sensibles Détection à l'aide de types d'informations personnelles AWS gérés
<a name="sensitive-data-managed-pii-types"></a>

 AWS Glue en fournit deux APIs dans une tâche AWS Glue ETL. `detect()` et `classifyColumns()` : 

```
  detect(frame: DynamicFrame, 
      entityTypesToDetect: Seq[String], 
      outputColumnName: String = "DetectedEntities",
      detectionSensitivity: String = "LOW"): DynamicFrame

 detect(frame: DynamicFrame, 
      detectionParameters: JsonOptions,
      outputColumnName: String = "DetectedEntities",
      detectionSensitivity: String = "LOW"): DynamicFrame
      
  classifyColumns(frame: DynamicFrame, 
      entityTypesToDetect: Seq[String], 
      sampleFraction: Double = 0.1, 
      thresholdFraction: Double = 0.1,
      detectionSensitivity: String = "LOW")
```

 Vous pouvez utiliser l'`detect()`API pour identifier les types d' AWS informations personnelles gérées et les types d'entités personnalisés. Une nouvelle colonne est automatiquement créée avec le résultat de la détection. L'API `classifyColumns()` renvoie une carte où les clés sont les noms de colonnes et les valeurs sont la liste des types d'entités détectés. `SampleFraction` indique la fraction des données à échantillonner lors de la recherche d'entités PII, tandis que `ThresholdFraction` indique la fraction des données qui doit être satisfaite pour qu'une colonne soit identifiée comme données PII. 

### Détection au niveau des lignes
<a name="w2aac67c11c24c19b9c11"></a>

 Dans l'exemple, la tâche exécute les actions suivantes à l'aide des touches `detect()` et `classifyColumns()` APIs : 
+  lire les données d'un Amazon S3 bucket et les transformer en DynamicFrame 
+  détection des instances « Email » et « Credit Card » dans le DynamicFrame 
+  renvoi d'un DynamicFrame avec les valeurs d'origine plus une colonne qui englobe le résultat de la détection pour chaque ligne 
+  écrire le DynamicFrame renvoyé dans un autre chemin Amazon S3 

```
  import com.amazonaws.services.glue.GlueContext
  import com.amazonaws.services.glue.MappingSpec
  import com.amazonaws.services.glue.errors.CallSite
  import com.amazonaws.services.glue.util.GlueArgParser
  import com.amazonaws.services.glue.util.Job
  import com.amazonaws.services.glue.util.JsonOptions
  import org.apache.spark.SparkContext
  import scala.collection.JavaConverters._
  import com.amazonaws.services.glue.ml.EntityDetector
  
  object GlueApp {
    def main(sysArgs: Array[String]) {
      val spark: SparkContext = new SparkContext()
      val glueContext: GlueContext = new GlueContext(spark)
      val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
      Job.init(args("JOB_NAME"), glueContext, args.asJava)
      val frame= glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ","}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="AmazonS3_node1650160158526").getDynamicFrame()
  
      val frameWithDetectedPII = EntityDetector.detect(frame, Seq("EMAIL", "CREDIT_CARD"))
  
      glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput/", "partitionKeys": []}"""), transformationContext="someCtx", format="json").writeDynamicFrame(frameWithDetectedPII)
  
      Job.commit()
    }
  }
```

### Détection au niveau des lignes avec actions détaillées
<a name="w2aac67c11c24c19b9c15"></a>

 Dans l'exemple, la tâche exécute les actions suivantes à l'aide de `detect()` APIs : 
+  lecture des données à partir d'un compartiment Amazon S3 et transformation de ces données en DynamicFrame 
+  détection des types de données sensibles pour « USA\$1PTIN », « BANK\$1ACCOUNT », « USA\$1SSN », « USA\$1PASSPORT\$1NUMBER » et « PHONE\$1NUMBER » dans le DynamicFrame 
+  renvoi d'un DynamicFrame avec les valeurs modifiées masquées plus une colonne qui englobe le résultat de la détection pour chaque ligne 
+  écriture du DynamicFrame renvoyé dans un autre chemin Amazon S3 

 Contrairement à l'API `detect()` ci-dessus, celle-ci utilise des actions détaillées que les types d'entités détectent. Pour de plus amples informations, veuillez consulter [Paramètres de détection pour l'utilisation de `detect()`](#sensitive-data-detect-parameters-fine-grained-actions). 

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._
import com.amazonaws.services.glue.ml.EntityDetector

object GlueApp {
  def main(sysArgs: Array[String]) {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    val frame = glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ","}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="AmazonS3_node_source").getDynamicFrame()

    val detectionParameters = JsonOptions(
      """
        {
          "USA_DRIVING_LICENSE": [{
            "action": "PARTIAL_REDACT",
            "sourceColumns": ["Driving License"],
            "actionOptions": {
              "matchPattern": "[0-9]",
              "redactChar": "*"
            }
          }],
          "BANK_ACCOUNT": [{
            "action": "DETECT",
            "sourceColumns": ["*"]
          }],
          "USA_SSN": [{
            "action": "SHA256_HASH",
            "sourceColumns": ["SSN"]
          }],
          "IP_ADDRESS": [{
            "action": "REDACT",
            "sourceColumns": ["IP Address"],
            "actionOptions": {"redactText": "*****"}
          }],
          "PHONE_NUMBER": [{
            "action": "PARTIAL_REDACT",
            "sourceColumns": ["Phone Number"],
            "actionOptions": {
              "numLeftCharsToExclude": 1,
              "numRightCharsToExclude": 0,
              "redactChar": "*"
            }
          }]
        }
      """
    )

    val frameWithDetectedPII = EntityDetector.detect(frame, detectionParameters, "DetectedEntities", "HIGH")

    glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput/", "partitionKeys": []}"""), transformationContext="AmazonS3_node_target", format="json").writeDynamicFrame(frameWithDetectedPII)

    Job.commit()
  }
}
```

### Détection au niveau des colonnes
<a name="w2aac67c11c24c19b9c19"></a>

 Dans l'exemple, la tâche exécute les actions suivantes à l'aide de `classifyColumns()` APIs : 
+  lecture des données à partir d'un compartiment Amazon S3 et transformation de ces données en DynamicFrame 
+  détection des instances « Email » et « Credit Card » dans le DynamicFrame 
+  définir les paramètres pour échantillonner 100 % de la colonne, marquer une entité comme détectée si elle se trouve dans 10 % des cellules et a une sensibilité « FAIBLE » 
+  renvoie une carte où les clés sont les noms de colonnes et les valeurs sont une liste des types d'entités détectés 
+  écriture du DynamicFrame renvoyé dans un autre chemin Amazon S3 

```
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._
import com.amazonaws.services.glue.DynamicFrame
import com.amazonaws.services.glue.ml.EntityDetector

object GlueApp {
  def main(sysArgs: Array[String]) {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    val frame = glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ",", "optimizePerformance": false}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="frame").getDynamicFrame()
    
    import glueContext.sparkSession.implicits._

    val detectedDataFrame = EntityDetector.classifyColumns(
        frame, 
        entityTypesToDetect = Seq("CREDIT_CARD", "PHONE_NUMBER"), 
        sampleFraction = 1.0, 
        thresholdFraction = 0.1,
        detectionSensitivity = "LOW"
    )
    val detectedDF = (detectedDataFrame).toSeq.toDF("columnName", "entityTypes")
    val DetectSensitiveData_node = DynamicFrame(detectedDF, glueContext)

    glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput", "partitionKeys": []}"""), transformationContext="someCtx", format="json").writeDynamicFrame(DetectSensitiveData_node)

    Job.commit()
  }
}
```

## Détection de données sensibles Détection à l'aide de AWS CustomEntityType types d'informations personnelles
<a name="sensitive-data-custom-entity-PII-types"></a>

 Vous pouvez définir des entités personnalisées via AWS Studio. Toutefois, pour utiliser cette fonctionnalité en dehors de AWS Studio, vous devez d'abord définir les types d'entités personnalisés, puis ajouter les types d'entités personnalisés définis à la liste des`entityTypesToDetect`. 

 Si vos données contiennent des types de données sensibles spécifiques (tels que l'ID d'employé), vous pouvez créer des entités personnalisées en appelant l'API `CreateCustomEntityType()`. L'exemple suivant définit le type d'entité personnalisé « EMPLOYEE\$1ID » pour l'API `CreateCustomEntityType()` avec les paramètres de demande : 

```
  { 
      "name": "EMPLOYEE_ID",
      "regexString": "\d{4}-\d{3}",
      "contextWords": ["employee"]
  }
```

 Modifiez ensuite la tâche pour utiliser le nouveau type de données sensibles personnalisé en ajoutant le type d'entité personnalisé (EMPLOYEE\$1ID) à l'API `EntityDetector()` : 

```
  import com.amazonaws.services.glue.GlueContext
  import com.amazonaws.services.glue.MappingSpec
  import com.amazonaws.services.glue.errors.CallSite
  import com.amazonaws.services.glue.util.GlueArgParser
  import com.amazonaws.services.glue.util.Job
  import com.amazonaws.services.glue.util.JsonOptions
  import org.apache.spark.SparkContext
  import scala.collection.JavaConverters._
  import com.amazonaws.services.glue.ml.EntityDetector
  
  object GlueApp {
    def main(sysArgs: Array[String]) {
      val spark: SparkContext = new SparkContext()
      val glueContext: GlueContext = new GlueContext(spark)
      val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
      Job.init(args("JOB_NAME"), glueContext, args.asJava)
      val frame= glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ","}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://pathToSource"], "recurse": true}"""), transformationContext="AmazonS3_node1650160158526").getDynamicFrame()
  
      val frameWithDetectedPII = EntityDetector.detect(frame, Seq("EMAIL", "CREDIT_CARD", "EMPLOYEE_ID"))
  
      glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://pathToOutput/", "partitionKeys": []}"""), transformationContext="someCtx", format="json").writeDynamicFrame(frameWithDetectedPII)
  
      Job.commit()
    }
  }
```

**Note**  
 Si un type de données sensibles personnalisé est défini avec le même nom qu'un type d'entité géré existant, le type de données sensibles personnalisé prévaut et remplace la logique du type d'entité géré. 

## Paramètres de détection pour l'utilisation de `detect()`
<a name="sensitive-data-detect-parameters-fine-grained-actions"></a>

 Cette méthode est utilisée pour détecter des entités dans un DynamicFrame. Il renvoie une nouvelle colonne DataFrame contenant les valeurs d'origine et une colonne supplémentaire outputColumnName contenant des métadonnées de détection des informations personnelles. Un masquage personnalisé peut être effectué une fois DynamicFrame celui-ci renvoyé dans le AWS Glue script, ou l'API detect () avec actions détaillées peut être utilisée à la place. 

```
detect(frame: DynamicFrame, 
       entityTypesToDetect: Seq[String], 
       outputColumnName: String = "DetectedEntities",
       detectionSensitivity: String = "LOW"): DynamicFrame
```

 Paramètres : 
+  **frame** — (type :`DynamicFrame`) L'entrée DynamicFrame contenant les données à traiter. 
+  **entityTypesToDétecter** — (type :`[Seq[String]`) Liste des types d'entités à détecter. Il peut s'agir de types d'entités gérés ou de types d'entités personnalisés. 
+  **outputColumnName**— (type :`String`, par défaut : "DetectedEntities«) Le nom de la colonne dans laquelle les entités détectées seront stockées. S'il n'est pas fourni, le nom de colonne par défaut est « DetectedEntities ». 
+  **detectionSensitivity** — (type : `String`, options : « FAIBLE » ou « ÉLEVÉ », par défaut : « FAIBLE ») spécifie la sensibilité du processus de détection. Les options valides sont « FAIBLE » ou « ÉLEVÉ ». Si ce n'est pas le cas, la sensibilité par défaut est réglée sur « FAIBLE ». 

 Paramètres `outputColumnName` : 

 Le nom de la colonne dans laquelle les entités détectées seront stockées. S'il n'est pas fourni, le nom de colonne par défaut est « DetectedEntities ». Pour chaque ligne de la colonne de sortie, la colonne supplémentaire inclut un mappage du nom de la colonne avec les métadonnées de l'entité détectée avec les paires clé-valeur suivantes : 
+  **entityType** : le type d'entité détecté. 
+  **début** : la position de départ de l'entité détectée dans les données d'origine. 
+  **fin** : la position de fin de l'entité détectée dans les données d'origine. 
+  **ActionUsed** — Action exécutée sur l'entité détectée (par exemple, « DETECT », « REDACT », « PARTIAL\$1REDACT », « \$1HASH »). SHA256 

 Exemple : 

```
{
   "DetectedEntities":{
      "SSN Col":[
         {
            "entityType":"USA_SSN",
            "actionUsed":"DETECT",
            "start":4,
            "end":15
         }
      ],
      "Random Data col":[
         {
            "entityType":"BANK_ACCOUNT",
            "actionUsed":"PARTIAL_REDACT",
            "start":4,
            "end":13
         },
         {
            "entityType":"IP_ADDRESS",
            "actionUsed":"REDACT",
            "start":4,
            "end":13
         }
      ]
   }
}
```

 **Paramètres de détection pour `detect()` avec des actions détaillées** 

 Cette méthode est utilisée pour détecter des entités dans un à DynamicFrame l'aide de paramètres spécifiés. Il renvoie une nouvelle colonne DataFrame avec les valeurs d'origine remplacées par des données sensibles masquées et une colonne supplémentaire contenant des `outputColumnName` métadonnées de détection des informations personnelles. 

```
detect(frame: DynamicFrame, 
       detectionParameters: JsonOptions,
       outputColumnName: String = "DetectedEntities",
       detectionSensitivity: String = "LOW"): DynamicFrame
```

 Paramètres : 
+  **frame** — (type :`DynamicFrame`) : entrée DynamicFrame contenant les données à traiter. 
+  **detectionParameters** — (type :`JsonOptions`) : options JSON spécifiant les paramètres du processus de détection. 
+  **outputColumnName**— (type :`String`, par défaut : "DetectedEntities«) : nom de la colonne dans laquelle les entités détectées seront stockées. S'il n'est pas fourni, le nom de colonne par défaut est « DetectedEntities ». 
+  **detectionSensitivity** — (type : `String`, options : « FAIBLE » ou « ÉLEVÉ », par défaut : « FAIBLE ») : spécifie la sensibilité du processus de détection. Les options valides sont « FAIBLE » ou « ÉLEVÉ ». Si ce n'est pas le cas, la sensibilité par défaut est réglée sur « FAIBLE ». 

<a name="detection-parameters-settings"></a> Paramètres `detectionParameters` 

 Si aucun paramètre n'est inclus, les valeurs par défaut seront utilisées. 
+  **action** — (type :`String`, options : « DETECT », « REDACT », « PARTIAL\$1REDACT », "SHA256\$1HASH ») Spécifie l'action à effectuer sur l'entité. Obligatoire. Notez que les actions qui effectuent un masquage (toutes sauf « DÉTECTER ») ne peuvent effectuer qu'une seule action par colonne. Il s'agit d'une mesure préventive pour masquer les entités fusionnées. 
+  **sourceColumns** — (type :`List[String]`, par défaut : [« \$1 »]) liste des noms de colonnes source sur lesquels effectuer la détection pour l'entité. La valeur par défaut est [« \$1 »] si elle n'est pas précisée. Lève une `IllegalArgumentException` si un nom de colonne non valide est utilisé. 
+  **sourceColumnsToExclure** — (type :`List[String]`) Liste des noms des colonnes sources sur lesquelles effectuer la détection pour l'entité. Utilisez `sourceColumns` ou `sourceColumnsToExclude`. Lève une `IllegalArgumentException` si un nom de colonne non valide est utilisé. 
+  **actionOptions** : options supplémentaires basées sur l'action spécifiée : 
  +  Pour « DETECT » et « SHA256 \$1HASH », aucune option n'est autorisée. 
  +  Pour « RÉDIGER » : 
    + **redactText** — (type :`String`, par défaut : « \$1\$1\$1\$1\$1 ») texte destiné à remplacer l'entité détectée.
  +  Pour « PARTIAL\$1REDACT » : 
    +  **redactChar** — (type :`String`, par défaut : « \$1 ») caractère pour remplacer chaque caractère détecté dans l'entité. 
    +  **matchPattern** — (type :`String`) modèle Regex pour la rédaction partielle. Ne peut pas être combiné avec numLeftChars ToExclude ou`numRightCharsToExclude`. 
    +  **numLeftCharsToExclude**— (type :`String, integer`) Nombre de caractères gauches à exclure. Ne peut pas être combiné avec matchPattern, mais peut être utilisé avec `numRightCharsToExclude`. 
    +  **numRightCharsToExclude**— (type :`String, integer`) Nombre de bons caractères à exclure. Ne peut pas être combiné avec matchPattern, mais peut être utilisé avec `numRightCharsToExclude`. 

 Paramètres `outputColumnName` 

 [Voir les outputColumnName paramètres](#sensitive-data-detect-parameters-fine-grained-actions) 

## Paramètres de détection pour `classifyColumns()`
<a name="detection-parameters-classifycolumns"></a>

 Cette méthode est utilisée pour détecter des entités dans un DynamicFrame. Il renvoie une carte où les clés sont les noms de colonnes et les valeurs sont une liste des types d'entités détectés. Un masquage personnalisé peut être effectué une fois celui-ci renvoyé dans le script AWS Glue. 

```
classifyColumns(frame: DynamicFrame, 
                entityTypesToDetect: Seq[String], 
                sampleFraction: Double = 0.1, 
                thresholdFraction: Double = 0.1,
                detectionSensitivity: String = "LOW")
```

 Paramètres : 
+  **frame** — (type :`DynamicFrame`) L'entrée DynamicFrame contenant les données à traiter. 
+  **entityTypesToDétecter** — (type :`Seq[String]`) Liste des types d'entités à détecter. Il peut s'agir de types d'entités gérés ou de types d'entités personnalisés. 
+  **sampleFraction** — (type :`Double`, par défaut : 10 %) la fraction des données à échantillonner lors de la recherche d'entités PII. 
+  **thresholdFraction** — (type :`Double`, par défaut : 10 %) :la fraction des données qui doit être satisfaite pour qu'une colonne soit identifiée comme données PII. 
+  **detectionSensitivity** — (type : `String`, options : « FAIBLE » ou « ÉLEVÉ », par défaut : « FAIBLE ») spécifie la sensibilité du processus de détection. Les options valides sont « FAIBLE » ou « ÉLEVÉ ». Si ce n'est pas le cas, la sensibilité par défaut est réglée sur « FAIBLE ». 

# Types de données sensibles gérés
<a name="sensitive-data-managed-data-types"></a>

 **Entités globales** 


| Type de données | Catégorie | Description | 
| --- | --- | --- | 
| PERSON\$1NAME | Universel |  Le nom de la personne.  | 
| EMAIL | Personnel |  L'adresse e-mail.  | 
| IP\$1ADDRESS | Ordinateur |  Adresse IP   | 
| MAC\$1ADDRESS | Personnel |  L'adresse MAC.  | 



 **Types de données pour les États-Unis** 


| Type de données | Description | 
| --- | --- | 
| BANK\$1ACCOUNT |  Numéro du compte bancaire. Non spécifique à un pays ou à une région, cependant, seuls les comptes bancaires américains et canadiens sont détectés.   | 
| CREDIT\$1CARD |  Le numéro de carte de crédit.  | 
| PHONE\$1NUMBER |   Numéro de téléphone. Non spécifique à un pays ou à une région, cependant, seuls les numéros de téléphone américains et canadiens sont détectés pour le moment.   | 
| USA\$1ATIN |  Le numéro d'identification fiscale américain délivré l'Internal Revenue Service.  | 
| USA\$1CPT\$1CODE |  Le code CPT (spécifique aux États-Unis).  | 
| USA\$1DEA\$1NUMBER |  Le numéro DEA (spécifique aux États-Unis).  | 
| USA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique aux États-Unis).  | 
| USA\$1HCPCS\$1CODE |  Le code HCPCS (spécifique aux États-Unis).  | 
| USA\$1HEALTH\$1INSURANCE\$1CLAIM\$1NUMBER |  Le numéro de sécurité sociale (spécifique aux États-Unis).  | 
| USA\$1ITIN |  Le numéro ITIN (pour les ressortissants ou les entités des États-Unis).  | 
| USA\$1MEDICARE\$1BENEFICIARY\$1IDENTIFIER |  L'identifiant de bénéficiaire Medicare (spécifique aux États-Unis).  | 
| USA\$1NATIONAL\$1DRUG\$1CODE |  Le code NDC (spécifique aux États-Unis).  | 
| USA\$1NATIONAL\$1PROVIDER\$1IDENTIFIER |  Le numéro National Provider Identifier (spécifique aux États-Unis).  | 
| USA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (pour les ressortissants des États-Unis).  | 
| USA\$1PTIN |  Le numéro d'identification fiscale du préparateur américain délivré l'Internal Revenue Service.  | 
| USA\$1SSN |  Le numéro de sécurité sociale (pour les ressortissants des États-Unis).  | 



 **Types de données pour l'Argentine** 


| Type de données | Description | 
| --- | --- | 
| ARGENTINA\$1TAX\$1IDENTIFICATION\$1NUMBER |   Le numéro d'identification fiscale de l'Argentine. Également connu sous le nom de CUIT ou CUIL.   | 

 **Types de données pour l'Australie** 


| Type de données | Description | 
| --- | --- | 
| AUSTRALIA\$1BUSINESS\$1NUMBER |   Le numéro d'entreprise australien (ABN). Un identifiant unique délivré par l'Australian Business Register (ABR) pour identifier les entreprises auprès du gouvernement et de la communauté.   | 
| AUSTRALIA\$1COMPANY\$1NUMBER |   Le numéro de société australien (ACN). Un identifiant unique délivré par l'Australian Securities and Investments Commission.   | 
| AUSTRALIA\$1DRIVING\$1LICENSE |  Un numéro de permis de conduire pour l'Australie.   | 
| AUSTRALIA\$1MEDICARE\$1NUMBER |  Le numéro Medicare australien. Un identifiant personnel délivré par l'Australian Health Insurance Commission.  | 
| AUSTRALIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport australien.   | 
| AUSTRALIA\$1TAX\$1FILE\$1NUMBER |   Le numéro de dossier fiscal australien (TFN). Délivré par l'Australian Taxation Office (ATO) aux contribuables (particuliers, entreprises, etc.) pour la gestion de leurs impôts.   | 

 **Types de données pour l'Autriche** 


| Type de données | Description | 
| --- | --- | 
| AUSTRIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à l'Autriche).  | 
| AUSTRIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à l'Autriche).  | 
| AUSTRIA\$1SSN |  Le numéro de sécurité sociale (pour les ressortissants de l'Autriche).  | 
| AUSTRIA\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à l'Autriche).  | 
| AUSTRIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à l'Autriche).  | 

 **Types de données pour les Balkans** 


| Type de données | Description | 
| --- | --- | 
| BOSNIA\$1UNIQUE\$1MASTER\$1CITIZEN\$1NUMBER |  Le numéro d'identification nationale (JMBG) pour les citoyens de Bosnie-Herzégovine.  | 
| KOSOVO\$1UNIQUE\$1MASTER\$1CITIZEN\$1NUMBER |  Le numéro d'identification nationale (JMBG) pour le Kosovo.  | 
| MACEDONIA\$1UNIQUE\$1MASTER\$1CITIZEN\$1NUMBER |  Le numéro d'identification nationale pour la Macédoine.  | 
| MONTENEGRO\$1UNIQUE\$1MASTER\$1CITIZEN\$1NUMBER |  Le numéro d'identification nationale (JMBG) pour le Monténégro.  | 
| SERBIA\$1UNIQUE\$1MASTER\$1CITIZEN\$1NUMBER |  Le numéro d'identification nationale (JMBG) pour la Serbie.  | 
| SERBIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Serbie).  | 
| VOJVODINA\$1UNIQUE\$1MASTER\$1CITIZEN\$1NUMBER |  Le numéro d'identification nationale (JMBG) pour Voïvodine.  | 

 **Types de données pour la Belgique** 


| Type de données | Description | 
| --- | --- | 
| BELGIUM\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Belgique).  | 
| BELGIUM\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro de registre national.  | 
| BELGIUM\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Belgique).  | 
| BELGIUM\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la Belgique).  | 
| BELGIUM\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Belgique).  | 

 **Types de données pour le Brésil** 


| Type de données | Description | 
| --- | --- | 
| BRAZIL\$1BANK\$1ACCOUNT | Le numéro de compte bancaire (spécifique au Brésil). | 
| BRAZIL\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  L'identifiant national (spécifique au Brésil).  | 
| BRAZIL\$1NATIONAL\$1REGISTRY\$1OF\$1LEGAL\$1ENTITIES\$1NUMBER |  Le numéro d'identification délivré aux entreprises (spécifique au Brésil), également connu sous le nom de CNPJ.  | 
| BRAZIL\$1NATURAL\$1PERSON\$1REGISTRY\$1NUMBER |  Le cadastre de personne physique connu sous le nom de CPF.  | 

 **Types de données pour la Bulgarie** 


| Type de données | Description | 
| --- | --- | 
| BULGARIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Bulgarie).  | 
| BULGARIA\$1UNIFORM\$1CIVIL\$1NUMBER |  Le numéro civil unifié (EGN) qui fait office de numéro d'identification national.  | 
| BULGARIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Bulgarie).  | 

 **Types de données pour le Canada** 


| Type de données | Description | 
| --- | --- | 
| CANADA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique au Canada).  | 
| CANADA\$1GOVERNMENT\$1IDENTIFICATION\$1CARD\$1NUMBER |  L'identifiant national (spécifique au Canada).  | 
| CANADA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique au Canada).  | 
| CANADA\$1PERMANENT\$1RESIDENCE\$1NUMBER |  Certificat d'inscription au registre des étrangers (numéro de carte RP).  | 
| CANADA\$1PERSONAL\$1HEALTH\$1NUMBER |  L'identifiant unique pour les soins de santé (numéro PHN).  | 
| CANADA\$1SOCIAL\$1INSURANCE\$1NUMBER |  Le numéro d'assurance sociale (SIN) au Canada.  | 

 **Types de données pour le Chili** 


| Type de données | Description | 
| --- | --- | 
| CHILE\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique au Chili).  | 
| CHILE\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  L'identifiant national du Chili, également connu sous le nom de RUT ou RUN.  | 

 **Types de données pour la Chine, Hong Kong, Macao et Taïwan** 


| Type de données | Description | 
| --- | --- | 
| CHINA\$1IDENTIFICATION |  L'identifiant de la Chine.  | 
| CHINA\$1LICENSE\$1PLATE\$1NUMBER |  Le numéro de permis de conduire (spécifique à la Chine).  | 
| CHINA\$1MAINLAND\$1TRAVEL\$1PERMIT\$1ID\$1HONG\$1KONG\$1MACAU |  Le permis de voyage continental pour les résidents de Hong Kong et de Macao.  | 
| CHINA\$1MAINLAND\$1TRAVEL\$1PERMIT\$1ID\$1TAIWAN |  Le permis de voyage continental pour les résidents de Taïwan délivré par le gouvernement de la Chine.  | 
| CHINA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Chine).  | 
| CHINA\$1PHONE\$1NUMBER |  Le numéro de téléphone (spécifique à la Chine).  | 
| HONG\$1KONG\$1IDENTITY\$1CARD |  Le document d'identité officiel délivré par le ministère de l'Immigration de Hong Kong.  | 
| MACAU\$1RESIDENT\$1IDENTITY\$1CARD |  La carte d'identité de résident de Macao ou BIR est une carte d'identité officielle délivrée par le Bureau des services d'identification de Macao.  | 
| TAIWAN\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  L'identifiant national (spécifique à Taïwan).  | 
| TAIWAN\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à Taïwan).  | 

 **Types de données pour la Colombie** 


| Type de données | Description | 
| --- | --- | 
| COLOMBIA\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Un identifiant unique attribué aux Colombiens à la naissance.  | 
| COLOMBIA\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la Colombie).  | 

 **Types de données pour la Croatie** 


| Type de données | Description | 
| --- | --- | 
| CROATIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Croatie).  | 
| CROATIA\$1IDENTITY\$1NUMBER |  L'identifiant national (spécifique à la Croatie).  | 
| CROATIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Croatie).  | 
| CROATIA\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (OIB).  | 

 **Types de données pour Chypre** 


| Type de données | Description | 
| --- | --- | 
| CYPRUS\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à Chypre).  | 
| CYPRUS\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  La carte d'identité chypriote.  | 
| CYPRUS\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à Chypre).  | 
| CYPRUS\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à Chypre).  | 
| CYPRUS\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à Chypre).  | 

 **Types de données pour la Tchéquie** 


| Type de données | Description | 
| --- | --- | 
| CZECHIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Tchéquie).  | 
| CZECHIA\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (spécifique à la Tchéquie).  | 
| CZECHIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Tchéquie).  | 

 **Types de données pour le Danemark** 


| Type de données | Description | 
| --- | --- | 
| DENMARK\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique Danemark).  | 
| DENMARK\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (spécifique au Danemark).  | 
| DENMARK\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique au Danemark).  | 
| DENMARK\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique au Danemark).  | 

 **Types de données pour l'Estonie** 


| Type de données | Description | 
| --- | --- | 
| ESTONIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à l'Estonie).  | 
| ESTONIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à l'Estonie).  | 
| ESTONIA\$1PERSONAL\$1IDENTIFICATION\$1CODE |  Le numéro d'identification personnel (spécifique à l'Estonie).  | 
| ESTONIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à l'Estonie).  | 

 **Types de données pour la Finlande** 


| Type de données | Description | 
| --- | --- | 
| FINLAND\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Finlande).  | 
| FINLAND\$1HEALTH\$1INSURANCE\$1NUMBER |  Le numéro d'assurance maladie (spécifique à la Finlande).  | 
| FINLAND\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique à la Finlande).  | 
| FINLAND\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Finlande).  | 
| FINLAND\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Finlande).  | 

 **Types de données pour la France** 


| Type de données | Description | 
| --- | --- | 
| FRANCE\$1BANK\$1ACCOUNT |  Le numéro de compte bancaire (spécifique à la France).  | 
| FRANCE\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la France).  | 
| FRANCE\$1HEALTH\$1INSURANCE\$1NUMBER |  Le numéro d'assurance maladie de la France.  | 
| FRANCE\$1INSEE\$1CODE |  Le numéro de sécurité sociale en France.  | 
| FRANCE\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification national (NNI) de la France.  | 
| FRANCE\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la France).  | 
| FRANCE\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la France).  | 
| FRANCE\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la France).  | 

 **Types de données pour l'Allemagne** 


| Type de données | Description | 
| --- | --- | 
| GERMANY\$1BANK\$1ACCOUNT |  Le numéro de compte bancaire (spécifique à l'Allemagne).  | 
| GERMANY\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à l'Allemagne).  | 
| GERMANY\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à l'Allemagne).  | 
| GERMANY\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (spécifique à l'Allemagne).  | 
| GERMANY\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à l'Allemagne).  | 
| GERMANY\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à l'Allemagne).  | 

 **Types de données pour la Grèce** 


| Type de données | Description | 
| --- | --- | 
| GREECE\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Grèce).  | 
| GREECE\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Grèce).  | 
| GREECE\$1SSN |  Le numéro de sécurité sociale (pour les ressortissants de la Grèce).  | 
| GREECE\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la Grèce).  | 
| GREECE\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Grèce).  | 

 **Types de données pour la Hongrie** 


| Type de données | Description | 
| --- | --- | 
| HUNGARY\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Hongrie).  | 
| HUNGARY\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Hongrie).  | 
| HUNGARY\$1SSN |  Le numéro de sécurité sociale (pour les ressortissants de la Hongrie).  | 
| HUNGARY\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la Hongrie).  | 
| HUNGARY\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Hongrie).  | 

 **Types de données pour l'Islande** 


| Type de données | Description | 
| --- | --- | 
| ICELAND\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  L'identifiant national (spécifique à l'Islande).  | 
| ICELAND\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à l'Islande).  | 
| ICELAND\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à l'Islande).  | 

 **Types de données pour l'Inde** 


| Type de données | Description | 
| --- | --- | 
| INDIA\$1AADHAAR\$1NUMBER |  Le numéro d'identification Aadhaar délivré par l'Unique Identification Authority of India.  | 
| INDIA\$1PERMANENT\$1ACCOUNT\$1NUMBER |  Le numéro PAN (Permanent Account Number, numéro de compte permanent).  | 

 **Types de données pour l'Indonésie** 


| Type de données | Description | 
| --- | --- | 
| INDONESIA\$1IDENTITY\$1CARD\$1NUMBER |  L'identifiant national (spécifique à l'Indonésie).  | 

 **Types de données pour l'Irlande** 


| Type de données | Description | 
| --- | --- | 
| IRELAND\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à l'Irlande).  | 
| IRELAND\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à l'Irlande).  | 
| IRELAND\$1PERSONAL\$1PUBLIC\$1SERVICE\$1NUMBER |  Le numéro personnel pour le service public (PPS) de l'Irlande.  | 
| IRELAND\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à l'Irlande).  | 
| IRELAND\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à l'Irlande).  | 

 **Types de données pour Israël** 


| Type de données | Description | 
| --- | --- | 
| ISRAEL\$1IDENTIFICATION\$1NUMBER |  L'identifiant national (spécifique à Israël).  | 

 **Types de données pour l'Italie** 


| Type de données | Description | 
| --- | --- | 
| ITALY\$1BANK\$1ACCOUNT |  Le numéro de compte bancaire (spécifique à l'Italie).  | 
| ITALY\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à l'Italie).  | 
| ITALY\$1FISCAL\$1CODE |  Le numéro d'identification, également connu sous le nom de Codice Fiscale italien.  | 
| ITALY\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à l'Italie).  | 
| ITALY\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à l'Italie).  | 

 **Types de données pour le Japon** 


| Type de données | Description | 
| --- | --- | 
| JAPAN\$1BANK\$1ACCOUNT |  Compte en banque au Japon.  | 
| JAPAN\$1DRIVING\$1LICENSE |  Un numéro de permis de conduire pour le Japon.  | 
| JAPAN\$1MY\$1NUMBER |  Identifiant unique des citoyens ou des entreprises du Japon utilisé pour l'administration fiscale, la sécurité sociale et les interventions en cas de catastrophe   | 
| JAPAN\$1PASSPORT\$1NUMBER |  Numéro de passeport japonais.  | 

 **Types de données pour la Corée** 


| Type de données | Description | 
| --- | --- | 
| KOREA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Corée).  | 
| KOREA\$1RESIDENCE\$1REGISTRATION\$1NUMBER\$1FOR\$1CITIZENS |  Le numéro d'enregistrement de résident en Corée pour les résidents.  | 
| KOREA\$1RESIDENCE\$1REGISTRATION\$1NUMBER\$1FOR\$1FOREIGNERS |  Le numéro d'enregistrement de résident en Corée pour les étrangers.  | 

 **Types de données pour la Lettonie** 


| Type de données | Description | 
| --- | --- | 
| LATVIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Lettonie).  | 
| LATVIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Lettonie).  | 
| LATVIA\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (spécifique à la Lettonie).  | 
| LATVIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Lettonie).  | 

 **Types de données pour le Liechtenstein** 


| Type de données | Description | 
| --- | --- | 
| LIECHTENSTEIN\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  L'identifiant national (spécifique au Liechtenstein).  | 
| LIECHTENSTEIN\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique au Liechtenstein).  | 
| LIECHTENSTEIN\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique au Liechtenstein).  | 

 **Types de données pour la Lituanie** 


| Type de données | Description | 
| --- | --- | 
| LITHUANIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Lituanie).  | 
| LITHUANIA\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (spécifique à la Lituanie).  | 
| LITHUANIA\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la Lituanie).  | 
| LITHUANIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Lituanie).  | 

 **Types de données pour le Luxembourg** 


| Type de données | Description | 
| --- | --- | 
| LUXEMBOURG\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique au Luxembourg).  | 
| LUXEMBOURG\$1NATIONAL\$1INDIVIDUAL\$1NUMBER |  L'identifiant national (spécifique au Luxembourg).  | 
| LUXEMBOURG\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique au Luxembourg).  | 
| LUXEMBOURG\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique au Luxembourg).  | 
| LUXEMBOURG\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique au Luxembourg).  | 

 **Types de données pour la Malaisie** 


| Type de données | Description | 
| --- | --- | 
| MALAYSIA\$1MYKAD\$1NUMBER |  L'identifiant national (spécifique à la Malaisie).  | 
| MALAYSIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Malaisie).  | 

 **Types de données pour Malte** 


| Type de données | Description | 
| --- | --- | 
| MALTA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à Malte).  | 
| MALTA\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  L'identifiant national (spécifique à Malte).  | 
| MALTA\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à Malte).  | 
| MALTA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à Malte).  | 

 **Types de données pour le Mexique** 


| Type de données | Description | 
| --- | --- | 
| MEXICO\$1CLABE\$1NUMBER |  Numéro CLABE du Mexique (Clave Bancaria Estandarizada), numéro bancaire.  | 
| MEXICO\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique au Mexique).  | 
| MEXICO\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique au Mexique).  | 
| MEXICO\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique au Mexique).  | 
| MEXICO\$1UNIQUE\$1POPULATION\$1REGISTRY\$1CODE |  Le Clave Única de Registro de Población (CURP), le numéro d'identification national au Mexique.  | 

 **Types de données pour les Pays-Bas** 


| Type de données | Description | 
| --- | --- | 
| NETHERLANDS\$1CITIZEN\$1SERVICE\$1NUMBER |  Le numéro de citoyen néerlandais (BSN, burgerservicenummer).  | 
| NETHERLANDS\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique aux Pays-Bas).  | 
| NETHERLANDS\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique aux Pays-Bas).  | 
| NETHERLANDS\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique aux Pays-Bas).  | 
| NETHERLANDS\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique aux Pays-Bas).  | 
| NETHERLANDS\$1BANK\$1ACCOUNT |  Le numéro de compte bancaire (spécifique aux Pays-Bas).  | 

 **Types de données pour la Nouvelle-Zélande** 


| Type de données | Description | 
| --- | --- | 
| NEW\$1ZEALAND\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Nouvelle-Zélande).  | 
| NEW\$1ZEALAND\$1NATIONAL\$1HEALTH\$1INDEX\$1NUMBER |  Le numéro de l'indice national de santé (NHI) de la Nouvelle-Zélande.  | 
| NEW\$1ZEALAND\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale, également connu sous le nom de numéro de revenu intérieur (spécifique à la Nouvelle-Zélande).  | 

 **Types de données pour la Norvège** 


| Type de données | Description | 
| --- | --- | 
| NORWAY\$1BIRTH\$1NUMBER |  Le numéro d'identité national norvégien.  | 
| NORWAY\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Norvège).  | 
| NORWAY\$1HEALTH\$1INSURANCE\$1NUMBER |  Le numéro d'assurance maladie de la Norvège.  | 
| NORWAY\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique à la Norvège).  | 
| NORWAY\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Norvège).  | 

 **Types de données pour les Philippines** 


| Type de données | Description | 
| --- | --- | 
| PHILIPPINES\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique aux Philippines).  | 
| PHILIPPINES\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique aux Philippines).  | 

 **Types de données pour la Pologne** 


| Type de données | Description | 
| --- | --- | 
| POLAND\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Pologne).  | 
| POLAND\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification polonais.  | 
| POLAND\$1PASSPORT\$1NUMBER |  Le numéro du passeport (spécifique à la Pologne).  | 
| POLAND\$1REGON\$1NUMBER |  Le numéro d'identification REGON.  | 
| POLAND\$1SSN |  Le numéro de sécurité sociale (pour les ressortissants de la Pologne).  | 
| POLAND\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la Pologne).  | 
| POLAND\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Pologne).  | 

 **Types de données pour le Portugal** 


| Type de données | Description | 
| --- | --- | 
| PORTUGAL\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique au Portugal).  | 
| PORTUGAL\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique au Portugal).  | 
| PORTUGAL\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique au Portugal).  | 
| PORTUGAL\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique au Portugal).  | 
| PORTUGAL\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique au Portugal).  | 

 **Types de données pour la Roumanie** 


| Type de données | Description | 
| --- | --- | 
| ROMANIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Roumanie).  | 
| ROMANIA\$1NUMERICAL\$1PERSONAL\$1CODE |  Le numéro d'identification personnel (spécifique à la Roumanie).  | 
| ROMANIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Roumanie).  | 
| ROMANIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Roumanie).  | 

 **Types de données pour Singapour** 


| Type de données | Description | 
| --- | --- | 
| SINGAPORE\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à Singapour).  | 
| SINGAPORE\$1NATIONAL\$1REGISTRY\$1IDENTIFICATION\$1NUMBER |  La carte d'identité nationale d'enregistrement pour Singapour.  | 
| SINGAPORE\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à Singapour).  | 
| SINGAPORE\$1UNIQUE\$1ENTITY\$1NUMBER |  Le numéro d'entité unique pour Singapour.  | 

 **Types de données pour la Slovaquie** 


| Type de données | Description | 
| --- | --- | 
| SLOVAKIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Slovaquie).  | 
| SLOVAKIA\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique à la Slovaquie).  | 
| SLOVAKIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Slovaquie).  | 
| SLOVAKIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Slovaquie).  | 

 **Types de données pour la Slovénie** 


| Type de données | Description | 
| --- | --- | 
| SLOVENIA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Slovénie).  | 
| SLOVENIA\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Slovénie).  | 
| SLOVENIA\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale (spécifique à la Slovénie).  | 
| SLOVENIA\$1UNIQUE\$1MASTER\$1CITIZEN\$1NUMBER |  Le numéro d'identification nationale (JMBG) pour les citoyens slovènes.  | 
| SLOVENIA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Slovénie).  | 

 **Types de données pour l'Afrique du Sud** 


| Type de données | Description | 
| --- | --- | 
| SOUTH\$1AFRICA\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (spécifique à l'Afrique du Sud).  | 

 **Types de données pour l'Espagne** 


| Type de données | Description | 
| --- | --- | 
| SPAIN\$1BANK\$1ACCOUNT |  Le numéro de compte bancaire (spécifique à l'Espagne).  | 
| SPAIN\$1DNI |  La carte d'identité nationale (Documento Nacional de Identidad) de l'Espagne.  | 
| SPAIN\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à l'Espagne).  | 
| SPAIN\$1NIE |  Le numéro d'identité d'étranger (spécifique à l'Espagne), également connu sous le nom de NIE.  | 
| SPAIN\$1NIF |  Le numéro d'identification fiscale (spécifique à l'Espagne), également connu sous le nom de NIF.  | 
| SPAIN\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à l'Espagne).  | 
| SPAIN\$1SSN |  Le numéro de sécurité sociale (pour les ressortissants de l'Espagne).  | 
| SPAIN\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à l'Espagne).  | 

 **Types de données pour le Sri Lanka** 


| Type de données | Description | 
| --- | --- | 
| SRI\$1LANKA\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique au Sri Lanka).  | 

 **Types de données pour la Suède** 


| Type de données | Description | 
| --- | --- | 
| SWEDEN\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique à la Suède).  | 
| SWEDEN\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Suède).  | 
| SWEDEN\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique à la Suède).  | 
| SWEDEN\$1TAX\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification fiscale suédois (personnummer).  | 
| SWEDEN\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Suède).  | 

 **Types de données pour la Suisse** 


| Type de données | Description | 
| --- | --- | 
| SWITZERLAND\$1AHV |  Le numéro de sécurité sociale pour les ressortissants suisses (AHV).  | 
| SWITZERLAND\$1HEALTH\$1INSURANCE\$1NUMBER |  Le numéro d'assurance maladie de la Suisse.  | 
| SWITZERLAND\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Suisse).  | 
| SWITZERLAND\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Suisse).  | 

 **Types de données pour la Thaïlande** 


| Type de données | Description | 
| --- | --- | 
| THAILAND\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Thaïlande).  | 
| THAILAND\$1PERSONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identification personnel (spécifique à la Thaïlande).  | 

 **Types de données pour la Turquie** 


| Type de données | Description | 
| --- | --- | 
| TURKEY\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique à la Turquie).  | 
| TURKEY\$1PASSPORT\$1NUMBER |  Le numéro de passeport (spécifique à la Turquie).  | 
| TURKEY\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique à la Turquie).  | 

 **Types de données pour l'Ukraine** 


| Type de données | Description | 
| --- | --- | 
| UKRAINE\$1INDIVIDUAL\$1IDENTIFICATION\$1NUMBER |  L'identifiant unique (spécifique à l'Ukraine).  | 
| UKRAINE\$1PASSPORT\$1NUMBER\$1DOMESTIC |  Le numéro de passeport national (spécifique à l'Ukraine).  | 
| UKRAINE\$1PASSPORT\$1NUMBER\$1INTERNATIONAL |  Le numéro de passeport international (spécifique à l'Ukraine).  | 

 **Types de données pour les Émirats arabes unis (EAU)** 


| Type de données | Description | 
| --- | --- | 
| UNITED\$1ARAB\$1EMIRATES\$1PERSONAL\$1NUMBER |  Le numéro d'identification personnel (spécifique aux EAU).  | 

 **Types de données pour le Royaume-Uni** 


| Type de données | Description | 
| --- | --- | 
| UK\$1BANK\$1ACCOUNT |  Le compte bancaire au Royaume-Uni (UK).  | 
| UK\$1BANK\$1SORT\$1CODE |   Le Sort code du Royaume-Uni (UK). Les Sort Codes sont des codes bancaires utilisés pour acheminer les transferts d'argent entre les banques de leurs pays respectifs via leurs organismes de compensation respectifs.   | 
| UK\$1DRIVING\$1LICENSE |  Numéro de permis de conduire pour le Royaume-Uni de Grande-Bretagne et d'Irlande du Nord (spécifique au Royaume-Uni)  | 
| UK\$1ELECTORAL\$1ROLL\$1NUMBER |  L'Electoral Roll Number (ERN) est le numéro d'identification délivré aux citoyens pour s'inscrire aux élections du Royaume-Uni. Le format de ce numéro est spécifié par les normes du Bureau du Cabinet du gouvernement du Royaume-Uni.  | 
| UK\$1NATIONAL\$1HEALTH\$1SERVICE\$1NUMBER |  Le National Health Service (NHS) est le numéro unique attribué aux utilisateurs enregistrés auprès des services de santé publique du Royaume-Uni.  | 
| UK\$1NATIONAL\$1INSURANCE\$1NUMBER |  Le National Insurance Number (NINO) est un numéro utilisé au Royaume-Uni pour identifier une personne inscrite au régime national d'assurance ou au système de sécurité sociale. Ce numéro est parfois appelé NI No ou NINO.  | 
| UK\$1PASSPORT\$1NUMBER |  Le numéro de passeport du Royaume-Uni (UK).  | 
| UK\$1UNIQUE\$1TAXPAYER\$1REFERENCE\$1NUMBER |  Numéro de référence fiscale (UTR) du Royaume-Uni. Identifiant utilisé par le gouvernement du Royaume-Uni pour gérer le système fiscal.   | 
| UK\$1VALUE\$1ADDED\$1TAX |  La TVA est une taxe à la consommation qui est prise en charge par le consommateur final. La TVA est payée pour chaque transaction du processus de fabrication et de distribution. Pour le Royaume-Uni, le numéro de TVA est délivré par le bureau de TVA de la région dans laquelle l'entreprise est établie.  | 
| UK\$1PHONE\$1NUMBER |  Le numéro de téléphone du Royaume-Uni (UK).  | 

 **Types de données pour le Venezuela** 


| Type de données | Description | 
| --- | --- | 
| VENEZUELA\$1DRIVING\$1LICENSE |  Le numéro de permis de conduire (spécifique au Venezuela).  | 
| VENEZUELA\$1NATIONAL\$1IDENTIFICATION\$1NUMBER |  Le numéro d'identifiant national (spécifique au Venezuela).  | 
| VENEZUELA\$1VALUE\$1ADDED\$1TAX |  La taxe sur la valeur ajoutée (spécifique au Venezuela).  | 

# Utilisation d'une détection détaillée des données sensibles
<a name="sensitive-data-fine-grained-actions"></a>

**Note**  
 Les actions détaillées ne sont disponibles que dans les versions AWS Glue 3.0 et 4.0. Cela inclut l'expérience AWS Glue Studio. Les modifications persistantes du journal d'audit ne sont pas non plus disponibles dans la version 2.0.   
 Tous les travaux visuels des versions AWS Glue Studio 3.0 et 4.0 seront accompagnés d'un script créé qui utilise automatiquement des actions précises. APIs 

 La transformation Detect Sensitive Data permet de détecter, de masquer ou de supprimer des entités que vous définissez ou qui sont prédéfinies par AWS Glue. Les actions détaillées vous permettent en outre d'appliquer une action spécifique par entité. Les avantages supplémentaires incluent : 
+  Performances améliorées, car les actions sont appliquées dès que des données sont détectées. 
+  La possibilité d'inclure ou exclure des colonnes spécifiques. 
+  La possibilité d'utiliser un masquage partiel. Cela vous permet de masquer partiellement les entités de données sensibles détectées, plutôt que de masquer la chaîne entière. Les deux paramètres simples avec décalages et regex sont pris en charge. 

 Vous trouverez ci-dessous des extraits de code relatifs à la détection de données sensibles APIs et des actions détaillées utilisées dans les exemples de tâches mentionnés dans la section suivante. 

 **API de détection** : les actions détaillées utilisent le nouveau paramètre `detectionParameters` : 

```
def detect(
    frame: DynamicFrame,
    detectionParameters: JsonOptions,
    outputColumnName: String = "DetectedEntities",
    detectionSensitivity: String = "LOW"
): DynamicFrame = {}
```

## Utilisation de la détection des données sensibles APIs avec des actions précises
<a name="sensitive-data-fine-grained-actions-glue-jobs"></a>

 **La détection des données sensibles APIs à l'aide de la fonction de détection analyse les données fournies, détermine si les lignes ou les colonnes sont des types d'entités de données sensibles et exécute les actions spécifiées par l'utilisateur pour chaque type d'entité.** 

### Utilisation de l'API de détection avec des actions détaillées
<a name="sensitive-data-fine-grained-actions-glue-jobs-detect"></a>

 Utilisez l'API de **détection** et spécifiez le `outputColumnName` et ` detectionParameters`. 

```
    object GlueApp {
      def main(sysArgs: Array[String]) {
      
        val spark: SparkContext = new SparkContext()
        val glueContext: GlueContext = new GlueContext(spark)
        
        // @params: [JOB_NAME]
        val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
        Job.init(args("JOB_NAME"), glueContext, args.asJava)
        
        // Script generated for node S3 bucket. Creates DataFrame from data stored in S3.
        val S3bucket_node1 = glueContext.getSourceWithFormat(formatOptions=JsonOptions("""{"quoteChar": "\"", "withHeader": true, "separator": ",", "optimizePerformance": false}"""), connectionType="s3", format="csv", options=JsonOptions("""{"paths": ["s3://189657479688-ddevansh-pii-test-bucket/tiny_pii.csv"], "recurse": true}"""), transformationContext="S3bucket_node1").getDynamicFrame()
     
        // Script generated for node Detect Sensitive Data. Will run detect API for the DataFrame
        // detectionParameter contains information on which EntityType are being detected
        // and what actions are being applied to them when detected. 
        val DetectSensitiveData_node2 = EntityDetector.detect(
            frame = S3bucket_node1, 
            detectionParameters = JsonOptions(
             """
                {
                    "PHONE_NUMBER": [
                        {
                            "action": "PARTIAL_REDACT",
                            "actionOptions": {
                                "numLeftCharsToExclude": "3",
                                "numRightCharsToExclude": "4",
                                "redactChar": "#"
                            },
                            "sourceColumnsToExclude": [ "Passport No", "DL NO#" ]
                        }
                    ],
                    "USA_PASSPORT_NUMBER": [
                        {
                            "action": "SHA256_HASH",
                            "sourceColumns": [ "Passport No" ]
                        }
                    ],
                    "USA_DRIVING_LICENSE": [
                        {
                            "action": "REDACT",
                            "actionOptions": {
                                "redactText": "USA_DL"
                            },
                            "sourceColumns": [ "DL NO#" ]
                        }
                    ]
                    
                }
            """
            ),
            outputColumnName = "DetectedEntities"
        )
     
        // Script generated for node S3 bucket. Store Results of detect to S3 location
        val S3bucket_node3 = glueContext.getSinkWithFormat(connectionType="s3", options=JsonOptions("""{"path": "s3://amzn-s3-demo-bucket/test-output/", "partitionKeys": []}"""), transformationContext="S3bucket_node3", format="json").writeDynamicFrame(DetectSensitiveData_node2)
     
        Job.commit()
      }
```

 Le script ci-dessus créera un DataFrame depuis un emplacement dans Amazon S3, puis exécutera l'`detect`API. Comme l'`detect`API exige que le champ `detectionParameters` (une carte du nom de l'entité avec une liste de tous les paramètres d'action à utiliser pour cette entité) soit représenté par l'`JsonOptions`objet de AWS Glue, cela nous permettra également d'étendre les fonctionnalités de l'API. 

 Pour chaque action spécifiée par entité, entrez une liste de tous les noms de colonnes auxquels appliquer la entity/action combinaison. Cela vous permet de personnaliser les entités à détecter pour chaque colonne de votre jeu de données et d'ignorer les entités dont vous savez qu'elles ne figurent pas dans une colonne spécifique. Cela permet également à vos tâches d'être plus performantes en n'effectuant pas d'appels de détection inutiles à ces entités et en vous permettant d'effectuer des actions uniques pour chaque combinaison de colonnes et d'entités. 

 En examinant de plus près les `detectionParameters`, il existe trois types d'entités dans l'exemple de tâche. Il s'agit des `Phone Number`, `USA_PASSPORT_NUMBER`, et `USA_DRIVING_LICENSE`. Pour chacun de ces types d'entités, AWS Glue exécutera différentes actions, à `PARTIAL_REDACT` savoir`SHA256_HASH`,`REDACT`, et`DETECT`. Chacun des types d'entités doit également s'`sourceColumns`appliquer and/or `sourceColumnsToExclude` s'il est détecté. 

**Note**  
 Une seule edit-in-place action (`PARTIAL_REDACT``SHA256_HASH`, ou`REDACT`) peut être utilisée par colonne, mais l'`DETECT`action peut être utilisée avec n'importe laquelle de ces actions. 

 La disposition du champ `detectionParameters` est la suivante : 

```
    ENTITY_NAME -> List[Actions]
    {
    	"ENTITY_NAME": [{
    		Action, // required
    		ColumnSpecs,
    		ActionOptionsMap
        }],
        "ENTITY_NAME2": [{
    		...
        }]
    }
```

 Les types d'`actions` et `actionOptions` sont répertoriés ci-dessous : 

```
DETECT
{
    # Required
    "action": "DETECT",
    # Optional, depending on action chosen
    "actionOptions": {
        // There are no actionOptions for DETECT 
    },
    # 1 of below required, both can also used
    "sourceColumns": [
        "COL_1", "COL_2", ..., "COL_N"
    ],
    "sourceColumnsToExclude": [
        "COL_5"
    ]
}

SHA256_HASH
{
    # Required
    "action": "SHA256_HASH",
    # Required or optional, depending on action chosen
    "actionOptions": {
        // There are no actionOptions for SHA256_HASH
    },
    
    # 1 of below required, both can also used
    "sourceColumns": [
        "COL_1", "COL_2", ..., "COL_N"
    ],
    "sourceColumnsToExclude": [
        "COL_5"
    ]
}

REDACT
{
    # Required
    "action": "REDACT",
    # Required or optional, depending on action chosen
    "actionOptions": {
        // The text that is being replaced
        "redactText": "USA_DL"
    },
    
    # 1 of below required, both can also used
    "sourceColumns": [
        "COL_1", "COL_2", ..., "COL_N"
    ],
    "sourceColumnsToExclude": [
        "COL_5"
    ]
}

PARTIAL_REDACT
{
    # Required
    "action": "PARTIAL_REDACT",
    # Required or optional, depending on action chosen
    "actionOptions": {
        // number of characters to not redact from the left side 
        "numLeftCharsToExclude": "3",
        // number of characters to not redact from the right side
        "numRightCharsToExclude": "4",
        // the partial redact will be made with this redacted character  
        "redactChar": "#",
        // regex pattern for partial redaction
        "matchPattern": "[0-9]"
    },
    
    # 1 of below required, both can also used
    "sourceColumns": [
        "COL_1", "COL_2", ..., "COL_N"
    ],
    "sourceColumnsToExclude": [
        "COL_5"
    ]
}
```

 Une fois le script exécuté, les résultats sont envoyés à l'emplacement Amazon S3 indiqué. Vous pouvez afficher vos données dans Amazon S3, mais les types d'entités sélectionnés sont sensibilisés en fonction de l'action sélectionnée. Dans ce cas, nous aurions une ligne qui ressemblerait à ceci : 

```
{
    "Name": "Colby Schuster",
    "Address": "39041 Antonietta Vista, South Rodgerside, Nebraska 24151",
    "Car Owned": "Fiat",
    "Email": "Kitty46@gmail.com",
    "Company": "O'Reilly Group",
    "Job Title": "Dynamic Functionality Facilitator",
    "ITIN": "991-22-2906",
    "Username": "Cassandre.Kub43",
    "SSN": "914-22-2906",
    "DOB": "2020-08-27",
    "Phone Number": "1-2#######1718",
    "Bank Account No": "69741187",
    "Credit Card Number": "6441-6289-6867-2162-2711",
    "Passport No": "94f311e93a623c72ccb6fc46cf5f5b0265ccb42c517498a0f27fd4c43b47111e",
    "DL NO#": "USA_DL"
}
```

 Dans le script ci-dessus, le `Phone Number` a été partiellement expurgé avec `#`. `Passport No`Il a été transformé en SHA256 hachage. Le `DL NO# ` a été détecté comme un numéro de permis de conduire américain et a été expurgé en « USA\$1DL », comme indiqué dans les `detectionParameters`. 

**Note**  
 L'API classifyColumns n'est pas disponible pour une utilisation avec des actions détaillées en raison de la nature de l'API. Cette API effectue un échantillonnage de colonnes (ajustable par l'utilisateur mais possède des valeurs par défaut) pour effectuer la détection plus rapidement. Pour cette raison, les actions détaillées nécessitent une itération sur chaque valeur. 

### Journal d'audit permanent
<a name="sensitive-data-fine-grained-actions-persistent-audit-log"></a>

 Une nouvelle fonctionnalité introduite avec des actions précises (mais également disponible en cas d'utilisation normale APIs) est la présence d'un journal d'audit permanent. Actuellement, l'exécution de l'API de détection ajoute un paramètre de colonne supplémentaire (par défaut `DetectedEntities` mais personnalisable via le `outputColumnName`) avec les métadonnées de détection des informations personnelles identifiables. Cela possède désormais une clé de métadonnées « actionUsed », qui est l'une des valeurs `DETECT`, `PARTIAL_REDACT`, `SHA256_HASH`, `REDACT`. 

```
"DetectedEntities": {
    "Credit Card Number": [
        {
            "entityType": "CREDIT_CARD",
            "actionUsed": "DETECT",
            "start": 0,
            "end": 19
        }
    ],
    "Phone Number": [
        {
            "entityType": "PHONE_NUMBER",
            "actionUsed": "REDACT",
            "start": 0,
            "end": 14
        }
    ]
}
```

 Même les clients qui n'ont APIs pas recours à des actions précises, telles que celles-ci, `detect(entityTypesToDetect, outputColumnName)` verront ce journal d'audit permanent s'afficher dans la trame de données qui en résulte. 

 Les clients utilisant APIs des actions détaillées verront toutes les actions, qu'elles soient expurgées ou non. Exemple : 

```
+---------------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Credit Card Number  |  Phone Number  |                                                                                            DetectedEntities                                                                                             |
+---------------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 622126741306XXXX    | +12#####7890   | {"Credit Card Number":[{"entityType":"CREDIT_CARD","actionUsed":"PARTIAL_REDACT","start":0,"end":16}],"Phone Number":[{"entityType":"PHONE_NUMBER","actionUsed":"PARTIAL_REDACT","start":0,"end":12}]}} |
| 6221 2674 1306 XXXX | +12#######7890 | {"Credit Card Number":[{"entityType":"CREDIT_CARD","actionUsed":"PARTIAL_REDACT","start":0,"end":19}],"Phone Number":[{"entityType":"PHONE_NUMBER","actionUsed":"PARTIAL_REDACT","start":0,"end":14}]}} |
| 6221-2674-1306-XXXX | 22#######7890  | {"Credit Card Number":[{"entityType":"CREDIT_CARD","actionUsed":"PARTIAL_REDACT","start":0,"end":19}],"Phone Number":[{"entityType":"PHONE_NUMBER","actionUsed":"PARTIAL_REDACT","start":0,"end":14}]}} |
+---------------------+----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
```

 Si vous ne souhaitez pas voir la **DetectedEntities**colonne, vous pouvez simplement supprimer la colonne supplémentaire dans un script personnalisé. 

# API Visual Job AWS Glue
<a name="visual-job-api-chapter"></a>

 AWS Glue fournit une API qui vous autorise à créer des tâches d'intégration de données à l'aide de l'API AWS Glue à partir d'un objet JSON qui représente un flux de travail visuel par étapes. Les clients peuvent ensuite utiliser l'éditeur visuel dans AWS Glue Studio pour travailler avec ces tâches. 

 Pour plus d'informations sur le types de données de l'API Visual Job, voir [API Visual Job](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-visual-job-api.html). 

**Topics**
+ [

## Conception d'API et CRUD APIs
](#visual-job-api-design)
+ [

## Prise en main
](#getting-started-visual-job-api)
+ [

## Limitations de tâche visuelle
](#visual-job-limitations)

## Conception d'API et CRUD APIs
<a name="visual-job-api-design"></a>

 Les CreateJob et prennent UpdateJob [ APIs ](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html)désormais en charge un paramètre optionnel supplémentaire, codeGenConfiguration les nœuds. Si vous fournissez une structure JSON non vide pour ce champ, le DAG sera enregistré dans AWS Glue Studio pour la tâche créée et le code associé généré. Une valeur null ou une chaîne vide pour ce champ lors de la création de la tâche sera ignorée. 

 Les mises à jour du champ codeGenConfiguration Nodes seront effectuées via l' UpdateJob AWS GlueAPI de la même manière que CreateJob. Le champ entier doit être spécifié UpdateJob là où le DAG a été modifié comme vous le souhaitez. Une valeur null fournie sera ignorée et aucune mise à jour du DAG ne sera effectuée. Une structure ou une chaîne vide entraînera la définition codeGenConfiguration des nœuds comme vides et la suppression de tout DAG précédent. L' GetJob API renverra un DAG s'il en existe un. L' DeleteJob API supprimera également tout DAG associé. 

## Prise en main
<a name="getting-started-visual-job-api"></a>

 Pour créer une tâche, utilisez l'[ CreateJob action](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-CreateJob). L'entrée de `CreateJob` demande comportera un champ supplémentaire « codeGenConfiguration Nodes » dans lequel vous pourrez spécifier l'objet DAG en JSON. 

 Points à garder à l'esprit : 
+  Le champ « codeGenConfiguration Nodes » est une carte entre NodeID et nœud. 
+  Chaque nœud commence par une clé identifiant de quel type de nœud il s'agit. 
+  Il ne peut y avoir qu'une seule clé spécifiée car un nœud ne peut être que d'un seul type. 
+  Le champ de saisie contient les nœuds parents du nœud actuel. 

 Ce qui suit est une représentation JSON d'une **CreateJob**entrée. 

```
{
  "node-1": {
    "S3CatalogSource": {
      "Table": "csvFormattedTable",
      "PartitionPredicate": "",
      "Name": "S3 bucket",
      "AdditionalOptions": {},
      "Database": "myDatabase"
    }
  },
  "node-3": {
    "S3DirectTarget": {
      "Inputs": ["node-2"],
      "PartitionKeys": [],
      "Compression": "none",
      "Format": "json",
      "SchemaChangePolicy": { "EnableUpdateCatalog": false },
      "Path": "",
      "Name": "S3 bucket"
    }
  },
  "node-2": {
    "ApplyMapping": {
      "Inputs": ["node-1"],
      "Name": "ApplyMapping",
      "Mapping": [
        {
          "FromType": "long",
          "ToType": "long",
          "Dropped": false,
          "ToKey": "myheader1",
          "FromPath": ["myheader1"]
        },
        {
          "FromType": "long",
          "ToType": "long",
          "Dropped": false,
          "ToKey": "myheader2",
          "FromPath": ["myheader2"]
        },
        {
          "FromType": "long",
          "ToType": "long",
          "Dropped": false,
          "ToKey": "myheader3",
          "FromPath": ["myheader3"]
        }
      ]
    }
  }
}
```

 ** Mise à jour et obtention de tâches ** 

 Comme il *UpdateJob*y aura également un champ « codeGenConfiguration Nœuds », le format de saisie sera le même. Voir [ UpdateJob](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-UpdateJob)Action. 

 L'*GetJob*action renverra également un champ « codeGenConfiguration Nœuds » dans le même format. Voir [ GetJob](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-GetJob)Action. 

## Limitations de tâche visuelle
<a name="visual-job-limitations"></a>

 Étant donné que le paramètre codeGenConfiguration « Nodes » a été ajouté au paramètre existant APIs, toutes les limites de celui-ci APIs seront héritées. De plus, la taille des codeGenConfiguration nœuds et de certains nœuds sera limitée. Pour plus d'informations, voir [ Structure de tâche ](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-jobs-job.html#aws-glue-api-jobs-job-Job). 