Astuces Google Cloud Data Fusion

Pipeline Data Fusion
Image “Les barrés”

Cloud Data Fusion est un outil de traitement de données lancé sur le marché en novembre 2019 qui a gagné en popularité dans le monde de Google Cloud Platform (GCP). Il permet de transformer les données aussi bien en batch qu’en streaming grâce au catalogue de connexions dont il dispose.

Un nouvel outil peut être compliqué à utiliser surtout si on doit livrer le projet pour hier ! C’est pourquoi, après mon expérience en tant que Data Engineer chez un client qui travaille sur la plateforme GCP, j’ai décidé d’écrire cet article pour faciliter ton démarrage sur des solutions qui ne sont parfois pas très intuitives à implémenter. Mon souhait avec cet article est de transformer une bonne fois pour toutes Data Fusion en un outil prêt à l’emploi !

TL;DR

Voici la liste des astuces :

  • Hub : Le catalogue complet des composants Data Fusion.
  • Union : Comment unir deux tables avec le même schéma en utilisant un Wrangler ?
  • Auto Increment & Upsert : Comment contourner l’inexistance d’autoincrement sur BigQuery en utilisant la fonction GUUID ?
  • Dédoublonnage : Comment dédoublonner les données en utilisant le composant sink de BigQuery et ainsi éviter l’utilisation du composant distinct ?
  • Récupération des valeurs possibles de deux sources : Les solutions à la récupération des valeur uniques des deux sources.
  • Testing/débogage de pipelines : Data Fusion permet d’avoir un aperçu des données pour chaque transformation en utilisant le mode “Preview” afin de vérifier l’avant-après des données.
  • Orchestration : Comment définir l’ordre de l’orchestration sur Data Fusion ?

Hub

Même si cela semble évident pour certains, Data Fusion ne met pas à disposition tous les composants disponibles directement dans le Studio. Pour voir tous les composants, il faut ouvrir le Hub :

Google Cloud Data Fusion hub
Google Cloud Data Fusion hub

Ce catalogue est très varié. Nous pouvons trouver des connecteurs pour d’autres fournisseurs de cloud tels qu’Azure et AWS. Nous pouvons également trouver des composants de transformation intéressants tels que Data Profiler pour obtenir des statistiques des colonnes ou le composant Pivot pour pivoter les lignes en colonnes.

Avant de démarrer tout projet technique dans Data Fusion, je recommande de vérifier que les connecteurs dont tu as besoin existent dans le hub.

Union

Une fonctionnalité très commune en SQL est l’union de deux sources à l’aide de la commande UNION. Data Fusion n’a aucun composant pour se faire, mais connecter deux sources avec la même structure au même Wrangler peut permettre d’atteindre l’objectif.

Google Cloud Data Fusion Studio

Auto Increment & Upsert

Un cas très habituel dans le développement de bases de données décisionnelles est la création de colonnes d’identifiant pour les dimensions et les tables de faits. Ceci est rapidement résolu dans de nombreuses bases de données en ajoutant IDENTITY/AUTO_INCREMENT/SEQUENCE/etc au type de données lors de la création de la table.

BigQuery (la base de données analytique que j’ai utilisé pour ce projet) n’a pas cette fonctionnalité mais elle dispose de la fonctionnalité GUUID (Globally Universal Unique ID) pour générer un identifiant unique pour chaque ligne.

Il existe le composant Field Adder Transform (il faut l’importer depuis le Hub) qui permet d’ajouter un identifiant unique à une nouvelle colonne.

En revanche, comme son nom l’indique, ce composant crée les valeurs uniques dans une nouvelle colonne et il n’est pas pratique pour un UPSERT par exemple, où on ne doit ajouter le nouveau identifiant que quand il y a une nouvelle ligne à insérer dans la table destination et laisser l’ancien identifiant pour les lignes existantes.

Ma solution :

  1. Joindre les lignes d’entrée et les lignes existantes dans la table en utilisant le composant Joiner (que j’appelle “Join” dans l’image ci-dessous). Le mode de cette jointure doit être Outer Join pour récupérer les données existantes et non existantes de la dimension.
Google Cloud Data Fusion Studio

2. Puis générer le nouveau identifiant avec la fonction generate-uuid, disponible sur le composant Wrangler. Ce composant nous aide à transformer les données en utilisant notre propre logique. Voici mes transformations pour ajouter l’id_produit aux nouvelles lignes d’une dimension “Produit” :

  1. Générer des nouveaux identifiants sur une nouvelle colonne “id_produit_new_uuid” en utilisant la commande generate-uuid
  2. Assigner le UUID généré à la colonne de l’identifiant seulement quand la valeur est NULL.
  3. Éliminer la colonne id_produit_new_uuid
Google Cloud Data Fusion CDAP
  1. Finalement configurer le composant sink pour faire un UPSERT :
    1. Sélectionne Upsert comme opération
    2. Indique le nom de la colonne à utiliser comme clé de la table
Google Cloud Data Fusion Sink

Dédoublonnage

Lorsque on parle de qualité des données, l’une des premières fonctions qui nous vient à l’esprit est d’éliminer les doublons que nous avons dans nos données.

Data Fusion a le composant Distinct que nous pouvons positionner comme l’avant-dernier élément de notre pipeline, comme le montre l’image ci-dessous :

Google Cloud Data Fusion Studio

Cependant, si nous utilisons BigQuery comme base de données cible, nous pouvons dédoublonner les lignes directement dans le composant de sortie :

Google Cloud Data Fusion Sink

Récupération des toutes les valeurs possibles de deux sources

Un cas particulier que j’ai dû implémenter était d’obtenir toutes les données différentes parmi les valeurs de deux sources.

Ici je montre deux solutions possibles :

UNION + DISTINCT

Nous pouvons utiliser une logique “à la SQL” pour répondre à cette problématique -> SELECT DISTINCT valeur FROM (table1 UNION table2) :

Google Cloud Data Fusion Studio

CROSS JOIN

Exemple : Récupérer les valeurs différentes entre nom_produit (source1) et ProductName (source2). Enregistrer les valeurs uniques dans une colonne “produit”

  1. Joindre les sources par un outer join afin de récupérer toutes les valeurs possibles et le connecter à un Wrangler (que j’appelle “getDistinct”) :
Google Cloud Data Fusion Studio

2. Sur le Wrangler :

  1. Créer une nouvelle colonne “produit” et assigner la valeur en fonction de l’existence des valeurs originales dans les sources.
  2. Éliminer les colonnes des valeurs originales.
set-column :produit 
(!empty(nom_produit) and empty(ProductName)) ? nom_produit : 
(empty(nom_produit) and !empty(ProductName)) ? ProductName : 
(!empty(nom_produit) and !empty(ProductName)) ? ProductName : 
(empty(nom_produit) and empty(ProductName)) ? null : null
drop :nom_produit
drop :ProductName

Testing/débogage de pipelines

Il est possible d’exécuter le pipeline avant son déploiement, pour l’exécuter en mode “hors-ligne” il faut activer le mode “Preview”. Là c’est possible de jeter un œil aux données avant et après chaque transformation.

  1. Activer le mode Preview en cliquant le bouton 1
  2. Exécuter le pipeline en cliquant le bouton 2
  3. Un lien “Preview Data” va apparaître sur chacun des composants. Cliquer ce lien pour la transformation à déboguer (bouton 3).
Google Cloud Data Fusion Studio

4. Data Fusion affiche les données entrantes et les données de sortie sous forme de deux fenêtres. Dans cet exemple les colonnes pa_annulation, pa_timestamp, paidPartition et pa_codeCom sont enlevées. Après la colonne pa_nom est renommée par nom_pays et ses valeurs sont transformées en majuscules :

Google Cloud Data Fusion Preview

Orchestration

L’orchestration sur Data Fusion est particulière. Data Fusion n’a pas d’interface graphique pour enchainer les exécutions ou pour les planifier, et l’ordre s’implémente de droite à gauche. C’est-à-dire, du dernier pipeline au premier. Je m’explique :

A la place de :

Google Cloud Data Fusion Orchestration

Approche Cloud Data Fusion :

Google Cloud Data Fusion Orchestration

Implémentation

  1. Ouvrir le dernier pipeline déjà déployé et cliquer sur “Inbound Triggers” :
Google Cloud Data Fusion Triggers

2. Configurer le trigger (le déclencheur) :

  1. Parmi la liste des pipelines déployés, cliquer sur celui à exécuter avant notre pipeline
  2. Sélectionner le déclencheur parmi les valeurs possibles : Succès, Échec ou Stop.
  3. Activer le pipeline en cliquant le bouton “Enable Trigger”
Google Cloud Data Fusion Triggers

Points clés à retenir

Data Fusion est un outil pour transporter et transformer des données, il permet de déposer facilement des fichiers dans un datalake grâce à la configuration zéro qui lui est appliquée.

“La réalisation réside dans la pratique.” – Bouddha

Comme monsieur Bouddha l’indique, plus nous pratiquons mieux nous travaillons, donc je t’encourage à créer des pipelines. Si tu ne dispose pas de données, Cloud Data Fusion met à disposition d’ensembles de données des Best Sellers (disponible dans le Hub).

Autres bénéfices :

  • Les transformations qui ne peuvent pas être appliquées à travers les composants de l’outil ETL, peuvent être écrites en Python.
  • Si une orchestration complexe est requise, Cloud Composer (Airflow) peut toujours être utilisé.
  • Comme il est basé sur un projet open source (CDAP), les pipelines peuvent être migrés vers un environnement en dehors du cloud.

La documentation peut être toujours améliorée. N’hésites pas laisser un commentaire où à nous contacter pour toutes questions ou info complémentaires 🙂

Liens utiles

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *