Snowpark Migration Accelerator : Atelier Pipeline - Évaluation

Comme avec SnowConvert, nous exécuterons le code dans SMA, évaluerons le résultat, résoudrons les problèmes et l’exécuterons sur la nouvelle plateforme. Cependant, contrairement à SnowConvert, SMA ne se connecte pas à une plateforme source, et ne se connecte pas non plus à Snowflake. Il s’agit d’une application locale qui peut être exécutée entièrement hors ligne. Mais sa puissance réside dans son évaluation. La plupart du travail important sur la conversion a été effectué en créant une compatibilité entre l’API Spark et l’API Snowpark.#x20;

Extraction/Disponibilité du code

Les fichiers que nous utiliserons pour l’atelier AdventureWorks sont ici :

end_to_end_lab_source_code.zip

Dans le cadre de cet atelier, nous supposons que le notebook et le fichier de script que nous convertissons sont déjà accessibles en tant que fichiers. En général, SMA prend des fichiers comme entrée et ne se connecte à aucune plateforme source. Si les fichiers sont orchestrés par un outil spécifique, vous devrez peut-être les exporter. Si vous utilisez des notebooks dans le cadre de Databricks ou de EMR, vous pouvez les exporter sous forme de fichiers .ipynb tout comme le notebook jupyter que nous allons exécuter dans SMA aujourd’hui.#x20;

Cet atelier n’a que quelques fichiers, mais dans une grande migration il est courant d’avoir des centaines ou des milliers de fichiers. Extrayez ce que vous pouvez et exécutez ces fichiers via SMA. Le point positif de l’utilisation d’un outil comme celui-ci est qu’il peut vous indiquer ce qui pourrait vous manquer.#x20;

Notez qu’il existe également un fichier de données : “customer_update.csv”. Il s’agit d’un échantillon du fichier généré localement par le système Point de vente (POS) qu’Adoption Works utilise actuellement. Alors que ce système est également en cours de mise à jour, cette preuve de concept (POC) consiste à faire fonctionner le pipeline existant avec Snowpark plutôt qu’avec Spark.#x20;

Prenons chacun de ces fichiers et déposons-les dans un seul répertoire sur notre machine locale :#x20;

Fichiers sources

Il serait recommandé de créer un répertoire de projet. Vous pouvez l’appeler comme vous le souhaitez, mais pour cet atelier, utilisons spark_adw_lab. Cela signifie que nous allons créer un dossier portant le nom spark_adw_lab, puis créer un autre dossier dans ce répertoire appelé source_files (le chemin ressemblant à /your/accessible/directory/spark_adw_lab/source_files). Cela n’est pas obligatoire, mais aidera à organiser les choses. SMA analysera également tout ensemble de sous-répertoires, afin que vous puissiez ajouter des pipelines spécifiques dans un dossier et des notebooks dans un autre.

Accès#20;

Maintenant que nous avons nos fichiers sources dans un répertoire accessible, il est temps d’exécuter SMA.

Si vous ne l’avez pas encore téléchargé, SMA est accessible à partir du site Web de Snowflake. Il est également accessible depuis la page Migrations de SnowSight dans votre compte Snowflake :

Accéder à SMA

Une fois l’outil téléchargé, installez-le ! Vous trouverez plus d’informations sur l’installation de SMA dans la documentation SMA.#x20;

Utilisation du Snowpark Migration Accelerator

Une fois l’outil installé, ouvrez-le ! Lorsque vous lancerez SMA, il ressemblera beaucoup à son outil partenaire, SnowConvert. Ces deux outils sont conçus sur un concept similaire, où vous entrez des fichiers de code dans l’outil et ceux-ci s’exécutent. Rappel : nous avons vu que SnowConvert peut prendre le DDL et les données directement dans la source et les entrer directement dans Snowflake. SMA ne fait pas cela. Il prend uniquement en compte les fichiers de code comme sources et les génère dans un cadre compatible avec Snowflake. Cela s’explique principalement par le fait que l’outil ne sait pas comment un utilisateur orchestrera son code spark, mais aussi pour le rendre plus sûr à utiliser.#x20;

Une fois que vous avez lancé l’outil, il vous demandera si vous souhaitez créer un nouveau projet ou ouvrir un projet existant :

Nouveau projet

Cela vous amènera à l’écran de création du projet :

Création de projets

Sur cet écran, vous saisirez les détails de votre projet. Notez que tous les champs sont obligatoires. Pour ce projet, vous pouvez saisir quelque chose de similaire à :

  • Nom du projet : Spark ADW Lab

  • Adresse e-mail : votre.nom@your_domain.com#x20;

  • Company name: Your Organization

  • Chemin du dossier d’entrée : /your/accessible/directory/spark_adw_lab/source_files

  • Chemin du dossier de sortie (SMA générera automatiquement un répertoire pour la sortie, mais vous pouvez le modifier : /your/accessible/directory/spark_adw_lab/source_files_output

Quelques remarques sur cet écran de création de projets :

  • Les champs Adresse e-mail et Entreprise sont destinés à vous aider à suivre les projets en cours. Par exemple, pour tout grand SI, il peut y avoir plusieurs adresses e-mail et plusieurs organisations au nom desquelles un seul utilisateur peut exécuter SMA. Ces informations sont stockées dans le fichier de projet créé par SMA.

  • Il y a un champ masqué pour SQL. Notez que SMA peut scanner/analyser le SQL, mais il ne convertit aucun SQL. Il ne peut également identifier que le SQL dans les circonstances suivantes :

    • SQL qui se trouve dans les fichiers .sql

    • SQL qui se trouve dans les cellules SQL dans un notebook Jupyter

    • SQL qui est transmis sous forme de chaîne unique à une instruction spark.sql.#x20;

  • Bien que cette fonctionnalité SQL puisse être utile pour déterminer où se trouve un SQL non compatible avec Snowflake, il ne s’agit pas de l’utilisation principale de SMA. Nous vous proposerons bientôt une assistance supplémentaire pour Spark SQL et HiveQL.

Une fois que vous avez saisi toutes les informations de votre projet, pour ce HoL, nous allons ignorer la phase d’évaluation. (Comment ça ?… est-ce que nous ne créons pas une évaluation ?) Si vous ne souhaitez convertir aucun code, l’exécution d’une évaluation peut être utile, car elle vous permettra d’obtenir l’ensemble complet des rapports générés par SMA. Vous pouvez ensuite parcourir ces rapports ou les partager avec d’autres personnes au sein de votre organisation tout en ne créant pas de copies supplémentaires du code converti. Cependant, tous ces mêmes rapports d’évaluation sont également générés lors d’une conversion. Nous allons donc ignorer le mode d’évaluation pour le moment et passer à la conversion.#x20;

On the Conversion settings page, select Skip Assessment, and then click Continue in the bottom right corner.

Ignorer l’évaluation

Notez que ce que vous « enregistrez » est un fichier de projet local. Toutes les informations que vous avez saisies sur l’écran de création du projet seront enregistrées dans ce fichier texte local portant l’extension « .snowma » dans le répertoire que vous venez de spécifier ci-dessus.

Enregistrer le fichier de projet local

This will take you to the Conversion settings page. From here, you can choose Default Settings to proceed with conversion, or select Customize settings to review and adjust advanced options.

Afficher les paramètres de conversion

Il y a un paramètre qui simplifiera la sortie de cet atelier, à savoir désactiver la tentative de conversion des dataframes pandas vers l’API Snowpark :

Simplifier la sortie

Ce paramètre est actuellement en cours de mise à jour, de sorte que de nombreux avertissements supplémentaires seront ajoutés si cette option n’est pas désélectionnée. La plupart des dataframes pandas peuvent être utilisés dans le cadre de l’implémentation modin de pandas, par conséquent, un simple changement d’appel d’importation devrait suffire pour le moment. Vous devriez trouver une solution à ce problème d’ici la fin du mois de juin 2025. Vous pouvez consulter les autres paramètres, mais nous les laisserons tels quels. Il est important de noter qu’il existe une bibliothèque de tests dont le code de sortie est compatible avec les points de contrôle Snowpark appelés. Il existe des paramètres liés à cela, mais nous ne les modifierons pas dans cet atelier.

Select « Save settings » to save and close your settings.

Fermer les paramètres de conversion

To start the conversion, click Continue in the bottom right corner of the application.

L’écran suivant montrera la progression de la conversion :#x20;

Progression de la conversion

Comme SnowConvert, SMA est en train de construire un modèle sémantique de l’intégralité de la base de code dans le répertoire d’entrée. Il s’agit d’établir des relations entre les éléments de code, les objets SQL et d’autres artefacts référencés, et de créer la sortie la plus proche possible d’un équivalent fonctionnel pour Snowflake. Cela signifie principalement la conversion des références de l’API Spark vers l’API Snowpark. L’équipe d’ingénierie de SMA fait partie de l’équipe d’ingénierie de Snowpark. Par conséquent, la plupart des transformations qui ont lieu ont été intégrées à l’API Snowpark, les changements peuvent donc sembler mineurs. Mais la masse d’informations d’évaluation générées par SMA permet à un projet de migration de vraiment avancer. Un examen approfondi de toutes les informations d’évaluation générées devra avoir lieu ailleurs, car SMA a probablement terminé cette conversion pendant la lecture de ce paragraphe.#x20;

When the SMA has finished, the results page will show the… results.

Page des résultats de la conversion

La page des résultats possède quelques « scores de préparation » qui sont des métriques très simplifiées du niveau de « préparation » de cette base de code pour Snowflake. Nous examinerons les résultats ensuite, mais notez que l’exécution de Snowpark Migration Accelerator est la partie facile. Remarquez qu’il ne s’agit que d’un « accélérateur ». Il ne s’agit pas d’une solution optimale ou d’un outil d’automatisation automatique. Les pipelines qui se connectent à une source de données et génèrent une sortie à une autre ne sont pas entièrement migrés par cet outil et auront toujours besoin de plus d’attention qu’une simple migration de DDL de SQL-à-SQL comme le fait SnowConvert. Mais Snowflake travaille continuellement à rendre cette migration aussi simple que possible.

Interprétation de la sortie

SMA, encore plus que SnowConvert, génère une grande quantité d’informations d’évaluation. Il peut être difficile d’analyser les résultats. Il existe de nombreuses directions différentes, en fonction de ce que vous voulez réaliser.#x20;

Notez qu’il s’agit d’un scénario extrêmement simple, de sorte que certaines des étapes que nous allons suivre vous sembleront excessives. (En d’autres termes, est-ce que nous avons réellement besoin d’analyser les dépendances présentes dans ce projet alors qu’il n’y a que deux fichiers et que nous pouvons simplement… regarder ?) L’objectif est d’effectuer ce que nous recommandons normalement, même dans ce petit POC. Mais soyons clairs… la portée est claire, et il n’y a que deux fichiers. Nous avons simplement besoin que les deux fonctionnent comme ils le font dans la source.#x20;

Scores de préparation

En gardant cela à l’esprit, jetons un coup d’œil à la première partie de la sortie que vous verrez dans l’application : les scores de préparation. Il y aura plusieurs scores de préparation et vous pourrez développer chacun d’entre eux pour mieux comprendre ce qu’il contient.#x20;

Affichage des scores de préparation

Chaque score de préparation est un calcul très basique du nombre de fonctions ou d’éléments dans une API qui sont pris en charge dans Snowpark/Snowflake divisé par le nombre de toutes les fonctions ou éléments liés à cette API pour cette exécution. Le calcul vous montrant comment le score est calculé est affiché lorsque vous développez la fenêtre. Vous pouvez également en savoir plus sur la manière d’interpréter les scores de préparation en sélectionnant « Comment lire les scores » dans le coin supérieur gauche de cette fenêtre.#x20;

This execution has a Snowpark API Readiness Score of 96.02%. (Please note that yours may be different! These tools are updated on a biweekly basis and there may be a change as compatibility between the two platforms is ever evolving.) This means that 96.02% of the references to the Spark API that the tool identified are supported in Snowflake. “Supported” in this case means that there could be a similar function that already exists or that the SMA has created a functionally equivalent output. The higher this score is, the more likely this code can quickly run in Snowflake.

(Note that this 96.02% of references are either supported directly by the Snowpark API or they are converted by the SMA. Most of them are likely supported directly, but you can find out exactly what was converted and what was passed through by reviewing the SparkUsagesInventory.csv report in the output Reports folder generated by the SMA. We will not walk through that in this lab as we will see what is NOT supported in the Issues.csv file, but you can use this information for reference.)

Il existe d’autres scores de préparation et vous pouvez en voir plus que ce qui est indiqué dans l’atelier, car les scores de préparation changent avec le temps. Cet atelier ne présente pas chacun d’entre eux, mais notez qu’un score faible sera toujours intéressant à comprendre. #x20;

Code analysé

Juste en dessous de chacun des scores de préparation se trouve un petit indicateur qui vous permet de savoir s’il y avait un code qui n’a pas pu être traité :

Code qui n'a pas pu être traité

Ce nombre représente le pourcentage de fichiers qui ont été entièrement analysés. Si ce nombre est inférieur à 100 %, cela signifie que du code n’a pas été analysé ou traité par SMA. C’est le premier endroit où vous devriez commencer à chercher pour résoudre les problèmes. Si le taux est inférieur à 100 %, vous devriez voir où les erreurs d’analyse se sont produites en consultant le résumé du problème. C’est le premier endroit où vous devez chercher lorsque vous travaillez avec la sortie de SMA car c’est le seul endroit où il peut être utile d’exécuter à nouveau l’outil si une grande quantité de code n’a pas pu être analysée.