Comment exécuter une procédure stockée sur Superset

par | Juil 25, 2022

Apache Superset

Superset : le choix dataviz de Mindbaz

Superset est un logiciel open source de Datavisualisation utilisé au sein de Mindbaz. 

Il est parfait pour visualiser nos données sur plus de 800 bases de données SqlServer.

Superset a besoin d’un dataset, c’est à dire une table ou une requête, issue d’une source de données (comme une bdd) pour afficher des données dans un dashboard. 

Problème : Superset n’autorise pas l’exécution de procédure stockée dans une requête d’un dataset. 

Les experts data de Mindbaz vous donnent leur guide pour exécuter une procédure stockée sur Superset.

Procédure stockée, dans quel cas en a-t-on besoin?

Générer un dashboard efficace

Notre besoin principal est de pouvoir générer un dashboard qui peut se connecter dynamiquement à l’une de nos bases de données. On va utiliser un filtre qui affiche toutes nos BDDIl n’est pas envisageable de créer 800 dataset se connectant à 800 BDD différentes : le rendu serait illisible. 

Pour y parvenir, utilisez une procédure stockée qui prend en paramètre un nom de la base de données en entrée et qui exécute la requête en remote query.

Filtrer efficacement

Une procédure stockée permet également de faire du sql dynamique plus avancé avec du tsql et des variables. C’est pourquoi de nombreux cas de figure peuvent exister nécessitant une procédure stockée. En effet, lorsque de nombreuses bases sont distribuées sur plusieurs dizaines de serveurs, la procédure simple n’est plus possible. La solution est donc d’appeler une procédure stockée.

Comment appeler une procédure stockée dans superset?

Une solution de contournement simple est d’utiliser OPENQUERY

OPENQUERY permet d’exécuter une requête sur un serveur lié spécifié. On peut donc lui passer une requête qui exécute notre procédure stockée en paramètre!

superset openquery

La requête a donc un format classique “SELECT * FROM “ et est donc acceptée par Superset.

Il vous suffit donc de créer cette requête dans le SQLLab, de l’exécuter et de cliquer sur le bouton “explore” pour pouvoir créer un dataset et l’utiliser dans un nouveau chart (de type table par ex).

Comment rendre dynamique les paramètres de ma procédure stockée?

Dans mon exemple, ma procédure stockée prend en paramètre param1 (int)  et param2 (texte). Je voudrais par exemple que l’utilisateur puisse choisir le param2 depuis une liste déroulante dans mon dashboard.

1. Créer un chart de type filter box

Ce chart permet de sélectionner une colonne (“myFilterColumn” par exemple) d’un dataset dans un formulaire.

superset filterbox

Le système de filtrage de superset ajoute automatiquement une clause where à notre requête. Nous ne pouvons donc pas modifier le paramètre passé à notre procédure stockée grâce à ce système.

2. Utiliser la fonction filter_values

Pour contourner ce filtre, il faut utiliser le système de templating jinja dans notre requête openquery. L’objectif est d’écrire la valeur du filtre de notre paramètre au bon endroit dans le sql.

Pour cela, on utilise la fonction filter_values(‘myFilterColumn’) qui retourne dans un dictionary les valeurs sélectionnées dans la liste déroulante.

Au final,  »param2 » est remplacé par 

''{{ ''.join(filter_values('myFilterColumn'))}}''

 Résultats 

Dans la requête de notre dataset, cela donne :

superset requete
SELECT  * FROM  OPENQUERY(
LINKED_SERVER_NAME, 
'EXECUTE myStoredProcedure param1, ''{{ ''.join(filter_values('myFilterColumn'))}}''
WITH RESULT SETS((    id int,
    [name] varchar(255),
    id_sent int,
    nbAddressSent int,
    nbOpeners int,
    nbClickers int    ))'
    ) 

 

e  ».join() permet d’avoir une chaîne vide ‘’ si le dictionary retourné par la fonction est vide!

et les {{ }} encapsulent notre code jinja.

Attention : avec cette méthode, votre chart ne fonctionne que dans un dashboard qui a le bon filtre. 

 

Vous connaissez désormais notre technique en 2 étapes pour exécuter une procédure stockée sur Superset, l’outil de datavisualisation de Mindbaz. 

Vous n’avez plus qu’à tester votre chart dans un dashboard qui contient à la fois le filterbox et votre tableau.

Pour les néophytes, on vous a concocté un lexique des termes utilisés : 

Lexique procédures stockées et datavisualisation

Datavisualisation

La visualisation de données (ou Dataviz) regroupe les moyens qui permettent de représenter graphiquement des données en masse. La datavisualisation est particulièrement utile pour faciliter la compréhension de la data collectée. 

Les avantages à utiliser un outil de datavisualisation

  • Gagner du temps
  • Accélérer les processus de décision
  • Interagir avec les données
  • Comprendre les informations
  • Enregistrer facilement la data
  • Présenter en interne et en externe des chiffres clés

Procédure stockée

Une procédure stockée, ou stored procedure, est un bloc de code créé afin d’exécuter un ensemble d’instructions SQL. Ces procédures sont stockées dans un Système de Gestion de Base de Données (SGBD) et peut être appelée pour être exécutée sur un autre serveur.

Logiciel open source

 Le logiciel open source signifie que le code du software est accessible publiquement. N’importe qui avec des connaissances en développement web peut donc utiliser et  modifier le programme. L’objectif d’outil open source est de pousser à la collaboration. 

Dataset

 Dataset veut dire jeux de données. C’est un ensemble de données qui peuvent être consultés, analysés et modifiés.