Databricks : on stream des données dans Power BI en PUSH

Aujourd’hui nous allons voir comment pousser des données en temps réel dans un Dashbord Power BI avec Databricks grâce à la technologie structure streaming de Spark. Le but sera bien sûr de réaliser de magnifiques Dashboard avec des données qui se mettent à jour en temps réel et c’est vraiment la classe à Dallas !

giphy

Il existe déjà des tuto sur différents sites qui parlent de streaming avec Databricks et Power BI. Généralement, ils vont soit utiliser un dataset en directquery connecté avec le driver Spark de Power BI, ce qui d’un point de vue perf n’est pas tiptop, soit ajouter d’autres composants comme Azure Stream Analytic en “passe plat” pour qu’il pousse les données dans Power BI. Avec la solution que je vous propose dans cet article, Databricks va directement pousser les données dans Power BI.

Voici comment faire…

Côté Power BI

On va d’abord créer un streaming dataset dans un workspace Power BI

chrome_nvLSgSxTVB

Choisir le type “API”

chrome_djJWg882Wk

Définir le nom et la structure de la table : un champ “timestamp” de type DateTime et un champ “value” de type Nombre. Activer aussi l’analyse de données d’historique.

chrome_i3g0lHiaI0

Puis très important, récupérer l’url push que l’on utilisera plus tard

chrome_Munuoscl4s

Créer un nouveau Dashboard

chrome_nrECpSWht3

Puis ajouter des vignettes de type données en temps réel

9f0F5YBY928MQR7PA11N

Sélectionner le dataset streaming que vous venez de créer

VcoqF2mqNg

Choisir par exemple le type carte avec le champ value qui permettra d’afficher la dernière valeur reçu dans le dataset streaming

OrjNimGBog

Ajouter d’autres vignettes de la même façon dans votre Dashboard

chrome_7wEsRRcGC3

Coté Databricks

Connectez vous à votre workspace Databricks puis créer un cluster en choisissant la version 2.11 de Scala

10qRY255nn

Ajouter la librairie “org.scalaj:scalaj-http_2.11:2.4.2” via Maven

e3Yi3N4VF5

Nous allons maintenant créer un nouveau notebook scala connecté à ce cluster, puis coller le code suivant en remplaçant <URL PUSH> par la vraie url du dataset streaming copiée lors de l’étape de création du dataset au début de l’article

import org.joda.time._
import org.joda.time.format._
import scalaj.http._

import org.apache.spark.sql.ForeachWriter
import org.apache.spark.sql._

var urlpbi = "<URL PUSH>"
var stream = spark.readStream.format("rate").load()

def json(timestamp: String, value:String): String = s"""{"timestamp" :"$timestamp","value" :"$value"}"""

val writer = new ForeachWriter[Row] {
  override def open(partitionId: Long, version: Long) = true
  override def process(row: Row) = {
    //println(row)
    val url = urlpbi
    val result = Http(url).postData(json(row(0).toString, row(1).toString))
    .header("Content-Type", "application/json")
    .header("Charset", "UTF-8")
    .option(HttpOptions.readTimeout(10000)).asString
    
  }
  override def close(errorOrNull: Throwable) = {}
}

val query =
  stream.writeStream
 .foreach(writer)
 .start()

Et si tout ce passe bien lorsque l’on exécute le notebook cela donnera ça :

dbxpbi2

Cet exemple utilise une source streaming de démo qui affiche un compteur qui s’incrémente toutes les secondes.

chrome_Onj61LCp5Z

Dans un cas réel, il faudra bien sûr se brancher à une source streaming comme Azure Event Hub ou Azure CosmosDB Changefeed avec de vraies données. Et il faudra aussi prévoir un stockage type Data Lake en parallèle car les Dataset Power BI ne sont pas vraiment persistants : rétention de 200 000 lignes max, puis suppression des lignes les plus anciennes en mode FIFO… Pour la partie code, on peut aussi aller plus loin et faire plus propre en utilisant les API Power BI avec une véritable authentification, au lieu des URL “guest” utilisée dans cet article… mais le principe reste le même Smile

Plus d’infos :

FIN

FADATA

Fabien Adato est Customer Engineer Data et AI chez Microsoft. Après avoir intégré la société CGI Business Consulting où il rejoint une équipe dédiée à la Business Intelligence, il fait ses premières armes sur la solution Microsoft SQL Server. Pendant plus de 4 ans, il acquiert des compétences techniques et fonctionnelles sur toute la chaîne de valeur de la BI (ETL, Base de Données, Cube Olap et Rapport). Il a pu se spécialiser également sur de nouvelles technologies de la Data et notamment Hadoop, Pig et Hive, ainsi que des technologies self-service BI, le No-SQL comme la base de données MongoDB et le moteur d’indexation ElasticSearch. Il entre chez AZEO en 2014 puis Avanade en 2021 puis Microsoft en 2021 pour y assurer le poste de CE DATA / AI, autour des technologies Microsoft SQL Server, Power BI et Azure Data.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.