jeudi 16 janvier 2020

SQL Parser

Vous avez besoin d'analyser une requête SQL ?
Par exemple afin de connaître l'ensemble des champs et tables de plusieurs requêtes afin de déterminer un périmètre de données pour la mise en place d'un dataware house ou la création de restitution.

Nombreux sites expliquent la façon dont un parseur doit fonctionner (analyse syntaxique du langage), d'autres en font des analyses graphiques. Mais si vous avez simplement besoin de récupérer les tables et les champs, ces outils sont fait pour vous.

Il existe des parseurs SQL en ligne :

Il existe aussi un exécutable "General SQL Parser" qui fonctionne plutôt bien.



En revanche si vous souhaitez aller plus loin pour récupérer les jointures ou les conditions de filtres, il faudra vous penchez un peu plus sur les codes sources / outils présentés ci-dessous.

En langage de programmation :
#AnalyseSyntaxique #Sql #SqlParser #ParseurSql

vendredi 12 octobre 2018

Sublime Text - Editeur de texte - Programmation - SAS

Sublime Text (3) est le meilleur éditeur que je connaisse.

Vraiment très utile pour coder, quelque soit votre langage.
Il possède complétion, coloration syntaxique (highligthting), retient le chemin des fichiers...

Il peut être fermé, enregistre en permanence les actions réalisées.

Le programme existe en version "Portable", donc pas besoin d'installation, donc pas nécessaire d'avoir les droits admin =)

Téléchargement SublimeText : https://www.sublimetext.com/3

Si votre langage de programmation n'est pas dans le package standard de Sublime Text, voici une méthode pour l'ajouter et ainsi profiter des outils tel que la coloration synatxique...

* Installation d'un Plugin / Package Non Standard *

Exemple avec SAS
- Récupérer le package : https://github.com/rpardee/sas.tmbundle/zipball/master
- Extraire le répertoire SAS sous : \Data\Packages\SAS\

Pour être sur de l'emplacement aller dans : Sublime -> Preferences -> Browse Packages...
- Ouvrez votre programme sas et choisissez : View -> Syntax -> SAS -> SAS Program

Votre programme SAS comporte désormais la bonne coloration syntaxique !

Référence SAS :
https://implementing-vdw.blogspot.fr/2012/10/new-sublime-text-package-available-for.html

mercredi 5 mars 2014

Optimisation de requête SQL (Oracle)

Alors comment optimiser ses requêtes pour optimiser les temps de traitement (Oracle) ?

Tout d'abord il faut savoir que le SGBD utilise un plan d'exécution pour effectuer les instructions demandées.


- Comment fait-il ? Il calcul un plan d'exécution optimisé suivant des algorithmes en fonction des informations qu'il possède, notamment de ses statistiques.


L'exécution de la requête se fait de la plus profonde à l'extérieur (la sous sous sous requête avant la requête affichant le résultat).


- Que va t'il regarder ? Tout d'abord il va regarder les différents index existants sur les tables/objets utilisés dans la requête notamment les clés primaires (index unique) ; à partir des méta-données & statistiques (après un analyse "compute statistic" par exemple). Il va alors déterminer son plan d'exécution en fonction de la volumétrie (index ou full scan) etc.


N'hésitez pas à vous faire conseiller de votre DBA (Administrateur de la base de données), qui vous aidera à savoir s'il convient de partitionner, de vous aider à choisir vos tablesspaces suivant les données physiques et volumétrie de vos tables.


Coût de la requête : le "cost"

Le Cost est un indicateur intéressant, il s'affiche lorsque l'on demande au SGBD de nous montrer son plan d'exécution.

Ce qui est le plus coûteux : La jointure


Optimisation :

  • Critères sélectif à la fin de la requête (exécutés en premier) 
    • Il convient donc de mettre en fin de requête tous les critères de sélection afin de réduire le nombre de ligne à joindre (et non l'inverse).
    • select champ1, champ2 from table1 t1, table2 t2 where t1.pk = t2.pk and t1.champ1 in ('toto','titi');
  • Il convient également de projeter uniquement les colonnes nécessaires (ramener 10 champs dont 8 ne seront pas utilisés est un volume de données inutile).
  • Table la moins volumineuse (référence) à gauche
  • Eviter les select... in(select...) utiliser select... exists(select...)
  • Utilisez des fonctions analytiques plutôt que des sous select (peut changer exponentiellement le temps d'exécution)
  • Lancer l'analyse de la table régulièrement (en full ou % suivant la volumétrie). Cela peut changer le plan d’exécution en fonction des données récupérées
  • Créer des index sur les critères de jointure (create [unique] index...)
  • Utiliser des identifiants techniques optimise la sélection des relations complexes (table dont la clé primaire et composite et de types hétérogènes (caractère,numérique...))
  • Partitionner la table dans la mesure du possible/besoin (la partition est vue comme une table à part et permet donc de réduire fortement la volumétrie) : select... from table1 partition()
  • Utilisation de hints : forcer le plan d’exécution (pour les experts : souvent l'analyse / rebuild ou création d'index / refonte de la requête suffit au SGBD de choisir le bon algorithme).
Produit Cartésien : multiplication des lignes de données car aucun lien n'est trouvé entre 2 tables

Quelques références de site :