Mise en place d’une architecture Lambda avec Power BI et Logic Apps

Par Nidhal BRIBECH, de la practice Data Experience

  1.     Introduction

 A travers ce tutoriel, nous allons mettre en place une architecture Lambda à l’aide des outils Microsoft à la fois sur le cloud et en local.

L’architecture Lambda permet de stocker et de traiter de larges volumes de données (batch) tout en intégrant les données les plus récentes dans un flux de streaming.

Pour nous rapprocher de cette architecture, j’ai choisi d’utiliser le service Microsoft Azure « Logic App » permettant de récupérer les données sous forme de batch et Power BI en ligne pour la partie donnée en temps réel.    

 2.     Scénario

 Nous souhaitons stocker les tweets provenant des médias français présent sur Twitter à la fois sous forme de fichiers csv dans un blob storage que l’on pourra exploiter une fois que l’on a une volumétrie importante. Mais aussi agrémenter une solution Power BI en ligne qui permettra d’étudier les tweets les plus récents (par exemple tendances des tweets du mois présent).

 3.     Architecture

                                 

 4.     Pré requis

 Créer un compte Twitter pour accéder aux données fourni par l’API (https://twitter.com/).

Installer Power BI Desktop (disponible gratuitement à l’adresse suivante : https://powerbi.microsoft.com/fr-fr/desktop/).

Avoir un compte Power BI (Choisir « partage et collaboration dans le cloud » https://powerbi.microsoft.com/fr-fr/get-started/).

Avoir un compte Azure (Compte gratuit avec 170€ de crédit https://azure.microsoft.com/fr-fr/).

 5.     Créer un blob Storage

 La première étape consiste à créer un blob storage pour stocker les tweets qui remplissent nos critères. Ce type de stockage enregistrera nos données sous la forme de fichiers textes.

 

 

 On renseigne son nom, son type, l’endroit où il se trouve et on renseigne une ressource group (sinon on la crée en même temps que le blob storage en cochant « Create New »).

 On aura besoin de la clé (key1) et du nom (Storage account name) pour la partie Power BI desktop, donc on les garde dans un fichier texte.

 

 

 Par la suite, on crée un container qui va recevoir nos tweets à la manière d’un dossier.

 6.     Créer un Logic Apps

 La logic app va permettre d’exécuter automatiquement un processus qui récupèrera les tweets selon des critères spécifiques, à une fréquence prédéfinie et selon un enchaînement d’opérations.

On renseigne son nom, la ressource groupe (la même que celle du blob storage) ainsi que sa localité.

En cliquant sur Logic App Designer, nous arrivons sur l’interface graphique. Une multitude de triggers (déclencheurs) sont disponibles mais celui qui nous intéresse est « When a new tweet is posted ».

 On se connecte à l’aide de nos identifiants Twitter pour permettre la connexion entre les flux Twitter et la logic app.

 

 On définit les filtres de recherche et l’intervalle entre chaque exécution (dans notre exemple, il s’agit de tweets provenant de comptes d’actualités en France que l’on recherche toutes les 5 minutes).

 Nous récupérons les tweets grâce à ce trigger et allons les traiter avec deux actions.

On crée une action à la suite du trigger (cliquer sur Add an action).

Et nous allons choisir Azure Blob Storage.

Plus précisément l’action « Create blob » pour stocker chaque tweet en fichier unique.

On établit une connexion avec notre container préalablement crée en renseignant un nom de connexion (au choix) puis en sélectionnant le blob storage correspondant :

Une fois la connexion établit, on renseigne le container de réception, le nom des blobs et le contenue des blobs.

Blob name prend comme nom la date au moment de la création du blob suivi de l’extension « .txt » pour que le fichier soit exploitable (on verra cela par la suite sur Power BI).

concat(utcNow(),'.txt')

 Blob content contiendra les éléments que nous souhaitons garder (User Name, CreatedAt et Tweet Text) et on les sépare à l’aide d’un point-virgule pour mieux les délimiter.

concat(triggerBody()?['UserDetails']?['FullName'],';',
triggerBody()?['CreatedAtIso'],';',triggerBody()?['TweetText'])

 

En parallèle à cela, nous allons ajouter une action qui permettra de charger les données dans un tableau de bord Power BI en ligne (service cloud).

Mais avant cela il faut créer un jeu de données sur son espace de travail en ligne (https://app.powerbi.com/).

 Une fois créé, cliquez sur « Créer » en haut à droite, puis sélectionnez « Jeu de données de streaming ».

 

 Il faut choisir « API ».

 

Ensuite, on renseigne les valeurs que l’on souhaite extraire des tweets (TweetText, UserName, CreatedAt).

 Pour cela on renseigne un nom de jeu de données et pour chaque valeur un nom et un type.

On valide la création puis cliquez sur « Terminé ».

 Maintenant que nous avons un jeu de données en ligne, il faut l’agrémenter d’éléments. Donc on retourne sur notre logic app et on ajoute une action en parallèle du blob storage.

 Recherchez Power BI puis sélectionnez l’icône correspondante.

Puis on choisit l’action « Add rows to a dataset » qui va permettre d’ajouter les valeurs à notre jeu de données en streaming.

On renseigne :

·        Le workplace, le dataset et la table de notre application Power BI en ligne.

·        Les valeurs pour les colonnes de notre table à agrémenter.

Sauvegardez en cliquant sur Save puis lancez la logic app (Run). Il faut que les comptes en écoute tweetent pour démarrer le processus automatiquement.

 

Suite à l’exécution nous avons confirmation du bon déroulement des actions.

En retournant sur le container, nous retrouvons les fichiers créés.

Et en allant sur Power BI dans le cloud, on retrouve aussi les données des tweets.

 En sélectionnant la visualisation Table puis en cochant les divers champs, on retrouve les tweets stockés depuis la première itération du Logic App. On pourrait ajouter un filtre afin de n’afficher que les tweets du mois en cours pour faire une analyse en temps réel.

 

7.     Exploitation sur Power BI desktop.

 Pour récupérer les fichiers et les exploiter sur Power BI desktop, on procède d’abord en ajoutant les données via le cloud « Azure ». Obtenir les données -> Plus.

On choisit « Stockage Blob Azure ».

 On renseigne les informations de connexion concernant notre blob storage (blob storage -> Access keys).

On renseigne la clé (key1), puis se connecter.

 

En cochant sur le container « tweets », on retrouve tous les fichiers blob créés (si rien ne s’affiche cliquez sur le bouton de rafraîchissement en haut à droite).

Puis chargez les en cliquant sur « Charger ».

Vous verrez qu’une table a été créée avec plusieurs champs. Cliquez sur « Modifier les requêtes », à partir du menu Accueil.

Nous retrouvons nos éléments, cependant il est nécessaire de les extraire pour en tirer les informations que l’on a concaténées.

Pour cela, il faut faire clic droit sur la colonne « Content » puis choisir Transformer -> Texte.

 On trouve les éléments mit à la suite et bien séparé de points-virgules. On peut ainsi transformer cette colonne en plusieurs données exploitables. Clic droit sur la colonne « Content » puis Fractionner la colonne -> Par délimiteur.

 On choisit les paramètres ci-dessous :

·        Délimiteur : Point-virgule.

·        Fractionner à : Chaque occurrence du délimiteur.

 On a bien les colonnes correspondantes aux éléments des tweets que l’on a souhaité garder, on peut changer le nom des colonnes pour plus de clarté.

Si une 4ème colonne sans données est créée, il suffit de la supprimer (clic droit sur la colonne, supprimer).

 

Voici les tweets que l’on a enregistré depuis le début du processus. On pourra faire une analyse une fois le volume de données devenu très important.

 

8.     Conclusion

 En suivant ce tutoriel, on retrouve une architecture lambda, d’un côté Power BI desktop avec les données stockées dans un blob storage, de l’autre Power BI Cloud avec les données les plus récentes et en temps réels.

Ainsi on peut choisir des axes d’analyses variés pour représenter l’information et le sens que nos données fournissent.

Cependant, cette architecture peut poser un problème car chaque tweet est stocké deux fois (fichier blob et ligne dans le cloud Power BI) ce qui pourrait s’avérer couteux en stockage avec une volumétrie de données importante.

[Build 14] – Dealing with Data : Storage, Roaming, and Backup on Windows and Windows Phone

Mail de John
Samedi 5 avril 2014 20:32
Dealing with Data : Storage, Roaming, and Backup on Windows and Windows Phone
Les problèmes à résoudre :
– Chaque localisation a une API différente
– Les interactions avec les localisations des utilisateurs sont limitées.
– Créer des applications cross-device est difficile.
– Les données précieuses des données sont piégées dans les vieux appareils des utilisateurs

StorageFile and StorageFolder :
La plupart des contenus des fichiers sont gérés par ces classes
o Fichiers/Dossiers locaux
o File activation
o Media libraries
o Share contract
o Pickers
Les métadonnées disponibles varient par fichier.

Description du modèle de fichiers :
– Roaming
– Local
– LocalCache
– Temp

Dans Windows Phone 8, les fichiers existants dans l’IsolatedStorage sont disponibles avec l’API WinRT.


Accéder aux contenus de l’utilisateur

Les données de l’utilisateur sont exposées via KnownFolders (RemovableDevices, MusicLibrary, PicturesLibrary, VideosLibrary) et protégées par des capabilities.


Access Cache

Il est utilisé pour maintenir l’accès aux fichiers partagés (file activation, share contract, file picker). Il est mémorisé par le système même après une suppression. Il faut quand même copier le fichier si on veut le modifier.


Storage for Windows Phone Silverlight 8.1

Nouveau modèle de données :
– Roaming/Temp/Local
– IsolatedStorage == Local Folder
– IsolatedStorage APIs fonctionnent toujours

Les KnownFolders APIs sont disponibles pour les media et cartes SD. Les API XNA fonctionnent toujours.
Démonstration (Stockage de fichiers, CommonFileQuery, Pagination, Possibilité de préciser dans l’émulateur un dossier simulant une carte SD).

Roaming
OneDrive stocke jusqu’à 100Ko, si la taille est supérieur la synchronisation s’arrête. La synchronisation entre Windows 8 et Windows Phone fonctionne.

Bonnes pratiques pour le roaming :
– Settings
– Rester sur des types WinRT
– Eviter les dépendances entre le roaming et les fichiers

Démonstration du roaming entre une application Windows et une application Windows Phone (attention il faut que les appxmanifest des deux applications aient le même PackageFamilyName)

Backup/Restore
Les données du dossier AppData sont sauvegardées une fois par jour et ce même si le Roaming est désactivé. OneDrive ne maintient qu’un seul Backup par device et par application. La taille du backup compte dans la taille du stockage OneDrive de l’utilisateur.

La fonctionnalité de sauvegarde est activée par défaut pour toutes les applications 8.1 mais pas pour les applications 8.0 ou pour les applications d’entreprise ou side-loadée. On peut désactiver ce backup soit en sauvegardant le contenu dans le dossier LocalCache ou en décochant la fonctionnalité dans le manifest.

Startscreen
Dans Windows Phone 8.1 le StartScreen avec ses tuiles est aussi sauvegardé et peut donc être restauré suite à une installation. Certaines tuiles peuvent faire références à des fichiers du stockage local qui n’existeraient plus suite à une restauration. Il faut donc s’assurer que les applications que l’on développe ne plantent pas dans ce cas.
John