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

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.
Lorsqu'il est associé à des connexions externes BigQuery, Data Boost vous permet d'interroger facilement des données de Spanner dans votre plate-forme d'analyse de données sans déplacement complexe de données ETL.
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
- Comment déployer une instance Spanner
- Comment charger des données pour créer une base de données Spanner
- Comment accéder aux données Spanner depuis BigQuery sans Data Boost
- Comment accéder aux données Spanner depuis BigQuery avec Data Boost
Ce dont vous avez besoin
- 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
- 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.



- 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 Google APIs. Vous pouvez modifier ce nom à tout moment.
- 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.
- 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 :

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

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 à la remplacer par une autre région compatible avec les configurations régionales Spanner regional configurations.
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 cette commande :
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 autorise plusieurs bases de données sur une seule 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 le 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, importer une importation Avro dans le bucket et 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 maintenant 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 démarrer une tâche 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
Vous pouvez vérifier l'état de la tâche d'importation à l'aide de cette commande.
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 maintenant à Spanner Studio et assurez-vous que les données sont présentes. Commencez par développer la table "topics" pour afficher les colonnes.

Exécutez maintenant la requête suivante pour vous assurer que les données sont disponibles :
SELECT COUNT(*) FROM topics;
Résultat attendu :

5. Lire des données de BigQuery
Maintenant que vous disposez de 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 disposez 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".


Vous pouvez maintenant exécuter une requête pour lire des données de Spanner. Exécutez cette requête dans la console BigQuery en veillant à remplacer la valeur par 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 :

Vous pouvez afficher des informations sur la tâche, telles que sa durée d'exécution et la quantité de données traitées dans l'onglet "Informations sur la tâche".

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" (Connexions à partir de sources de données externes).
Renseignez les informations avec le même URI de connexion à Spanner. Modifiez l'ID de connexion et cochez la case "Utiliser Data Boost".

Une fois la connexion Data Boost créée, vous pouvez exécuter la même requête, mais avec le nouveau nom de connexion. Remplacez à nouveau votre project_id 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 sans lien avec les ressources de votre instance Spanner. Cela réduit principalement 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 pour ne pas 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 maintenant à Spanner Studio dans la console Cloud, puis accédez à System Insights.

Vous pouvez y voir 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 de Data Boost n'apparaît pas dans l'utilisation du processeur de votre instance.

Dans de nombreux cas, les performances de la requête analytique s'amélioreront lors de l'utilisation de 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 devrait pas présenter d'amélioration des performances.
N'hésitez pas à jouer avec 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, procédez comme suit.
Supprimer les 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.

Supprimer le bucket Cloud Storage
gcloud storage rm --recursive gs://$GCS_BUCKET
Supprimer l'instance Spanner
Pour effectuer un nettoyage, accédez simplement à la section Cloud Spanner de la console Cloud et supprimez l'instance "codelab-demo" que nous avons créée dans l'atelier de programmation.

9. Félicitations
Bravo ! Vous avez terminé cet atelier de programmation.
Points abordés
- Comment déployer une instance Spanner
- Comment charger des données dans Spanner à l'aide de Dataflow
- Comment accéder aux données Spanner depuis BigQuery
- Comment utiliser Spanner Data Boost pour éviter tout impact sur votre instance Spanner pour les requêtes analytiques de BigQuery
10. Enquête
Résultat :