Accueil > Bases de données relationnelles et indexation du contenu > Le langage DMX : comparaison avec le langage SQL de SAS

Le langage DMX : comparaison avec le langage SQL de SAS

mardi 1er juin 2010, par Natalia J.

Le langage DMX est une extension du langage SQL, présent dans SQL Server. C’est un langage qui peut s’utiliser pour créer la structure de nouveaux modèles d’exploration des données, de les explorer, les gérer et d’y effectuer des prévisions.

L’exploration des données, qui est aussi connue sous le nom de data mining, consiste en une extraction de connaissances valides et exploitables à partir de grandes quantités de données.

Les instructions DMX.

Il existe deux types d’instructions DMX : les instructions de définition des données et les instructions de manipulation des données. Ces dernières permettent de créer, traiter, supprimer, effectuer des prévisions dans des modèles d’exploration des données.

Dans le langage DMX, les instructions de définition de données permettent de créer, supprimer, importer ou exporter des modèles d’exploration des données. Ces instructions font parties du langage de définition de données (LDD).
Le LDD est un langage dont les commandes manipulent des structures de données et non des données elles-mêmes, comme dans SQL. Ce sont par exemple, les commandes SQL : CREATE TABLE, ALTER TABLE ou DROP TABLE.

Les instructions de manipulation des données dans DMX permettent d’utiliser des modèles d’exploration des données existant, de les explorer et d’y faire des prévisions. Ces instructions font parties du langage de manipulation des données (LMD).
Le LMD est l’ensemble des commandes concernant la manipulation des données dans une base de données, comme dans SQL. Ces langages permettent la gestion et l’organisation des données : lecture, écriture, tri, etc. Ce sont par exemple, les commandes SQL : INSERT, DELETE, SELECT ou UPDATE.

Présentation de l’instruction SELECT.

L’instruction SELECT est la base de la plupart des requêtes en langage DMX. Elle peut effectuer une grande diversité de tâches comme la navigation ou la prévision dans les modèles d’exploration des données. Elle est notamment utilisée pour interroger une base de données et récupérer l’information correspondant au critère de recherche. On définit le nom de la table interrogée par la requête dans la clause FROM de l’instruction. La clause WHERE, optionnelle, détermine quelles lignes ou enregistrements vont être retournés.

On peut effectuer les catégories de tâches suivantes en utilisant les clauses de l’instruction SELECT :

- La prévision. Cette partie est davantage détaillée dans la section « Requêtes de prévisions ».

- La navigation : on peut naviguer dans le contenu d’un modèle d’exploration de données en utilisant les types de requêtes suivantes.
SELECT DISTINCT FROM model : Retourne toutes les valeurs d’état provenant du modèle d’exploration de données pour la colonne spécifiée.
SELECT FROM model .CONTENT : Retourne le contenu décrivant le modèle d’exploration de données.
SELECT FROM model .DIMENSION_CONTENT : Retourne le contenu décrivant le modèle d’exploration de données.

- La copie. On peut copier un modèle d’exploration de données et sa structure d’exploration de données associée dans un nouveau modèle, que l’on nomme dans l’instruction, en utilisant le type de requête suivantes.
SELECT INTO new model : Crée une copie du modèle d’exploration de données.

- L’extraction. On peut naviguer dans les cas, ou dans une représentation des cas, qui ont servi à l’apprentissage du modèle, en utilisant les types de requêtes suivantes.
SELECT FROM model .CASES : Retourne les cas, ou les représentations des cas, qui ont été utilisés pour l’apprentissage du modèle d’exploration de données.

Les requêtes de prévisions.

De nombreux projets d’exploration des données ont pour objectif principal d’utiliser les modèles d’exploration des données pour faire des prévisions.
En général, on fournit de nouvelles données et on demande au modèle de générer une prévision basée sur ses nouvelles données.

Pour utiliser des requêtes de prévisions DMX, on peut utiliser des générateurs de requêtes (disponibles dans SQL Server Management Studio et dans Business Intelligence Development Studio).

Dans cette section, nous allons davantage nous concentrer sur les différents types de requêtes de prévisions que l’on peut créer.

- Les jointures de prédictions. On peut faire des prédictions dans un lot en mappant le modèle à une source externe de données dans une jointure de prédiction.
Une jointure de prédiction est utile lorsqu’on a beaucoup d’informations dans une table et que l’on souhaite faire des prédictions en utilisant le modèle étudié.
Pour créer une jointure de prédiction, il faut spécifier la source de données externe en utilisant les commandes OPENQUERY, OPENROWSET ou SHAPE. Par défaut, la méthode est OPENQUERY.
La syntaxe de la requête sous DMX en utilisant OPENQUERY est :
OPENQUERY(named_datasource, SELECT FROM model PREDICTION JOIN ON). Le ON fournit les conditions de jointure entre les colonnes du modèle d’exploration des données et les colonnes en entrée.

- Les jointures de prévisions naturelle. Elles permettent de créer des prévisions basées sur le nom des colonnes du modèle d’exploration des données qui correspondent exactement au nom des colonnes de la table sur laquelle on va effectuer la requête.

- Les jointures de prévisions vides. Cette requête permet d’obtenir une prévision sans fournir de données en entrée. Elle retourne une prévision basée uniquement sur le contenu du modèle.

- Les requêtes singletons. Une requête singleton est utile lorsque l’on souhaite créer des prévisions simples et en temps réel.
Les requêtes de singleton ne nécessitent pas une table séparée qui contient l’entrée. En effet, il suffit de passer une ligne unique de données dans le modèle et alors une prédiction unique nous est retournée en temps réel.

Par exemple, on peut utiliser cette requête pour prévoir si une personne de sexe féminin, âgée de 35 ans et mariée, serait susceptible d’acheter une bicyclette. Cette requête ne nécessite pas de source de données externe.

On peut également étendre cette requête pour élaborer plusieurs prédictions à l’aide de la commande UNION.

La syntaxe des requêtes de prévisions DMX est la suivante :

SELECT
TOP
FROM model PREDICTION JOIN
ON
WHERE
ORDER BY

FROM model PREDICTION JOIN : définie les données à utiliser pour faire la prévision.
ON : mappe les éléments colonnes qui sont définis dans le modèle d’exploration de données sur les colonnes d’un jeu de données externe, WHERE : permet de filtrer les résultats d’une requête de prévision, TOP ou ORDER BY : permettent de sélectionner les prévisions les plus probables.

Certaines fonctions sont propres au langage DMX et ne font pas parties du langage SQL standard. En effet, les requêtes DMX permettent de retourner, par exemple, non seulement la valeur d’une prévision d’une colonne mais également la probabilité que la prévision soit correcte. Elles permettent d’exécuter les tâches suivantes : retourner des prévisions, retourner les statistiques sur une prévision, filtrer les résultats d’une requête et réorganiser une expression de table.

Donc le langage DMX hérite du langage SQL de base mais dispose également de commandes permettant de générer des modèles prévisionnels.

Nous allons maintenant comparer le langage DMX au langage SQL de SAS. Commençons déjà par introduire ce langage.

Langage SQL de SAS.

Le système SAS est un ensemble de modules logiciels pour la gestion et le traitement statistique des données. A travers différents types d’interfaces utilisateurs, il permet l’écriture de programmes SAS qui exécutent :
- les saisies, importations, interrogations, manipulations, transformations des données
- les éditions d’états, de rapports financiers, de graphiques
- les analyses statistiques, modélisation, prévision
- des applications spécifiques définies sous forme de macro-commandes

SAS propose plusieurs langages de programmations : le langage de base, le langage macro, le langage IML et le langage SQL. C’est sur ce dernier que nous allons nous concentrer.

Sous le logiciel SAS, il existe une procédure PROC SQL, permettant d’obtenir un certains nombres de résultats, similaires à ceux que l’on peut obtenir en utilisant l’étape DATA sous SAS.

Cette procédure permet notamment de :
- créer une vue logique ou une table
- lister le contenu d’une table en se restreignant à certaines variables et certaines observations
- réaliser des fusions et des jointures entre tables
- trier une table
- synthétiser une table à l’aide de statistiques.

L’intérêt du langage SQL dans SAS est que ce dernier permet de traiter beaucoup de tâches souvent plus facilement que si on utilisait l’étape DATA. Il permet également une programmation sous SAS beaucoup plus facile et plus intuitive.
C’est aussi un bon complément car il arrive que certaines tâches ne puissent être exécutées avec d’autres procédures de SAS.

La syntaxe de cette procédure SQL est la suivante :

PROC SQL  ;
Instructions ;
QUIT ;

Entre les deux instructions PROC SQL et QUIT, le seul langage autorisé est le langage SQL.

A l’aide de cette procédure, nous pouvons effectuer les actions suivantes :

- Extraction de données. Une table SAS peut-être créée avec la commande CREATE TABLE. Elle reçoit ainsi un nom et des variables. La table existe alors physiquement mais ne comporte aucune donnée.

- La commande SELECT. La commande SELECT permet de rechercher des informations par une sélection selon différents critères : on liste les variables dans l’ordre d’apparence voulue. Il faut préciser dans quelle table les données sont stockées en utilisant la commande FROM suivi du nom de la table.
Les résultats d’une requête SELECT peuvent être affichés dans une table SAS en utilisant la syntaxe suivante :
CREATE TABLE nom_de_table
AS SELECT…

- La commande WHERE. Elle permet de spécifier un critère de sélection appelé prédicat. Le prédicat est une expression logique composée d’une suite de conditions combinées entre elles par les opérateurs logiques : AND, OR ou NOT.

- La clause ORDER BY. Elle permet de trier le résultat de la requête d’après la valeur d’une ou plusieurs variables. Par défaut, le tri se fait par ordre croissant. Pour trier par ordre décroissant, on utilise la commande DESC.
Certaines options permettent de restreindre le nombre d’observations traitées (INOBS=n).

- Supprimer les doublons. Par défaut la procédure SQL affiche le résultat d’une requête sans éliminer les doublons. Il est possible de ne garder qu’un exemplaire de chaque ligne en utilisant DISTINCT dans la clause SELECT.

- Regrouper les modalités d’une variable. Pour cela, on utilise la clause GROUP BY. Cette dernière est utilisée uniquement lorsque la requête utilise une fonction de groupe. L’expression HAVING permet d’opérer sur un sous-ensemble d’observations de la table. C’est l’équivalent du WHERE appliqué au groupe. La clause GROUP BY doit toujours précéder une expression HAVING et définit le groupe sur lequel l’expression HAVING va opérer. On utilise l’expression HAVING lorsque la requête utilise une fonction de groupe (AVG, COUNT…).

- L’expression WHEN. Cette représentation permet de changer la représentation des données en donnant un code chiffré à une chaîne de caractère ou inversement, en donnant un code à un intitulé plus significatif. La syntaxe de cette expression est la suivante :
SELECT variables
CASE WHEN expression THEN valeur1
WHEN expression THEN valeur2

ELSE valeurN
END

- La commande INSERT INTO. Cette commande utilisée pour insérer des observations dans une table. Elle nécessite le nom de la table, le nom des variables à initialiser et la valeur à leur assigner.

- La commande UPDATE. La commande UPDATE spécifie le nom de la table qui va être modifiée, suivi d’une clause SET définissant les modifications à apporter, et d’une clause WHERE avec le critère précisant les observations à modifier. Cette dernière clause n’étant pas obligatoire.

- La commande DELETE. Cette commande consiste en une clause DELETE FROM spécifiant le nom de la table concernée, et d’une clause WHERE avec le critère précisant les observations à supprimer.

La procédure SQL de SAS suit la plupart des orientations fixées par l’American National Standard Institute (ANSI) dans l’implémentation du langage SQL. Toutefois, il n’est pas entièrement conforme à la norme en vigueur ANSI pour le langage SQL, en particulier en ce qui concerne les valeurs manquantes. C’est une des différences existantes entre le langage SQL de SAS et le langage SQL standard.
En effet, la procédure SQL utilise la convention SAS pour le traitement des valeurs manquantes, ce qui est significativement différent de beaucoup de bases de données SQL telles qu’Oracle ou Sybase.

La procédure SQL de SAS utilise le mot-clé IS [NOT] MISSING dans la clause WHERE pour suggérer qu’une valeur est manquante ou non (valable pour les chaînes de caractères ou les variables numériques) ou alors le mot-clé LIKE suivi d’une chaîne de caractère de blancs pour les chaînes de caractères.

Parmi les autres différences notables entre le langage SQL de SAS et le langage SQL standard, on a que le langage SQL de SAS peut utiliser les fonctions de l’étape DATA, le langage macro et les macro-variables et notamment exporter des résultats dans des macro-variables à l’aide de la commande INTO : nom_variable, à utiliser dans l’instruction SELECT. SAS gère également la mise en forme des sorties directement dans la procédure SQL à l’aide des commandes FORMAT ou encore LABEL.

Avantages et inconvénients du langage DMX par rapport au langage SQL de SAS.

Ce qui fait la spécificité du langage DMX ce sont ses requêtes de prévisions qui permettent, à partir d’un modèle, de prévoir les données futures. La procédure SQL de SAS, quant à elle, ne permet pas de faire des prévisions. Pour cela, il faudrait utiliser d’autres procédures SAS, selon le type de modèle dont on dispose.

L’avantage du langage SQL de SAS, réside principalement dans l’utilisation du logiciel SAS. En effet, on peut à la fois bénéficier des avantages du langage SQL et des suivants :
- une automatisation du traitement avec le langage macro
- mise en forme des sorties
- capacités statistiques de SAS : modélisation, analyse factorielle, statistiques descriptives, prévisions, …

En conclusion, selon ce que l’on recherche, le langage DMX ou le langage SQL de SAS sera le plus adapté. En effet, si l’on dispose d’un modèle sur lequel on ne souhaite faire que des prévisions et sans chercher à faire d’importantes analyses statistiques en parallèle, alors le langage DMX sera le plus adapté. En revanche, s’il nous faut réaliser des études statistiques sur ce modèle alors le logiciel SAS sera plus adapté.