Exporter des données vers Spanner (ETL inversé)

Pour tout commentaire ou assistance pour 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 les limites de BigQuery.

Avant de commencer

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 en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

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
  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME
GoogleSQL
  • BIGNUMERIC : le type NUMERIC compatible n'est pas assez large. Envisagez d'ajouter des diffusions explicites au type NUMERIC dans la requête.

La taille maximale d'une ligne exportée ne peut pas dépasser 1 Mio.

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 Cloud
  • INSTANCE_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 de colonne 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 les 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 Cloud
  • INSTANCE_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.

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. L'exportateur effectue le scaling automatique du nombre d'emplacements d'exportation BigQuery en fonction du nombre de nœuds et d'unités de traitement Spanner. Pour en savoir plus sur l'optimisation du débit en écriture, consultez la page Présentation des performances.

  • Évitez de trier 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 minimiser 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 correctement triées.

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.