Exporter un fichier CSV

Pour extraire des données de table ou de requête à utiliser dans des outils et des environnements externes, vous pouvez exporter des données de clusters AlloyDB pour PostgreSQL vers un bucket Cloud Storage au format CSV.

Pour en savoir plus sur la migration d'une base de données entière d'un serveur de base de données compatible vers une nouvelle instance AlloyDB, consultez Migrer une base de données vers AlloyDB à l'aide de Database Migration Service. Si vous souhaitez créer une instance à partir du fichier exporté, envisagez de restaurer un cluster à partir d'une sauvegarde stockée.

Vous pouvez annuler l'exportation de données à partir de clusters AlloyDB pour PostgreSQL. Pour en savoir plus, consultez Annuler une opération d'exportation.

Avant de commencer

  • Avant de commencer une opération d'exportation, n'oubliez pas que les opérations d'exportation utilisent des ressources de base de données, mais qu'elles n'interfèrent pas avec les opérations de base de données standards, sauf si l'instance est sous-provisionnée.
  • SELECT_QUERY peut contenir des commentaires ou des espaces blancs de début et de fin. Les commentaires sont ignorés et les espaces sont supprimés avant l'exécution de la requête d'exportation.
  • Des frais de transfert de données interrégional s'appliquent lorsque le bucket cible se trouve dans une région différente de celle du cluster source. Pour en savoir plus, consultez la page Tarifs d'AlloyDB pour PostgreSQL.
  • Plusieurs opérations d'exportation peuvent s'exécuter en parallèle.
  • La compression est activée si le nom de l'objet se termine par l'extension .gz. L'objet est ensuite exporté au format .gz vers Cloud Storage.
  • Seuls les caractères ASCII en code hexadécimal (avec ou sans le préfixe 0x) sont autorisés pour les valeurs de caractères dans les options CSV telles que field_delimiter, quote_character et escape_character.

Rôles et autorisations requis pour l'exportation depuis AlloyDB

Pour exporter des données d'AlloyDB vers Cloud Storage, l'utilisateur qui lance l'exportation doit disposer de l'un des rôles IAM (Identity and Access Management) suivants :

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

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

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

Exporter des données vers un fichier CSV

Lors d'une exportation CSV, vous pouvez spécifier les schémas à exporter. Tous les schémas au niveau de la base de données peuvent être exportés.

Vous pouvez utiliser la gcloud CLI ou l'API REST pour personnaliser le format de votre fichier CSV.

gcloud

  1. Créez un bucket Cloud Storage.
  2. Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le rôle IAM storage.objectAdmin au compte de service AlloyDB pour le bucket. Le format du compte de service est le suivant :

    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.

  3. Exportez la base de données vers votre bucket Cloud Storage.

    Exécutez la commande d'exportation au format CSV : gcloud alloydb clusters export.

    La liste suivante décrit les options d'exportation de données au format CSV :

    • --select-query (obligatoire) : requête de sélection utilisée pour extraire les données.
    • --async (facultatif) : renvoie immédiatement une réponse, sans attendre la fin de l'opération en cours.
    • --field-delimiter (facultatif) : spécifie le caractère qui sépare les colonnes de chaque ligne du fichier. La valeur par défaut est la virgule. La valeur de cet argument doit être un caractère au format hexadécimal ASCII.
    • --quote-character (facultatif) : spécifie le caractère de guillemet à utiliser lorsqu'une valeur de données est entre guillemets. La valeur par défaut est un guillemet double. La valeur de cet argument doit être un caractère au format hexadécimal ASCII.
    • --escape-character (facultatif) : spécifie le caractère qui doit apparaître avant un caractère de données devant être échappé. La valeur par défaut est identique à --quote-character. La valeur de cet argument doit être un caractère au format hexadécimal ASCII.

    Pour utiliser ces fonctionnalités, incluez ces options dans la commande gcloud CLI.

    Sinon, supprimez ces paramètres de la commande suivante :

    gcloud alloydb clusters export CLUSTER_NAME \
      --region=REGION \
      --database=DATABASE_NAME \
      --gcs-uri="gs://BUCKET_NAME/OBJECT_NAME" \
      --select-query=SELECT_QUERY \
      --field-delimiter=FIELD_DELIMITER \
      --quote-character=QUOTE_CHARACTER \
      --escape-character=ESCAPE_CHARACTER \
      --csv
  4. Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, révoquez-le.

REST v1

  1. Créez un bucket pour l'exportation de la manière suivante :

    gcloud storage buckets create gs://BUCKET_NAME --location=LOCATION_NAME --project=PROJECT_NAME
  2. Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le rôle IAM storage.objectAdmin au compte de service AlloyDB pour le bucket. Le format du compte de service est le suivant :

    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.

  3. Exportez votre base de données.

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

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

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

    • PROJECT_ID : ID du projet.
    • REGION : 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.
    • DATABASE_NAME : nom d'une base de données dans le cluster AlloyDB.
    • SELECT_QUERY : requête SQL pour l'exportation.

    • ESCAPE_CHARACTER (facultatif) : caractère devant précéder un caractère de données devant être échappé. La valeur de cet argument doit être un caractère au format hexadécimal ASCII. Par exemple, 22 représente un guillemet double.

    • QUOTE_CHARACTER (facultatif) : caractère qui contient des valeurs de colonnes contenant un type de données de chaîne. La valeur de cet argument doit être un caractère au format hexadécimal ASCII. Par exemple, 22 représente un guillemet double.

    • FIELD_DELIMITER (facultatif) : caractère qui divise les valeurs de la colonne. La valeur de cet argument doit être un caractère au format hexadécimal ASCII. Par exemple, 2C représente une virgule.

    Corps JSON de la requête :

    {
      "gcs_destination": {
        "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE"
      },
      "database": "DATABASE_NAME",
      "csv_export_options": {
        "select_query": "SELECT_QUERY",
        "escape_character": "ESCAPE_CHARACTER",
        "quote_character": "QUOTE_CHARACTER",
        "field_delimiter": "FIELD_DELIMITER"
      }
    }
    

    Pour envoyer votre requête, utilisez 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/REGION/clusters/CLUSTER_ID:export"
  

PowerShell (Windows)

Enregistrez le corps de la requête dans un fichier nommé request.json, puis 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/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
  

Vous recevez une réponse JSON de ce type :

Réponse

    {
     "name": "projects/PROJECT_ID/locations/REGION/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/REGION/clusters/TARGET_CLUSTER",
      "verb": "export",
      "requestedCancellation": false,
      "apiVersion": "v1"
     },
     "done": false
    }
  

Si vous n'avez pas besoin de conserver les autorisations IAM que vous avez définies précédemment, supprimez-les.

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

Personnaliser le format d'un fichier d'exportation CSV

Vous pouvez utiliser la gcloud CLI ou l'API REST pour personnaliser le format de votre fichier CSV. Lorsque vous effectuez une exportation, vous pouvez spécifier les options de mise en forme suivantes :

Option CSV Valeur par défaut Option gcloud Propriété de l'API REST Description
Échap La valeur par défaut est identique à la valeur QUOTE. --escape-character escape_character Caractère qui précède un caractère de données devant être échappé.
Citation "22"
Code hexadécimal ASCII pour un guillemet double.
--quote-character quote_character Spécifie le caractère de guillemet à utiliser lorsqu'une valeur de données est entre guillemets.
Délimiteur de champ "2C"
Code hexadécimal ASCII pour la virgule.
--field-delimiter field_delimiter Caractère séparant les valeurs de colonne.

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

gcloud

gcloud alloydb clusters export CLUSTER_NAME \
  --region=REGION \
  --database=DATABASE_NAME \
  --gcs-uri='gs://BUCKET_NAME/PATH_TO_CSV_FILE' \
  --select-query=SELECT_QUERY \
  --field-delimiter='2C' \
  --quote-character='22' \
  --escape-character='5C' \
  --csv

REST v1

Le corps de requête API REST équivalent ressemble à ceci :

{
  "gcs_destination": {
    "uri": "gs://BUCKET_NAME/PATH_TO_CSV_FILE"
  },
  "database": "DATABASE_NAME",
  "csv_export_options": {
    "select_query": "SELECT_QUERY",
    "escape_character": "5C",
    "quote_character": "22",
    "field_delimiter": "2C"
  }
}

Par défaut, l'exportation au format CSV crée un fichier de sortie au format CSV standard. Si vous avez besoin d'autres options que celles fournies par AlloyDB, vous pouvez utiliser l'instruction suivante dans un client psql :

\copy TABLE_NAME TO 'CSV_FILE_NAME.csv' WITH
  (FORMAT csv, ESCAPE 'ESCAPE_CHARACTER', QUOTE 'QUOTE_CHARACTER',
  DELIMITER 'DELIMITER_CHARACTER', ENCODING 'UTF8', NULL 'NULL_MARKER_STRING');

Étapes suivantes