Premiers pas avec Spanner Data Boost et BigQuery

1. Introduction

Dans cet atelier de programmation, vous apprendrez à utiliser Spanner Data Boost pour interroger des données Spanner à partir de BigQuery à l'aide de requêtes fédérées sans ETL et sans affecter la base de données Spanner.

f1de68f762a86cc7.png

Spanner Data Boost est un service sans serveur entièrement géré qui fournit des ressources de calcul indépendantes pour les charges de travail Spanner compatibles. Data Boost vous permet d'exécuter des requêtes d'analyse et des exportations de données avec un impact quasiment nul sur les charges de travail existantes sur l'instance Spanner provisionnée à l'aide d'un modèle d'utilisation à la demande sans serveur.

Associé aux connexions externes BigQuery, Data Boost vous permet d'interroger facilement les données Spanner dans votre plate-forme d'analyse de données sans avoir à effectuer de transfert de données ETL complexe.

Prérequis

  • Connaissances de base concernant la console Google Cloud
  • Compétences de base concernant l'interface de ligne de commande et Google Shell

Points abordés

  • Déployer une instance Spanner
  • Charger des données pour créer une base de données Spanner
  • Accéder aux données Spanner depuis BigQuery sans Data Boost
  • Accéder aux données Spanner depuis BigQuery avec Data Boost

Prérequis

  • Un compte Google Cloud et un projet Google Cloud
  • Un navigateur Web tel que Chrome

2. Préparation

Configuration de l'environnement d'auto-formation

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.

fbef9caa1602edd0.pnga99b7ace416376c4.png5e3ff691252acf41.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
  • L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet.
  • Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

55efc1aaa7a4d3ad.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

7ffe5cbb04455448.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez effectuer toutes les tâches de cet atelier de programmation dans un navigateur. Vous n'avez rien à installer.

3. Créer une instance et une base de données Spanner

Activer l'API Spanner

Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré :

gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)

Configurez votre région par défaut sur us-central1. N'hésitez pas à remplacer cette région par une autre région compatible avec les configurations régionales de Spanner.

gcloud config set compute/region us-central1

Activez l'API Spanner :

gcloud services enable spanner.googleapis.com

Créer l'instance Spanner

Dans cette étape, nous allons configurer notre instance Spanner pour l'atelier de programmation. Pour ce faire, ouvrez Cloud Shell et exécutez la commande suivante :

export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1

Résultat de la commande :

$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.  

Créer la base de données

Une fois l'instance en cours d'exécution, vous pouvez créer la base de données. Spanner permet d'avoir plusieurs bases de données sur une même instance.

C'est dans la base de données que vous définissez votre schéma. Vous pouvez également contrôler qui a accès à la base de données, configurer un chiffrement personnalisé, configurer l'optimiseur et définir la période de conservation.

Pour créer la base de données, utilisez à nouveau l'outil de ligne de commande gcloud :

export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID

Résultat de la commande :

$ gcloud spanner databases create $SPANNER_DATABASE \
 --instance=$SPANNER_INSTANCE_ID
Creating database...done.

4. Charger les données

Avant de pouvoir utiliser Data Boost, vous devez disposer de données dans la base de données. Pour ce faire, vous allez créer un bucket Cloud Storage, y importer un fichier Avro, puis démarrer une tâche d'importation Dataflow pour charger les données Avro dans Spanner.

Activer les API

Pour ce faire, ouvrez une invite Cloud Shell si la précédente a été fermée.

Assurez-vous d'activer les API Compute Engine, Cloud Storage et Dataflow.

gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com

Résultat attendu sur la console :

$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.

Organiser les fichiers d'importation dans Cloud Storage

Créez maintenant le bucket pour stocker les fichiers Avro :

export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET

Résultat attendu sur la console :

$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...

Ensuite, téléchargez le fichier tar depuis GitHub et extrayez-le.

wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz 

Résultat attendu sur la console :

$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - ‘spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz 
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001

Importez ensuite les fichiers dans le bucket que vous avez créé.

gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive

Résultat attendu sur la console :

$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json           
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
  Completed files 13/13 | 54.6MiB/54.6MiB                                                                                               

Average throughput: 46.4MiB/s

Importer des données

Une fois les fichiers dans Cloud Storage, vous pouvez lancer un job d'importation Dataflow pour charger les données dans Spanner.

gcloud dataflow jobs run import_chatdb \
    --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
    --region us-central1 \
    --staging-location gs://$GCS_BUCKET/tmp \
    --parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db

Résultat attendu sur la console :

$ gcloud dataflow jobs run import_chatdb \
>     --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
>     --region us-central1 \
>     --staging-location gs://$GCS_BUCKET/tmp \
>     --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH

Cette commande vous permet de vérifier l'état du job d'importation.

gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1

Résultat attendu sur la console :

$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID                                   NAME           TYPE   CREATION_TIME        STATE    REGION
*snip*                                  import_chatdb  Batch  2024-04-*snip*  Done  us-central1

Vérifier les données dans Spanner

Accédez à Spanner Studio et vérifiez que les données sont présentes. Commencez par développer le tableau des thèmes pour afficher les colonnes.

cd1cf38efd2b974a.png

Exécutez maintenant la requête suivante pour vous assurer que les données sont disponibles :

SELECT COUNT(*) FROM topics;

Résultat attendu :

89e5d92fbe71c022.png

5. Lire des données de BigQuery

Maintenant que vous avez des données dans Spanner, il est temps d'y accéder depuis BigQuery. Pour ce faire, vous allez configurer une connexion externe à Spanner dans BigQuery.

En supposant que vous disposiez des autorisations appropriées, créez une connexion externe à Spanner en procédant comme suit.

Cliquez sur le bouton "Ajouter" en haut de la console BigQuery, puis sélectionnez l'option "Connexions à des sources de données externes".

580a0d237f11a9c5.png

75968de398fabf7e.png

Vous pouvez maintenant exécuter une requête pour lire les données de Spanner. Exécutez cette requête dans la console BigQuery, en veillant à remplacer la valeur de votre ${PROJECT_ID} :

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Exemple de résultat :

e47265487c3e39bd.png

Vous pouvez consulter des informations sur le job, comme sa durée d'exécution et la quantité de données traitées, dans l'onglet "Informations sur le job".

9ae40b0aa8c4891.png

Vous allez ensuite ajouter une connexion Data Boost à Spanner et comparer les résultats.

6. Lire des données à l'aide de Data Boost

Pour utiliser Spanner Data Boost, vous devez créer une connexion externe de BigQuery à Spanner. Cliquez sur "Ajouter" dans la console BigQuery, puis sélectionnez à nouveau Connections from external data sources.

Renseignez les informations avec le même URI de connexion à Spanner. Modifiez l'ID de connexion et cochez la case "Utiliser Data Boost".

8e2205255b56a279.png

Une fois la connexion Data Boost créée, vous pouvez exécuter la même requête, mais avec le nouveau nom de connexion. Là encore, remplacez project_id par l'ID de votre projet dans la requête.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Vous devriez obtenir le même ensemble de résultats qu'auparavant. Le timing a-t-il changé ?

7. Comprendre Data Boost

Spanner Data Boost vous permet d'utiliser des ressources indépendantes de celles de votre instance Spanner. Cela permet principalement de réduire l'impact de vos charges de travail analytiques sur vos charges de travail opérationnelles.

Vous pouvez le constater si vous exécutez la requête sans utiliser Data Boost plusieurs fois en deux ou trois minutes. N'oubliez pas de remplacer ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Attendez ensuite quelques minutes, puis exécutez la requête pour utiliser Data Boost plusieurs fois. N'oubliez pas de remplacer ${PROJECT_ID}.

SELECT *
FROM (
  SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted") 
)
ORDER BY num_topics DESC;

Revenez à Spanner Studio dans la console Cloud, puis accédez à "Insights système".

c1dc67fcc7a2a71.png

Vous pouvez consulter les métriques du processeur. Les requêtes exécutées sans Data Boost utilisent le processeur pour les opérations "executesql_select_withpartitiontoken". Même si la requête est la même, l'exécution Data Boost ne s'affiche pas dans l'utilisation du processeur de votre instance.

a86a7508b6738904.png

Dans de nombreux cas, les performances des requêtes analytiques s'amélioreront lorsque vous utiliserez Data Boost. L'ensemble de données de ce tutoriel est petit et aucune autre charge de travail n'est en concurrence pour les ressources. Par conséquent, ce tutoriel ne vise pas à présenter des améliorations des performances.

N'hésitez pas à tester les requêtes et les charges de travail pour voir comment fonctionne Data Boost. Lorsque vous avez terminé, passez à la section suivante pour nettoyer l'environnement.

8. Nettoyer l'environnement

Si vous avez créé votre projet spécifiquement pour cet atelier de programmation, vous pouvez simplement le supprimer pour le nettoyer. Si vous souhaitez conserver le projet et nettoyer les composants individuels, suivez les étapes suivantes.

Supprimer des connexions BigQuery

Pour supprimer les deux connexions, cliquez sur les trois points à côté du nom de la connexion. Sélectionnez "Supprimer", puis suivez les instructions pour supprimer la connexion.

c9348832bcf202a9.png

Supprimer le bucket Cloud Storage

gcloud storage rm --recursive gs://$GCS_BUCKET

Supprimer l'instance Spanner

Pour effectuer le nettoyage, il vous suffit d'accéder à la section Cloud Spanner de la console Cloud et de supprimer l'instance codelab-demo que nous avons créée dans l'atelier de programmation.

ab7c83ebdab74c04.png

9. Félicitations

Bravo ! Vous avez terminé cet atelier de programmation.

Points abordés

  • Déployer une instance Spanner
  • Charger des données dans Spanner à l'aide de Dataflow
  • Accéder aux données Spanner depuis BigQuery
  • Utiliser Spanner Data Boost pour éviter tout impact sur votre instance Spanner pour les requêtes analytiques provenant de BigQuery

10. Enquête

Résultat :

Comment allez-vous utiliser ce tutoriel ?

Je vais le lire uniquement Je vais le lire et effectuer les exercices