

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.

# Chargement de données dans Aurora DSQL
<a name="loading-data"></a>

Que vous effectuiez une migration depuis une base de données existante, que vous importiez des fichiers depuis Amazon Simple Storage Service ou que vous chargiez des données depuis votre système local, Aurora DSQL propose plusieurs approches pour intégrer vos données. Cette section décrit les outils et techniques recommandés pour les chargements de données de toutes tailles, des gigaoctets aux centaines de téraoctets.

## Choisir une approche de chargement
<a name="loading-data-options"></a>

Aurora DSQL prend en charge les commandes de chargement de données PostgreSQL standard, mais le chargement efficace des données à grande échelle nécessite de gérer la parallélisation, la gestion des connexions et la récupération des erreurs. Le tableau suivant récapitule vos options :


| Approche | Idéal pour | Considérations | 
| --- | --- | --- | 
| Aurora DSQL Loader - Utilitaire open source qui facilite la parallélisation des inserts lors de l'utilisation d'Aurora DSQL | La plupart des scénarios de chargement de données, en particulier les migrations et les importations groupées | Gère automatiquement la parallélisation, le regroupement des connexions, la résolution des conflits et l'authentification IAM. Disponible sous forme de code source ou binaire. | 
| \\copyPostgreSQL - Méta-commande côté client psql | Chargements simples lorsque vous êtes déjà connecté via psql | Lit les fichiers sur le client et diffuse les données via la connexion ; vous gérez vous-même la parallélisation | 
| INSERTtransactions - Standard SQL DML | Petits ensembles de données ou encarts pilotés par des applications | Approche la plus simple mais la plus lente pour les données en masse | 

Pour la plupart des tâches de chargement de données, utilisez le chargeur SQL Aurora. Il gère la complexité opérationnelle liée au chargement de données dans une base de données distribuée, y compris l'exécution parallèle sur plusieurs connexions et la rétentative automatique en cas d'échec des opérations.

## Chargeur SQL Aurora
<a name="aurora-dsql-loader"></a>

L'[Aurora DSQL Loader](https://github.com/aws-samples/aurora-dsql-loader) est un utilitaire de ligne de commande open source conçu pour charger efficacement des données dans des clusters Aurora DSQL. Il gère le regroupement des connexions, parallélise le transfert de données entre plusieurs travailleurs, gère les conflits et réessaie automatiquement.

### Fonctions principales
<a name="aurora-dsql-loader-features"></a>

Le chargeur Aurora DSQL fournit les fonctionnalités suivantes :

**Chargement parallèle**  
Les threads de travail configurables permettent le chargement simultané des données sur plusieurs connexions pour améliorer les performances.

**Regroupement de connexions**  
Gère un pool de connexions à votre cluster SQL Aurora, en gérant automatiquement l'authentification IAM et le cycle de vie des connexions.

**Support de plusieurs formats de fichiers**  
Supporte les formats CSV (valeurs séparées par des virgules), TSV (valeurs séparées par des tabulations) et Apache Parquet en colonnes. Le chargeur détecte automatiquement le format de fichier en fonction de l'extension d'URI source.

**Inférence de schéma automatique**  
Lorsqu'il est utilisé avec l'`--if-not-exists`indicateur, le chargeur peut créer automatiquement des tables avec les types de colonnes appropriés en fonction des données.

**Gestion des conflits**  
Lorsque votre table cible comporte des contraintes uniques, configurez la manière dont le chargeur gère les conflits à l'aide de l'`--on-conflict`option suivante : ignorer les doublons, modifier les enregistrements ou renvoyer une erreur.

**Tolérance aux pannes**  
Les nouvelles tentatives automatiques et les fonctionnalités de reprise des tâches garantissent que les chargements interrompus peuvent continuer à partir de leur point d'arrêt plutôt que de redémarrer complètement.

**Sources locales et S3**  
Chargez des données à partir de chemins de système de fichiers locaux ou directement à partir de compartiments Amazon S3 à l'aide de S3 URIs.

### Conditions préalables
<a name="aurora-dsql-loader-prerequisites"></a>

Avant d'utiliser le chargeur DSQL Aurora, assurez-vous de disposer des éléments suivants :
+ Un cluster Aurora DSQL actif avec un point de terminaison valide.
+ AWS informations d'identification configurées via les **aws configure** rôles AWS CLI (), AWS Single Sign-On (**aws sso login**) ou IAM.
+ Autorisations IAM : `dsql:DbConnectAdmin` ou `dsql:DbConnect` sur votre cluster SQL Aurora.
+ Pour les sources S3, autorisations appropriées pour lire depuis le compartiment source.

### Installation
<a name="aurora-dsql-loader-installation"></a>

Téléchargez la dernière version depuis la [page GitHub des versions](https://github.com/aws-samples/aurora-dsql-loader/releases/latest). Des fichiers binaires prédéfinis sont disponibles pour les plateformes courantes. Pour obtenir des instructions sur la création à partir des sources, consultez le [référentiel Aurora DSQL Loader](https://github.com/aws-samples/aurora-dsql-loader).

### Exemples d’utilisation
<a name="aurora-dsql-loader-usage"></a>

Les exemples suivants illustrent les cas d'utilisation courants de l'Aurora DSQL Loader.

**Example Chargement d'un fichier CSV local**  <a name="aurora-dsql-loader-example-basic"></a>
Cet exemple charge un fichier CSV depuis votre système de fichiers local dans une table existante :  

```
aurora-dsql-loader load \
  --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
  --source-uri {{data.csv}} \
  --table {{my_table}}
```

**Example Chargement des données à partir d’Amazon S3**  <a name="aurora-dsql-loader-example-s3"></a>
Cet exemple charge un fichier Parquet depuis un compartiment Amazon S3 :  

```
aurora-dsql-loader load \
  --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
  --source-uri s3://{{my-bucket}}/{{data.parquet}} \
  --table {{my_table}}
```

**Example Création automatique de tables**  <a name="aurora-dsql-loader-example-create-table"></a>
Cet exemple crée automatiquement une nouvelle table en fonction du schéma de données :  

```
aurora-dsql-loader load \
  --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
  --source-uri {{data.csv}} \
  --table {{my_table}} \
  --if-not-exists
```

**Example Validation avant le chargement**  <a name="aurora-dsql-loader-example-dry-run"></a>
Cet exemple valide votre configuration sans charger réellement de données :  

```
aurora-dsql-loader load \
  --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
  --source-uri {{data.csv}} \
  --table {{my_table}} \
  --dry-run
```

**Example Reprise d'un chargement interrompu**  <a name="aurora-dsql-loader-example-resume"></a>
Si une opération de chargement est interrompue, vous pouvez la reprendre en utilisant l'ID de tâche de l'exécution précédente :  

```
aurora-dsql-loader load \
  --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
  --source-uri {{data.csv}} \
  --table {{my_table}} \
  --resume-job-id {{job-id}} \
  --manifest-dir {{./loader-state}}
```
À la reprise, le chargeur ignore la plupart des tâches déjà effectuées, mais peut réessayer certains enregistrements. Si votre table cible comporte des contraintes uniques, utilisez l'`--on-conflict`option permettant de gérer les doublons, par exemple pour les ignorer ou `DO NOTHING` pour les remplacer. `DO UPDATE`

### Options de ligne de commande
<a name="aurora-dsql-loader-options"></a>

Le chargeur Aurora DSQL prend en charge les options de ligne de commande suivantes :

`--endpoint`  
(Obligatoire) Le point de terminaison du cluster Aurora DSQL. Exemple : `{{cluster-id}}.dsql.{{region}}.on.aws`

`--source-uri`  
(Obligatoire) Le chemin d'accès au fichier de données. Il peut s'agir d'un chemin de fichier local ou d'un URI S3 (par exemple,`s3://{{bucket-name}}/{{file.parquet}}`).

`--table`  
(Obligatoire) Nom de la table cible dans votre base de données Aurora DSQL.

`--if-not-exists`  
(Facultatif) Créez automatiquement la table cible si elle n'existe pas. Le chargeur déduit le schéma à partir des données.

`--dry-run`  
(Facultatif) Validez la configuration et les données sans les charger réellement dans la base de données.

`--resume-job-id`  
(Facultatif) Reprenez une opération de chargement précédemment interrompue en utilisant l'ID de tâche spécifié.

`--manifest-dir`  
(Facultatif) Répertoire pour stocker l'état des tâches et les manifestes, utilisé pour la reprise des tâches.

`--on-conflict`  
(Facultatif) Spécifie comment gérer les conflits lors de l'insertion de lignes qui enfreignent les contraintes uniques de la table cible. Les valeurs valides sont `error` (renvoyer une erreur), `do-nothing` (ignorer les lignes dupliquées) ou `do-update` (mettre à jour les lignes existantes avec de nouvelles valeurs).

Pour obtenir la liste complète des options et des paramètres de configuration supplémentaires, exécutez :

```
aurora-dsql-loader load --help
```

### Bonnes pratiques
<a name="aurora-dsql-loader-best-practices"></a>
+ **Utilisez la méthode dry-run pour la validation** : testez toujours votre configuration de chargement `--dry-run` avant de charger les données dans les tables de production.
+ **Définissez des contraintes uniques pour la reprise** : si vous devez reprendre des chargements interrompus, définissez des contraintes uniques sur vos tables cibles et utilisez l'`--on-conflict`option pour gérer les enregistrements déjà chargés.
+ **Utilisez Parquet pour les grands ensembles de données** : le format en colonnes de Parquet permet généralement une meilleure compression et un chargement plus rapide pour les grands ensembles de données par rapport au format CSV ou TSV.
+ **Préserver les répertoires des manifestes** : conservez le répertoire des manifestes pour les tâches de chargement jusqu'à ce que vous confirmiez que le chargement s'est bien terminé, en permettant la reprise si nécessaire.
+ **Pré-créez des tables lorsque cela est possible** : définissez la table cible avec des types de données de colonne et des clés primaires explicites avant de charger les données. Les schémas précréés vous permettent de contrôler la précision des types et l'indexation, ce qui se traduit généralement par de meilleures performances de requête par rapport aux schémas déduits automatiquement.

### Résolution des problèmes
<a name="aurora-dsql-loader-troubleshooting"></a>

Erreurs d’authentification  
Vérifiez que vos AWS informations d'identification sont correctement configurées et que votre identité IAM possède les `dsql:DbConnectAdmin` autorisations `dsql:DbConnect` ou les autorisations requises sur le cluster cible.

Erreurs d'accès S3  
Assurez-vous que votre identité IAM dispose des autorisations de lecture S3 appropriées pour le compartiment source et les objets.

Erreurs d'inférence de schéma  
Lorsque vous l'utilisez`--if-not-exists`, assurez-vous que les types de colonnes de votre fichier de données sont cohérents. La combinaison de types dans une colonne peut entraîner l'échec de l'inférence de schéma.

Erreurs clés dupliquées sur le CV  
Si vous rencontrez des erreurs clés dupliquées lors de la reprise d'un chargement, ajoutez des contraintes uniques à votre table cible afin que le chargeur puisse les utiliser `ON CONFLICT DO NOTHING` pour ignorer les enregistrements déjà chargés.

Pour plus d'informations sur le dépannage, consultez le [ GitHub référentiel Aurora DSQL Loader](https://github.com/aws-samples/aurora-dsql-loader).

## Voies de migration
<a name="loading-data-migrations"></a>

Les sections suivantes décrivent comment migrer des données depuis des systèmes sources courants vers Aurora DSQL.

### Migration depuis PostgreSQL
<a name="loading-data-from-postgresql"></a>

Pour migrer des données d'une base de données PostgreSQL existante vers Aurora DSQL :

1. Exportez vos données de PostgreSQL au format CSV ou Parquet. Vous pouvez utiliser la commande `COPY` PostgreSQL pour exporter chaque table :

   ```
   COPY {{my_table}} TO '{{/path/to/my_table.csv}}' WITH (FORMAT csv, HEADER true);
   ```

1. Créez la table cible dans Aurora DSQL. Vous pouvez créer le schéma manuellement ou utiliser l'`--if-not-exists`indicateur du chargeur pour déduire le schéma à partir de vos données.

1. Chargez les données exportées à l'aide du chargeur SQL Aurora :

   ```
   aurora-dsql-loader load \
     --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
     --source-uri {{/path/to/my_table.csv}} \
     --table {{my_table}}
   ```

**Astuce**  
Pour les migrations de grande envergure, pensez à exporter au format Parquet pour une meilleure compression et un chargement plus rapide. Des outils tels que DuckDB peuvent convertir efficacement des fichiers CSV en Parquet.

### Migration depuis MySQL
<a name="loading-data-from-mysql"></a>

Pour migrer des données de MySQL vers Aurora DSQL :

1. Exportez vos données de MySQL au format CSV à l'aide `SELECT INTO OUTFILE` d'un outil comme celui-ci **mysqldump** avec l'`--tab`option :

   ```
   SELECT * FROM {{my_table}}
   INTO OUTFILE '{{/path/to/my_table.csv}}'
   FIELDS TERMINATED BY ','
   ENCLOSED BY '"'
   LINES TERMINATED BY '\n';
   ```

1. Créez la table cible dans Aurora DSQL avec les types de données compatibles PostgreSQL appropriés.

1. Chargez les données exportées à l'aide du chargeur SQL Aurora :

   ```
   aurora-dsql-loader load \
     --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
     --source-uri {{/path/to/my_table.csv}} \
     --table {{my_table}}
   ```

**Note**  
MySQL et PostgreSQL ont des systèmes de types de données différents. Passez en revue votre schéma et ajustez les types de données selon les besoins lors de la création de tables dans Aurora DSQL.

### Chargement depuis Amazon S3
<a name="loading-data-from-s3"></a>

Si vos données se trouvent déjà dans Amazon S3, vous pouvez les charger directement sans les télécharger sur votre système local. L'Aurora DSQL Loader prend en charge S3 de manière URIs native :

```
aurora-dsql-loader load \
  --endpoint {{cluster-id}}.dsql.{{region}}.on.aws \
  --source-uri s3://{{my-bucket}}/{{path/to/data.parquet}} \
  --table {{my_table}}
```

Assurez-vous que votre identité IAM dispose d'une `s3:GetObject` autorisation sur les objets source.

## Utilisation de PostgreSQL \\ copy
<a name="loading-data-copy"></a>

Si vous êtes déjà connecté à Aurora DSQL via une `psql` session qui gère l'authentification IAM, vous pouvez utiliser la `\copy` méta-commande côté client pour charger des données depuis votre système de fichiers local. Contrairement à l'`COPY`instruction côté serveur, `\copy` lit le fichier sur l'ordinateur client et diffuse les données via la connexion existante, de sorte qu'aucun accès au fichier côté serveur n'est requis. Cette approche fonctionne bien pour les chargements simples à thread unique.

**Example Charger un fichier CSV avec \\ copy**  

```
\copy {{my_table}} FROM '{{/path/to/data.csv}}' WITH (FORMAT csv, HEADER true);
```

En cas d'utilisation `\copy` directe, vous êtes responsable de :
+ Gestion de la parallélisation lors du chargement de plusieurs fichiers ou de grands ensembles de données
+ Gestion de la gestion des connexions et de l'actualisation des jetons d'authentification
+ Implémentation d'une logique de nouvelle tentative pour les opérations ayant échoué

### Bonnes pratiques pour les transactions INSERT
<a name="aurora-dsql-insert-best-practices"></a>

Lorsque vous utilisez `INSERT` des instructions pour charger des données dans Aurora DSQL, suivez les pratiques suivantes pour améliorer le débit et la fiabilité :
+ **Répartissez les lignes en plusieurs lignes INSERTs** : regroupez plusieurs lignes dans une seule `INSERT` instruction afin de réduire les allers-retours. Par exemple, `INSERT INTO my_table VALUES (1, 'a'), (2, 'b'), (3, 'c')` est plus efficace que trois instructions distinctes.
+ **Utiliser des requêtes paramétrées** : utilisez des instructions préparées avec une liaison de paramètres au lieu d'une concaténation de chaînes. Cela évite les risques d'injection de code SQL et permet à la base de données de réutiliser les plans de requêtes.
+ **Limitez les transactions** : Aurora DSQL utilise un contrôle de simultanéité optimiste, de sorte que les transactions volumineuses qui touchent de nombreuses lignes sont plus susceptibles de rencontrer des conflits. Optez pour des transactions de quelques centaines de lignes plutôt que de milliers.
+ **Implémenter une logique de nouvelle tentative** : des erreurs transitoires telles que des conflits de contrôle de simultanéité optimiste (OCC) sont attendues dans un système distribué. Implémentez un ralentissement exponentiel avec une nouvelle tentative en cas d'échec des transactions.
+ **Paralléliser les connexions : ouvrez plusieurs connexions** et distribuez des encarts sur celles-ci. Chaque connexion peut traiter simultanément un sous-ensemble différent de données.

Dans la plupart des cas d'utilisation, le chargeur DSQL Aurora fournit une approche plus simple et plus robuste du chargement des données.

## Ressources supplémentaires
<a name="loading-data-more-info"></a>
+ [Aurora DSQL Loader activé GitHub](https://github.com/aws-samples/aurora-dsql-loader) : code source, documentation et suivi des problèmes
+ [Création d’un jeton d’authentification dans Amazon Aurora DSQL](SECTION_authentication-token.md)— En savoir plus sur les jetons d'authentification IAM pour Aurora DSQL
+ [Accès à Aurora DSQL avec des clients compatibles avec PostgreSQL](accessing.md)— Connectez-vous à Aurora DSQL à l'aide de différents clients et outils