Contexte général

Snowflake est une "modern data platform" hébergée dans le cloud. L’hébergement des données se fait dans un cloud au choix du client (Azure, Google ou AWS). Snowflake permet notamment de stocker, organiser, transformer et analyser de gros volumes de données, qu’elles soient structurées ou semi-structurées. Il est possible d’utiliser différents langages pour réaliser cela, notamment du SQL et du Python.

Talend est une solution d’intégration de données globale comportant plusieurs modules (ESB, ETL, ELT, API, Data Preparation, Data Quality, Data Stewardship, Change Data Capture). Dans notre contexte, nous allons utiliser la partie Data Integration. Il est donc possible d’utiliser Talend comme un ETL “classique” mais aussi comme un ELT.

Dans cet article, nous allons voir comment répliquer des données sources positionnées sur un SQLServer vers Snowflake avec Talend, et comment les transformer sur Snowflake grâce aux composants ELT disponibles.

Différences ELT Vs ETL

Intégration de données avec Talend et Snowflake

Ingestion des données sources

Afin de transformer les données en mode “ELT”, il faut dans un premier temps récupérer les données de façon classique et les insérer dans Snowflake.

Nous ouvrons donc une connexion SQLServer pour notre source et une connexion Snowflake pour notre cible avec le composant tDBConnection :

Intégration de données avec Talend et Snowflake

Sur la connexion Snowflake, on renseigne le compte, l’identifiant et le mot de passe ainsi que la base de données, le schéma et le moteur d’exécution de Snowflake (Warehouse). Il faut également  renseigner le rôle dans les paramètres avancés.

Intégration de données avec Talend et Snowflake

On réplique ensuite nos données depuis notre base SQLServer vers Snowflake avec les composants tDBInput et tDBOutput. On utilise les composants de connexion déjà présents dans le job Talend. Dans notre exemple, notre table se nomme “CUSTOMER” et contient les données de clients localisés dans différentes villes (Lyon, Nantes, Bordeaux, Toulouse…).

Intégration de données avec Talend et Snowflake

Dans le composant d’input, on renseigne la requête SQL et on définit le schéma de sortie.

Intégration de données avec Talend et Snowflake

Dans le composant d’output, on renseigne le nom de la table cible. Si le nom n’est pas renseigné, il prend par défaut le nom du lien d’entrée (ici row1). On choisit ensuite la stratégie d’intégration qui convient, pour notre cas “DROP IF EXISTS AND CREATE” et “INSERT”.

Intégration de données avec Talend et Snowflake

Transformation des données

En mode ELT, plusieurs solutions existent :

  • Utiliser le composant Talend dédié à l’ELT
  • Exécuter des procédures stockées et développées dans Snowflake
  • Exécuter des commandes SQL via le composant tSnowflakeRow

Transformation des données via le composant ELT de Talend

Maintenant que nos données sont dans Snowflake, nous allons utiliser le composant dédié à l’ELT de Talend pour effectuer des transformations directement dans Snowflake. Pour cela, nous allons exploiter les composants tELTInput, tELTOutput et tELTMap pour créer le job suivant :

Intégration de données avec Talend et Snowflake

Notons que les composants d’entrée (tELTInput) et de sortie (tELTOutput) n'établissent pas de connexions à la base de données. On renseigne simplement le nom du schéma et de la table souhaitée ainsi que la technologie utilisée (Mapping Snowflake) et le schéma de sortie.

Intégration de données avec Talend et Snowflake

La connexion à la base se fait sur le composant tELTMap, responsable de la transformation des données et de l’exécution des opérations nécessaires. On peut utiliser une connexion déjà ouverte dans notre job en cochant “Utiliser une connexion existante”.

Intégration de données avec Talend et Snowflake

Sur le mapping, on ajoute manuellement les tables en entrée (croix verte dans le coin supérieur gauche).

Intégration de données avec Talend et Snowflake

On peut ensuite créer nos jointures et faire nos transformations comme dans un tMap classique. Dans notre cas, on va simplement afficher le nombre de commandes et la somme totale par pays en utilisant les fonctions SUM et COUNT DISTINCT et une clause GROUP BY. À noter que dans le composant EltMap, on utilise du code SQL pour créer des formules, contrairement au composant tMap où l’on utilise du code Java.

Intégration de données avec Talend et Snowflake

Dans le bandeau inférieur, on a la possibilité de voir la requête générée par le mapping (onglet Requête SQL générée pour la sortie table1) :

Intégration de données avec Talend et Snowflake

On pourra donc tester notre transformation directement en exécutant la requête dans Snowflake afin de vérifier le résultat.

On relie ensuite la sortie du mapping au composant tELTOutput, on renseigne le nom du schéma et de la table de sortie ainsi que la stratégie d’intégration : on supprime et crée la table et on fait une insertion.

Intégration de données avec Talend et Snowflake

La table générée sur Snowflake :

Intégration de données avec Talend et Snowflake

Appel d’une procédure dans Snowflake

On a également la possibilité d’appeler des procédures stockées Snowflake sur Talend avec le composant tDBRow. Dans notre cas, on va seulement répliquer une table de la même base de données. La procédure stockée exécute une instruction SQL dynamique CREATE OR REPLACE TABLEAS SELECT * FROM … avec les paramètres renseignés.

Intégration de données avec Talend et Snowflake

Intégration de données avec Talend et Snowflake

De la même façon, n’importe quel ordre SQL pourra être exécuté à l’aide de ce composant (INSERT, DELETE, UPDATE, MERGE…).

Performances ELT / ETL

Agrégation de données / volumétrie faible en sortie

Nous utilisons un moteur XS, soit le plus petit de Snowflake.

Pour le job créé à l’étape précédente, nous obtenons un temps d’exécution de 6 secondes pour une volumétrie de 3 millions de lignes en lecture et 25 lignes en écriture. En appliquant les mêmes transformations avec les composants ETL, nous obtenons un temps d’exécution de 50 secondes (cf ci-dessous).

Intégration de données avec Talend et Snowflake

Copie de données sur 15 000 000 de lignes

Nouvel exemple avec une copie de données d’une table à une autre. Nous utilisons toujours un moteur XS, soit le plus petit de Snowflake.

Comme vous pouvez le voir ci-dessous, en ELT, nous obtenons une insertion de 15 000 000 de lignes en 15 secondes.

Intégration de données avec Talend et Snowflake

Intégration de données avec Talend et Snowflake

En mode ETL, nous obtenons cette même insertion en 138 secondes.

Intégration de données avec Talend et Snowflake

Le gain est donc de presque 90% entre les deux fonctionnements.

Copie de données sur 150 000 000 de lignes

Nous utilisons à nouveau un moteur XS, soit le plus petit de Snowflake. Et nous augmentons la volumétrie (x10) avec 150 000 000 de lignes à copier.

En mode ELT, nous sommes à 82 secondes.

Intégration de données avec Talend et Snowflake

Intégration de données avec Talend et Snowflake

En mode ETL, nous obtenons un résultat de 1650 secondes

Intégration de données avec Talend et Snowflake

Le gain est de 95% dans ce cas-là.

Nous réalisons le même test avec un moteur XL (8x plus puissant que le XS). Nous obtenons les résultats suivants :

  • ELT : 13 secondes
  • ETL : 1003 secondes

Conclusion performances

Intégration de données avec Talend et Snowflake

Nous voyons donc que le gain reste à peu près constant par rapport à la volumétrie lors de l’utilisation du même moteur. Cependant ce gain explose lorsqu’on profite de la scalabilité de la puissance du moteur de Snowflake.

Axes d'améliorations et optimisations 

Côté optimisation des coûts et gain de temps sur un flux global, Snowflake ayant un moteur d’exécution très performant comme nous avons pu le constater, il est indispensable de paralléliser au maximum l’ingestion et la transformation des données dans notre ordonnancement Talend.
Côté Talend, l’ajout de quelques composants pourraient être bénéfiques pour profiter encore plus de l’ELT. Nous avons identifié quelques points :

  • L’amélioration du composant tELTMap, pour le côté intuitif, afin de ne plus devoir écrire de code SQL, par exemple pour les SUM / GROUP BY. Cela faciliterait la prise en main de l’ELT par des novices en SQL
  • La possibilité d’exécuter une transformation en ELT via les composants classiques
  • La possibilité de pouvoir faire des “MERGE” (insertion ou mise à jour) dans les composants output
  • La création d'un composant ELT permettant d’écrire notre code SQL complètement via un SELECT, avec une partie graphique pour sélectionner le mode chargement (INSERT, DELETE+INSERT, MERGE, DELETE), le type de table (ou vues), etc… pour les personnes ayant une forte affinité SQL

Pour conclure

Nous avons vu que l’utilisation de l’ELT améliore grandement les performances sur Snowflake par rapport à l’utilisation de l’ETL classique de Talend.

En effet, avec l’utilisation d’un ETL classique, Talend récupère les données sur son serveur d’exécution et les retravaille afin de les renvoyer dans Snowflake. Alors qu’en mode ELT, les données restent à l’intérieur de Snowflake, ce qui permet de bénéficier de la puissance de la plateforme.

Les composants ELT Talend sont disponibles sur plusieurs bases de données et plateformes. Cependant, elles ne vont pas toutes offrir les mêmes performances. De même, l’efficacité d’une utilisation en mode ETL variera en fonction de la puissance de votre base de données.

Dans une approche moderne, avec des bases de données de plus en plus performantes, l’ELT devient un incontournable pour traiter des volumétries de données importantes, et l’ETL sera réservé aux flux inter applicatifs et à la réplication des données.

Vous souhaitez bénéficier d'experts, de développeurs, ou d'une formation sur Snowflake ou Talend ? Rendez-vous sur la page Contact.