Exporter des données vers AlloyDB (ETL inversé)
Ce document explique comment configurer un workflow d'extraction, de transformation et de chargement inversé (ETL inversé) de BigQuery vers AlloyDB pour PostgreSQL. Pour ce faire, vous pouvez utiliser l'
EXPORT DATA instruction.
Avant de commencer
Créez un cluster et une instance AlloyDB, qui incluent une base de données, un schéma, et une table, pour recevoir les données exportées. Vous devez disposer du schéma et de la table cibles avant d'exécuter le job d'exportation.
L'instance AlloyDB cible doit être une instance
PRIMARYà l'étatREADY.Créez une connexion BigQuery pour vous connecter à votre instance AlloyDB. La connexion doit être authentifiée par nom d'utilisateur et mot de passe. L'utilisateur de la base de données spécifié dans la connexion doit disposer des droits
INSERTsur la table cible etUSAGEsur le schéma cible.Créez une réservation BigQuery de niveau Enterprise ou Enterprise Plus.
Attribuez aux utilisateurs des rôles IAM (Identity and Access Management) incluant les autorisations nécessaires pour effectuer l'ensemble des tâches du présent document.
Rôles requis
Pour obtenir les autorisations nécessaires pour exporter des données BigQuery vers AlloyDB, demandez à votre administrateur de vous attribuer les rôles IAM suivants dans votre projet :
-
Pour exporter des données depuis une table BigQuery:
Lecteur de données BigQuery (
roles/bigquery.dataViewer) -
Pour exécuter un job d'extraction:
Utilisateur BigQuery (
roles/bigquery.user) -
Pour utiliser une connexion BigQuery:
Utilisateur de connexion BigQuery (
roles/bigquery.connectionUser) -
Pour vous connecter à une instance AlloyDB :
Client AlloyDB (
roles/alloydb.client) : compte de service de connexion
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Limites
Les exportations AlloyDB ne sont compatibles qu'avec les exportations par lot. Vous ne pouvez pas utiliser de requêtes continues pour exporter des données vers AlloyDB.
Les données exportées vers AlloyDB sont ajoutées exclusivement sous forme de nouvelles lignes. Le processus d'exportation ne modifie ni ne supprime les enregistrements existants dans AlloyDB. Si la table cible ne comporte pas de contraintes
PRIMARY KEYniUNIQUEdéfinies, l'exportation des mêmes données plusieurs fois entraînera des entrées en double.Pour garantir l'intégrité des données, nous vous recommandons de définir des contraintes
PRIMARY KEYouUNIQUEsur vos tables AlloyDB. Les jobs d'exportation n'effectuent pas d'"upserts", où un enregistrement existant est mis à jour s'il existe une clé correspondante unique. Si une ligne entrante enfreint une contraintePRIMARY KEYouUNIQUE, l'ensemble du job d'exportation échoue.Nous vous déconseillons d'exécuter plusieurs jobs
EXPORT DATAsimultanés sur la même table AlloyDB. Cela peut entraîner un comportement imprévisible, comme une perte de données ou des échecs de job. Nous vous recommandons de vérifier qu'un seul job d'exportation écrit dans une table spécifique à la fois.Seule l'authentification par nom d'utilisateur et mot de passe via une connexion BigQuery est acceptée.
Les types de données BigQuery
ARRAY,BYTES,GEOGRAPHY,INTERVALetSTRUCTne sont pas compatibles.Si l'instruction BigQuery
SELECTomet des colonnes qui existent dans la table AlloyDB cible, ces colonnes doivent autoriser les valeursNULLou avoir des valeurs par défaut définies dans AlloyDB. Si elles comportent une contrainteNOT NULLet aucune valeur par défaut, l'exportation échoue.Les exportations vers AlloyDB ne sont compatibles qu'avec les éditions BigQuery Enterprise ou Enterprise Plus. L'édition standard de BigQuery et le calcul à la demande ne sont pas compatibles. Pour en savoir plus, consultez Fonctionnalités d'administration.
Un job BigQuery, tel qu'un job d'extraction vers AlloyDB, a une durée maximale de six heures. Pour les exportations très volumineuses, nous vous recommandons de les diviser en plusieurs jobs plus petits.
Considérations relatives aux emplacements
L'exportation de données vers AlloyDB est soumise à des exigences spécifiques concernant l'emplacement de votre ensemble de données BigQuery et de votre instance AlloyDB :
Exportations dans la même région : l'instance AlloyDB cible doit résider exactement dans la même Google Cloud région que l'ensemble de données BigQuery. Par exemple, un ensemble de données dans
us-east1ne peut être exporté que vers une instance AlloyDB dansus-east1.Exportations multirégionales :
- Les ensembles de données dans la zone multirégionale
USne peuvent être exportés que vers une instance AlloyDB située dans la régionus-central1. - Les ensembles de données dans la zone multirégionale
EUne peuvent être exportés que vers une instance AlloyDB située dans la régioneurope-west4.
- Les ensembles de données dans la zone multirégionale
Les exportations interrégionales autres que les combinaisons mentionnées précédemment ne sont pas compatibles.
Configurer des exportations avec alloydb_options
Vous pouvez utiliser l'option alloydb_options pour spécifier le schéma, la table et le nombre maximal de connexions AlloyDB de destination. La configuration est exprimée sous forme de chaîne JSON. Seul le paramètre table est obligatoire. Tous les autres paramètres sont facultatifs.
Lors de la configuration de l'exportation, les colonnes de l'instruction SELECT doivent avoir des alias qui correspondent aux noms des colonnes de la table AlloyDB cible.
EXPORT DATA WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID` OPTIONS( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID", alloydb_options="""{ "schema": "SCHEMA_NAME", "table": "TABLE_NAME", "max_parallel_connections":MAX_CONNECTIONS}""" ) AS SELECT * FROM `mydataset.table1`;
Remplacez les éléments suivants :
PROJECT_ID: nom de votre Google Cloud projetLOCATION: emplacement de votre connexion et de votre instance cibleCONNECTION_ID: nom de votre connexion BigQueryCLUSTER_ID: nom de votre cluster AlloyDBINSTANCE_ID: nom de votre instance AlloyDB cibleSCHEMA_NAME(facultatif) : nom du schéma de destination dans AlloyDB Si aucune valeur n'est fournie, le schéma par défaut configuré pour l'utilisateur de la base de données est utilisé.TABLE_NAME: nom d'une table de destination existante dans AlloyDB, sans le préfixe de schémaMAX_CONNECTIONS(facultatif) : nombre maximal de connexions parallèles simultanées entre les workers BigQuery et l'instance AlloyDB Limiter les connexions peut éviter de surcharger l'instance cible lors d'exportations volumineuses.
Exporter les données
Vous pouvez utiliser l'
EXPORT DATA instruction
pour exporter des données d'une table BigQuery vers une table
AlloyDB.
L'exemple suivant exporte les champs sélectionnés d'une table nommée mydataset.table1 vers une table AlloyDB nommée my_target_table :
EXPORT DATA WITH CONNECTION `myproject.us-central1.my-alloydb-conn` OPTIONS ( format='ALLOYDB', uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance", alloydb_options="""{ "schema": "public", "table": "my_target_table" }""" ) AS SELECT col1 AS id, col2 AS name, col3 AS value FROM `mydataset.table1`;
Tarifs
Lorsque vous exportez des données vers AlloyDB à l'aide de l'instruction EXPORT DATA,
la tarification des calculs de capacité
BigQuery s'applique.
Une fois les données exportées, vous êtes facturé pour leur stockage dans AlloyDB. Pour en savoir plus, consultez Tarifs d'AlloyDB pour PostgreSQL.