Exporter des données vers Spanner (ETL inversé)
Pour envoyer des commentaires ou demander de l'aide concernant cette fonctionnalité, envoyez un e-mail à l'adresse bq-cloud-spanner-federation-preview@google.com.
Ce document explique comment configurer un workflow d'extraction, de transformation et de chargement inversé (ETL inversé) de BigQuery vers Spanner. Pour ce faire, utilisez l'instruction EXPORT DATA
pour exporter les données d'une table BigQuery vers une table Spanner.
Ce workflow ETL inversé combine des fonctionnalités analytiques dans BigQuery avec une faible latence et un débit élevé dans Spanner. Ce workflow vous permet de diffuser des données aux utilisateurs de l'application sans épuiser les quotas et limites de BigQuery.
Avant de commencer
Créez une base de données Spanner avec une table pour recevoir les données exportées.
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 à l'exportation des données BigQuery vers Spanner, demandez à votre administrateur de vous accorder les rôles IAM suivants sur 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'exportation : Utilisateur BigQuery (
roles/bigquery.user
) -
Vérifier les paramètres de l'instance Spanner :
Lecteur Cloud Spanner (
roles/spanner.viewer
) -
Écrire des données dans une table Spanner :
Utilisateur de base de données Cloud Spanner (
roles/spanner.databaseUser
)
Pour en savoir plus sur l'attribution de rôles, consultez la page 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 types de données BigQuery suivants n'ont pas d'équivalent dans Spanner et ne sont pas compatibles :
Dialecte de la base de données Spanner | Types BigQuery non compatibles |
---|---|
Tous les dialectes |
|
GoogleSQL |
|
La taille maximale d'une ligne exportée ne peut pas dépasser 1 Mio.
Spanner applique l'intégrité référentielle lors de l'exportation. Si la table cible est un enfant d'une autre table (INTERLEAVE IN PARENT) ou si elle comporte des contraintes de clé étrangère, les clés étrangères et la clé parente seront validées lors de l'exportation. Si une ligne exportée est écrite dans une table avec INTERLEAVE IN PARENT et que la ligne parente n'existe pas, l'exportation échouera avec le message "Ligne parente manquante. "Impossible d'écrire la ligne". Si la ligne exportée est écrite dans une table avec des contraintes de clé étrangère et qu'elle fait référence à une clé qui n'existe pas, l'exportation échoue avec l'erreur "Contrainte de clé étrangère non respectée". Lorsque vous exportez vers plusieurs tables, nous vous recommandons de séquencer l'exportation pour vous assurer que l'intégrité référentielle sera maintenue pendant l'exportation. Cela signifie généralement d'exporter les tables parentes et les tables référencées par des clés étrangères avant les tables qui les référencent.
Si la table cible de l'exportation comporte des contraintes de clé étrangère ou est l'enfant d'une autre table (INTERLEAVE IN PARENT), la table parente doit être renseignée avant l'exportation d'une table enfant et doit contenir toutes les clés correspondantes. Une tentative d'exportation d'une table enfant alors qu'une table parente ne dispose pas de l'ensemble complet des clés pertinentes échouera.
La durée maximale d'une tâche d'exportation vers Spanner est de six heures. Pour en savoir plus sur l'optimisation des tâches d'exportation volumineuses, consultez la section Optimisation de l'exportation. Vous pouvez également envisager de diviser l'entrée en blocs de données individuels, qui peuvent être exportés en tant que tâches d'exportation individuelles.
Les exportations vers Spanner 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.
Configurer des exportations avec l'option spanner_options
Vous pouvez utiliser l'option spanner_options
pour spécifier une base de données et une table Spanner de destination. La configuration est exprimée sous la forme d'une chaîne JSON, comme le montre l'exemple suivant:
EXPORT DATA OPTIONS( uri="https://spanner.googleapis.com/projects/PROJECT_ID
/instances/INSTANCE_ID
/databases/DATABASE_ID
", format='CLOUD_SPANNER', spanner_options = """{ "table": "TABLE_NAME
", "priority": "PRIORITY
", "tag": "TAG
", }""" )
Remplacez les éléments suivants :
PROJECT_ID
: le nom de votre projet Google CloudINSTANCE_ID
: nom de votre instance de base de données.DATABASE_ID
: nom de votre base de données.TABLE_NAME
: nom d'une table de destination existante.PRIORITY
(facultatif) : priorité des requêtes d'écriture. Valeurs autorisées :LOW
,MEDIUM
,HIGH
. Valeur par défaut :MEDIUM
.TAG
(facultatif) : tag de requête permettant d'identifier le trafic de l'exportateur dans la surveillance Spanner. Valeur par défaut :bq_export
.
Exigences de requêtes d'exportation
Pour exporter des résultats de requête vers Spanner, les résultats doivent répondre aux exigences suivantes :
- Toutes les colonnes de l'ensemble de résultats doivent exister dans la table de destination et leurs types doivent correspondre.
- L'ensemble de résultats doit contenir toutes les colonnes
NOT NULL
de la table de destination. - Les valeurs des colonnes ne doivent pas dépasser les limites de taille des données dans les tables de Spanner.
- Tous les types de colonne non compatibles doivent être convertis en l'un des types compatibles avant l'exportation vers Spanner.
Exporter des données
Vous pouvez utiliser l'instruction EXPORT DATA
pour exporter des données d'une table BigQuery vers une table Spanner.
L'exemple suivant exporte les champs sélectionnés à partir d'une table nommée mydataset.table1
:
EXPORT DATA OPTIONS ( uri="https://spanner.googleapis.com/projects/PROJECT_ID
/instances/INSTANCE_ID
/databases/DATABASE_ID
", format='CLOUD_SPANNER', spanner_options="""{ "table": "TABLE_NAME" }""" ) AS SELECT * FROM mydataset.table1;
Remplacez les éléments suivants :
PROJECT_ID
: nom de votre projet Google CloudINSTANCE_ID
: nom de votre instance de base de donnéesDATABASE_ID
: nom de votre base de donnéesTABLE_NAME
: nom d'une table de destination existante.
Exporter plusieurs résultats avec la même valeur rowkey
Lorsque vous exportez un résultat contenant plusieurs lignes avec la même valeur rowkey
, les valeurs écrites dans Spanner se retrouvent dans la même ligne Spanner. Seule une seule ligne BigQuery correspondante (aucune garantie de laquelle) sera présente dans l'ensemble de lignes Spanner produit par l'exportation.
Optimisation des exportations
Pour optimiser l'exportation d'enregistrements de BigQuery vers Spanner, essayez ces solutions :
Augmentez le nombre de nœuds dans l'instance de destination Spanner. Notez que lors des premières étapes de l'exportation, l'augmentation du nombre de nœuds dans l'instance peut ne pas entraîner immédiatement une augmentation du débit d'exportation. Un léger retard peut être observé lorsque Spanner effectue une répartition basée sur la charge. Avec la répartition basée sur la charge, le débit d'exportation augmente et se stabilise peu après. Pour en savoir plus sur la maximisation du débit d'écriture, consultez la section Présentation des performances.
Spécifiez la priorité
HIGH
dansspanner_options
. Toutefois, cela peut entraîner une dégradation significative des performances pour les autres charges de travail gérées par la même instance.Évitez d'organiser les résultats de la requête. Si l'ensemble de résultats contient toutes les colonnes de clé primaire, l'exportateur trie automatiquement les clés primaires de la table de destination pour simplifier les écritures et réduire les conflits.
Si la clé primaire de la table de destination inclut des colonnes générées, vous devez ajouter les expressions des colonnes générées à la requête pour vous assurer que les données exportées sont triées correctement.
Tarifs
Pour en savoir plus sur la tarification de l'exportation de données, consultez Tarifs de BigQuery.
Une fois les données exportées, leur stockage dans Spanner vous est facturé. Pour en savoir plus, consultez la page Tarifs de Spanner.