Importer un fichier CSV

Cette page explique comment importer des données à partir d'un fichier CSV stocké dans un bucket Cloud Storage dans un cluster AlloyDB pour PostgreSQL.

Vous pouvez annuler l'importation de données dans des clusters AlloyDB. Pour en savoir plus, consultez la section Annuler une opération d'importation.

Avant de commencer

Avant de lancer une opération d'importation, procédez comme suit :

  • Assurez-vous que votre base de données dispose d'un espace de stockage suffisant.
  • Les opérations d'importation utilisent des ressources de base de données, mais elles n'interfèrent pas avec les opérations de base de données normales, sauf si le cluster est sous-provisionné.

Rôles et autorisations requis pour l'importation dans des clusters AlloyDB

Pour importer des données de Cloud Storage dans AlloyDB, l'utilisateur qui lance l'importation doit disposer de l'un des rôles suivants :

De plus, le compte de service du cluster AlloyDB doit disposer de l'un des rôles suivants :

  • Le rôle IAM storage.objectViewer
  • Un rôle personnalisé comprenant les autorisations suivantes :
    • storage.objects.get

Pour obtenir de l'aide sur les rôles IAM, consultez la page Identity and Access Management.

Importer des données à partir d'un fichier CSV dans des clusters AlloyDB

  • La base de données et la table dans lesquelles vous importez des données doivent exister sur votre cluster AlloyDB. Pour obtenir de l'aide sur la création d'une base de données, consultez la section Créer une base de données.
  • Les fichiers CSV doivent comporter une ligne par rangée de données ainsi que des champs séparés par une virgule.

Pour importer des données dans un cluster AlloyDB à l'aide d'un fichier CSV, procédez comme suit :

Console

  1. Accédez à la page Clusters.

    Accéder aux clusters

  2. Cliquez sur le nom d'un cluster pour ouvrir la page Présentation de ce cluster.

  3. Cliquez sur Importer.

  4. Dans Format de fichier, sélectionnez CSV.

  5. Dans Sélectionner le fichier source, indiquez si vous souhaitez importer des fichiers depuis votre ordinateur ou sélectionner un fichier à partir d'un emplacement Cloud Storage.

    1. Pour importer un fichier depuis votre ordinateur, procédez comme suit :

      1. Sélectionnez Importer des fichiers depuis votre ordinateur.
      2. Cliquez sur Parcourir à côté de Sélectionner un fichier local pour sélectionner un fichier CSV sur votre ordinateur local.
      3. Cliquez sur Parcourir à côté de Sélectionner un emplacement Cloud Storage pour sélectionner un emplacement Cloud Storage dans lequel stocker le fichier local importé.
      4. Cliquez sur Importer pour importer le fichier.
    2. Pour sélectionner un fichier CSV qui existe dans un bucket Cloud Storage, procédez comme suit :

      1. Sélectionnez Sélectionner un fichier dans Google Cloud Storage.
      2. Cliquez sur Parcourir à côté de nom-du-bucket/nom-du-fichier pour sélectionner un fichier CSV dans un bucket Cloud Storage.
  6. Sélectionnez la base de données dans laquelle vous souhaitez importer les données dans le menu déroulant Base de données.

  7. Sélectionnez la table dans la base de données dans le menu déroulant Table.

  8. Facultatif. Pour spécifier un utilisateur pour l'opération d'importation, cliquez sur Afficher les options utilisateur , puis saisissez le nom d'utilisateur dans le champ Utilisateur.

  9. Pour lancer l'opération d'importation, cliquez sur Importer.

gcloud

  1. Créez un bucket Cloud Storage.
  2. Importez le fichier CSV dans le bucket. Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.
  3. Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le storage.objectViewer rôle IAM au compte de service AlloyDB pour le bucket.

     service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com

    Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.

  4. Importez le fichier :

    gcloud alloydb clusters import CLUSTER_NAME --region=REGION --gcs-uri=gs://BUCKET_NAME/FILE_NAME --database=DATABASE_NAME --user=USER --csv --table=TABLE_NAME

    Effectuez les remplacements suivants :

    • CLUSTER_NAME : nom du cluster.
    • REGION : région dans laquelle le cluster AlloyDB est déployé.
    • BUCKET_NAME : nom du bucket Cloud Storage.
    • FILE_NAME : nom du fichier CSV.
    • DATABASE_NAME : nom d'une base de données dans le cluster.
    • USER: utilisateur pour l'opération d'importation.
    • TABLE_NAME : table dans la base de données.

    Pour plus d'informations sur l'utilisation de la importcommande, consultez la alloydb import page de référence de la commande.

  5. Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les à l'aide de gcloud storage buckets remove-iam-policy-binding.

REST v1

  1. Créez un bucket Cloud Storage.
  2. Importez le fichier CSV dans le bucket. Pour obtenir de l'aide concernant l'importation de fichiers dans des buckets, consultez la page Importer des objets.
  3. Accordez au compte de service des autorisations sur le bucket Cloud Storage pour l'opération d'importation. Utilisez le format du compte de service pour identifier le compte de service du projet dans lequel vous effectuez l'importation. Le format du compte de service est le suivant :

    service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
  4. Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le storage.objectViewer rôle IAM au compte de service du cluster AlloyDB pour le bucket. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.

  5. Importez le fichier.

    Utilisez la méthode et l'URL HTTP suivantes :

    POST https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_ID:import

    Avant d'utiliser les données de la requête, effectuez les remplacements suivants :

    • PROJECT_ID : ID du projet.
    • LOCATION_ID : région dans laquelle le cluster AlloyDB est déployé.
    • CLUSTER_ID : ID du cluster.
    • BUCKET_NAME : nom du bucket Cloud Storage.
    • PATH_TO_CSV_FILE : chemin d'accès au fichier CSV.
    • USER: utilisateur pour l'opération d'importation.
    • DATABASE_NAME : nom d'une base de données dans le cluster AlloyDB.
    • TABLE_NAME : table dans la base de données.
    • COLUMNS (facultatif) : colonnes à importer.
    • ESCAPE_CHARACTER (facultatif) : caractère qui doit apparaître avant un caractère de données à échapper. La valeur de cet argument doit être un caractère en code ASCII hexadécimal. Par exemple, 22 représente un guillemet double.
    • QUOTE_CHARACTER (facultatif) : caractère qui entoure les valeurs des colonnes dont le type de données est une chaîne. La valeur de cet argument doit être un caractère en code ASCII hexadécimal. Par exemple, 22 représente un guillemet double.
    • FIELD_DELIMITER (facultatif) : caractère qui divise les valeurs des colonnes. La valeur de cet argument doit être un caractère en code ASCII hexadécimal. Par exemple, 2C représente une virgule.

    Corps JSON de la requête :

    {
      "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
      "database": "DATABASE_NAME",
      "user": "USER",
      "csvImportOptions": {
        "table": "TABLE_NAME",
        "columns": ["COLUMN1", "COLUMN2"],
        "fieldDelimiter": "FIELD_DELIMITER",
        "quoteCharacter": "QUOTE_CHARACTER",
        "escapeCharacter": "ESCAPE_CHARACTER"
      }
    }
    

    Pour envoyer votre requête, développez l'une des options suivantes :

    curl (Linux, macOS ou Cloud Shell)

    Enregistrez le corps de la requête dans un fichier nommé request.json , puis exécutez la commande suivante :

       curl -X POST \
             -H "Authorization: Bearer $(gcloud auth print-access-token)" \
             -H "Content-Type: application/json; charset=utf-8" \
             -d @request.json \
             "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import"
    

    PowerShell (Windows)

    Enregistrez le corps de la requête dans un fichier nommé request.json et exécutez la commande suivante :

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }
    
    Invoke-WebRequest `
      -Method POST `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile request.json `
      -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID:import"| Select-Object -Expand Content
    

    Vous recevez une réponse JSON de ce type :

    Réponse

    {
     "name": "projects/PROJECT_ID/locations/LOCATION_ID/operations/OPERATION_ID",
     "metadata": {
      "@type": "type.googleapis.com/google.cloud.alloydb.v1.OperationMetadata",
      "createTime": "2024-09-17T06:05:31.244428646Z",
      "target": "projects/project-id/locations/location-id/clusters/target-cluster",
      "verb": "import",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
    
  6. Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les maintenant.

    Pour obtenir la liste complète des paramètres de la requête, consultez clusters:import.

Personnaliser le format CSV et importer le fichier

Vous pouvez personnaliser le format CSV et importer le fichier lorsque le fichier CSV contient un délimiteur de champ, un guillemet ou des caractères d'échappement non définis par défaut. Pour importer un fichier CSV avec un format non défini par défaut, vous devez fournir les mêmes options de mise en forme dans la requête.

Utilisez les exemples suivants de gcloud CLI et d'API REST pour personnaliser le format de votre fichier CSV.

gcloud

gcloud alloydb clusters import CLUSTER_NAME --region=REGION --database=DATABASE_NAME --gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' --user=USERNAME --table=TABLE_NAME --columns=COLUMNS --field-delimiter='2C' --quote-character='22' --escape-character='5C' --csv

REST v1

Le corps de la requête API REST équivalente se présente comme suit :

{
 "gcsUri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE",
 "database": "DATABASE_NAME",
 "user": "USER",
 "csvImportOptions": {
     "table": "TABLE_NAME",
     "columns": ["COLUMN1", "COLUMN2"],
     "escapeCharacter": "5C",
     "quoteCharacter": "22",
     "fieldDelimiter": "2C",
 }
}

Pour découvrir comment est formée la requête sous-jacente à l'API REST pour cette tâche, consultez la page dédiée à la méthode dans APIs Explorer.clusters:import

Si vous recevez une erreur de type INVALID_ARGUMENT, assurez-vous que la table existe. Si la table existe, vérifiez que vous disposez des autorisations appropriées sur le bucket. Pour vous aider à configurer le contrôle des accès dans Cloud Storage, consultez la page Créer et gérer des listes de contrôle d'accès.

Vérifier l'état d'une opération d'importation

Pour vérifier l'état d'une opération d'importation, procédez comme suit :

gcloud

Exécutez la commande suivante à l'aide de la commande gcloud alloydb operations describe :

gcloud alloydb operations describe OPERATION_ID --region=REGION

L'état de ces opérations est indiqué dans le champ STATUS.

Vous pouvez également répertorier les détails d'une opération spécifique ou annuler une opération spécifique. Pour plus d'informations sur cette commande, consultez la gcloud alloydb operations page de référence de la commande.

REST v1

Utilisez la méthode GET et l'URL suivante :

GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID

Pour en savoir plus, consultez get.

Avant d'utiliser les données de la requête, effectuez les remplacements suivants :

  • REGION : région dans laquelle le cluster AlloyDB est déployé.
  • PROJECT_ID : ID du projet.
  • OPERATION_ID : ID de l'opération d'importation. Pour en savoir plus, consultez Avant de commencer.

Pour envoyer votre requête, développez l'une des options suivantes :

curl (Linux, macOS ou Cloud Shell)

Exécutez la commande suivante :

  curl -X GET \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
 

PowerShell (Windows)

Exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
  -Method GET `
  -Headers $headers `
  -Uri "https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID | Select-Object -Expand Content

Vous recevez une réponse JSON de ce type :

Si la requête aboutit, le corps de la réponse contient une instance de Opération.

Étape suivante