Dans un article précédent, j’ai parlé des différences entre dbt Core et dbt Cloud, et comment dbt Core ne propose pas de moyen pour planifier et orchestrer les transformations de données. Donc, si dbt Cloud n’est pas votre choix pour orchestrer les données, vous devrez trouver un autre outil pour le faire.
La méthode que je préfère est d’utiliser les Google Cloud Functions car j’utilise généralement BigQuery pour mon data warehouse, qui se trouve également sur Google Cloud Platform (GCP).
D’autres options pourraient être de déployer via une machine virtuelle (mais cela serait probablement excessif pour un processus qui prend souvent seulement quelques minutes) ou via un container (mais cela nécessite des connaissances plus avancées en code et en gestion d’infrastructure).
Ci-dessous, vous trouverez donc un guide pour déployer dbt Core sur une Google Cloud Function.
Pré-requis
Disposer d’un repository pour projet dbt Core.
Avoir accès à un projet GCP : j’organise généralement l’orchestration dans le projet qui héberge déjà mes transformations de données via dbt
Modifier le repo dbt Core
Tout d’abord, on doit restructurer le dépôt en plaçant tous les dossiers et fichiers dbt actuels dans un sous-répertoire. Je l’ai nommé “dbt_transform”, mais on peut le nommer comme on le souhaite.
À noter que j’ai un fichier profiles.yml dans mon dossier dbt_transform. Dans ce fichier profiles.yml, j’utilise la méthode oauth :
Ajouter les fichiers main.py et requirements.txt
À la racine du repository, on crée un fichier main.py :
Après, on ajoute le fichier requirements.txt pour gérer les dépendances :
Maintenant, notre repository a cette tête :
Configurer le compte de service pour dbt
On va avoir besoin de paramétrer un compte de service pour dbt avec les rôles suivants :
BigQuery Data Viewer et BigQuery Job User sur les projets/datasets qui hébergent les sources du projet dbt
BigQuery Data Editor et BigQuery User sur le projet où les transformations de données ont lieu
Cloud Function Invoker sur le projet où la fonction Cloud va s’exécuter
Pour créer ce compte de service, on peut exécuter le script Cloud Shell (raccourci G + S) ci-dessous.
On va avoir besoin de paramétrer les variables suivantes : TRANSFORM_PROJECT_ID, FUNCTION_PROJECT_ID et SOURCE_PROJECT_IDS.
Déployer la Cloud Function
Pour déployer la fonction Cloud, on a besoin d’avoir le CLI gcloud installé.
Une fois installé, on s’assure qu’on est bien connecté avec le bon compte utilisateur Google en exécutant le script suivant dans le terminal local.
Maintenant, on s’assure qu’on est à la racine du projet on déploie la Cloud Function en exécutant le script ci-dessous.
On doit configurer les paramètres pour l’adresse du service account et la région qu’on souhaite utiliser.