Cette page explique comment exporter des données de clusters AlloyDB pour PostgreSQL vers un bucket Cloud Storage au format CSV, qui peut être utilisé par d'autres outils et environnements.
Pour savoir comment migrer une base de données entière à partir 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 exportez des données pour créer une instance à partir du fichier exporté, envisagez de restaurer un cluster à partir d'une sauvegarde stockée.
Vous pouvez annuler l'exportation des données à partir des clusters AlloyDB pour PostgreSQL. Pour en savoir plus, consultez la section Annuler l'exportation de données.
Avant de commencer
- Avant de lancer une opération d'exportation, gardez à l'esprit 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 blancs sont supprimés avant l'exécution de la requête d'exportation.- Des frais de transfert de données interrégionaux 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 au format hexadécimal (avec ou sans le préfixe
0x
) sont autorisés pour les valeurs de caractères dans les options CSV telles quefield_delimiter
,quote_character
etescape_character
.
Rôles et autorisations requis pour l'exportation à partir d'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:
- Rôle Administrateur Cloud AlloyDB (
roles/alloydb.admin
) - Un rôle personnalisé, y compris les autorisations suivantes :
alloydb.clusters.get
alloydb.clusters.export
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 au format CSV, vous pouvez spécifier les schémas à exporter. Tout schéma situé au niveau de la base de données peut être exporté.
Vous pouvez utiliser gcloud CLI ou l'API REST pour personnaliser le format de votre fichier CSV.
gcloud
- Créez un bucket Cloud Storage.
Accordez au compte de service des autorisations sur le bucket Cloud Storage pour l'opération d'exportation. Utilisez le format du compte de service pour identifier le compte de service du projet à partir duquel vous exportez. Le format du compte de service est le suivant:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
Utilisez
gcloud storage buckets add-iam-policy-binding
pour accorder le rôle IAMstorage.objectAdmin
au compte de service. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.Exportez la base de données vers votre bucket Cloud Storage.
Exécutez la commande d'exportation au format CSV :TODO
gcloud alloydb clusters export
.Le tableau suivant présente 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 dans chaque ligne du fichier. La valeur par défaut est la virgule. La valeur de cet argument doit être un caractère en code ASCII hexadécimal.--quote-character
(facultatif): spécifie le caractère de guillemets à utiliser lorsqu'une valeur de données est mise entre guillemets. La valeur par défaut est un guillemet double. La valeur de cet argument doit être un caractère en code ASCII hexadécimal.--escape-character
(facultatif): spécifie le caractère qui doit précéder 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 en code ASCII hexadécimal.
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
Si vous n'avez pas besoin de conserver le rôle IAM que vous avez défini précédemment, révoquez-le maintenant.
REST v1
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>
Utilisez le format de compte de service pour identifier le compte de service du projet à partir duquel vous exportez.
Le format du compte de service est le suivant:
service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com
Il doit disposer d'autorisations sur le bucket Cloud Storage pour l'opération d'exportation.
Utilisez gcloud storage buckets add-iam-policy-binding pour accorder le rôle IAM
storage.objectAdmin
au compte de service. Pour obtenir de l'aide sur la définition des autorisations IAM, consultez la page Utiliser des autorisations IAM.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 ci-dessous, 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 en code ASCII hexadécimal. 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 en code ASCII hexadécimal. Par exemple,
22
représente un guillemet double.FIELD_DELIMITER (facultatif): caractère séparant les valeurs de colonne. 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 :
{ "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
et 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
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/REGION/clusters/CLUSTER_ID:export"| Select-Object -Expand Content
Vous recevez une réponse JSON semblable à celle-ci:
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 dès maintenant.
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 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 |
---|---|---|---|---|
Échappez |
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é. |
Devis |
"22" Code hexadécimal ASCII pour un double guillemet. |
--quote-character
|
quote_character |
Spécifie le caractère de guillemet à utiliser lorsqu'une valeur de données est mise 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. |
Par exemple, une commande gcloud CLI utilisant tous ces arguments peut se présenter comme suit:
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
Le corps de requête API REST équivalent ressemble à ceci:
{
"exportContext":
{
"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 une sortie CSV standard. Si vous avez besoin d'options supplémentaires 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');
Étape suivante
- Découvrez comment exporter un fichier de vidage SQL.
- Annuler une opération d'exportation