Premiers pas avec Spanner Data Boost et BigQuery

1. Introduction

Dans cet atelier de programmation, vous allez apprendre à utiliser Spanner Data Boost pour interroger des données Spanner de BigQuery à l'aide de requêtes fédérées sans ETL, 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 quasi nul sur les charges de travail existantes sur l'instance Spanner provisionnée, à l'aide d'un modèle d'utilisation à la demande et sans serveur.

Lorsqu'il est associé à des connexions externes BigQuery, Data Boost vous permet d'interroger facilement des données depuis Spanner vers votre plate-forme d'analyse de données, sans transfert de données ETL complexe.

Prérequis

  • Connaissances de base de la console Google Cloud
  • Compétences de base en interface de ligne de commande et en shell Google

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.png

a99b7ace416376c4.png

5e3ff691252acf41.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 à la remplacer par une autre région compatible avec les configurations régionales Spanner.

gcloud config set compute/region us-central1

Activez l'API Spanner:

gcloud services enable spanner.googleapis.com

Créer l'instance Spanner

Au cours de cette étape, nous avons configuré notre instance Spanner pour cet 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 votre instance en cours d'exécution, vous pouvez créer la base de données. Spanner permet d'utiliser 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, mettre en place un chiffrement personnalisé, configurer l'optimiseur et définir la durée 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 avoir des données dans la base de données. Pour ce faire, vous allez créer un bucket Cloud Storage, y importer une importation Avro, puis lancer un job d'importation Dataflow pour charger les données Avro dans Spanner.

Activer les API

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

Veillez à activer les API Compute, 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 des fichiers d'importation dans Cloud Storage

À présent, créez 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 à partir de 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

Avec les fichiers stockés dans Cloud Storage, vous pouvez démarrer 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

Vous pouvez vérifier l'état du job 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 vérifiez que les données s'y trouvent. Tout d'abord, développez le tableau des thèmes pour afficher les colonnes.

cd1cf38efd2b974a.png

À présent, exécutez 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 disposez de données dans Spanner, vous pouvez y accéder à partir de 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 "Connexions à des sources de données éternelles" .

580a0d237f11a9c5.png

75968de398fabf7e.png

Vous pouvez maintenant exécuter une requête pour lire des données depuis Spanner. Exécutez cette requête dans la console BigQuery, en veillant à remplacer la valeur par votre ID de projet ${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 la tâche, telles que la durée d'exécution et la quantité de données traitées dans la section "Informations sur la tâche". .

9ae40b0aa8c4891.png

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

6. Lire des données avec Data Boost

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

Renseignez les détails avec le même URI de connexion à Spanner. Modifiez l'ID de connexion. et cochez la case "Utiliser les données .

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. 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 calendrier a-t-il changé ?

7. Comprendre Data Boost

Spanner Data Boost vous permet d'utiliser des ressources sans rapport 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 pendant 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 de plus et exécutez la requête pour utiliser Data Boost à plusieurs reprises. 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;

Retournez maintenant dans Spanner Studio dans la console Cloud, puis accédez à "System Insights" (Insights sur le système).

c1dc67fcc7a2a71.png

Vous pouvez voir ici les métriques du processeur. Les requêtes exécutées sans Data Boost utilisent le processeur pour "executesql_select_withpartitiontoken" opérations. Même si la requête est la même, l'exécution Data Boost n'apparaît pas sur l'utilisation du processeur de votre instance.

a86a7508b6738904.png

Dans de nombreux cas, les performances de la requête analytique s'améliorent 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 prévoit pas d'améliorer les performances.

N'hésitez pas à vous amuser avec les requêtes et les charges de travail et à 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, il vous suffit de le supprimer pour le nettoyer. Si vous souhaitez conserver le projet et nettoyer les composants individuels, procédez comme suit.

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 un nettoyage, il vous suffit d'accéder à la section Cloud Spanner de la console Cloud et de supprimer "codelab-demo". que nous avons créée dans cet 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 à partir 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