Want to create interactive content? It’s easy in Genially!
Lab Requête BQL
opoumeyrol
Created on August 2, 2021
Start designing with a free template
Discover more than 1500 professional designs like these:
View
Psychedelic Presentation
View
Modern Presentation
View
Relaxing Presentation
View
Chalkboard Presentation
View
Visual Presentation
View
Terrazzo Presentation
View
Halloween Presentation
Transcript
Tutorial
Lab Requête BQL
Lab 01
Utilisez la flèche suivante pour passer à la diapositive suivante
BTIB© 2021
Introduction
Requête BQL
Le Baja Query Language (BQL) est un langage de requête de type SQL qui fournit un mécanisme d'identification de divers ensembles de données. Il offre un moyen ad hoc de rechercher des données en fonction de certains critères. En incluant BQL dans une commande (ord), les résultats peuvent être facilement marqués d'un signet ou intégrés dans des vues graphiques. Cela fait de BQL un excellent outil pour la création de rapports.
BTIB© 2021
Introduction
Les requêtes BQL sont utilisées pour extraire de la station :
- Des composants, en s’appuyant sur leurs types et leurs propriétés
- Des historiques, en s’appuyant sur leurs tags
- Des alarmes, en s’appuyant sur leurs metadata
BTIB© 2021
Les colonnes de la feuille des slots
Slot
Il y a trois types de slot :
Une propriété (Property)
Une action (Action)
Un topic (Topic)
*Un topic est fait pour être relié à une action. Il peut contenir une valeur (une alarme, un rapport…) et permet de déclencher l’action à laquelle il est relié en lui passant la valeur.
BTIB© 2021
Les colonnes de la feuille des slots
Slot
Ex : les classes d’alarmes ont un topic « alarm » qui envoient une alarme (AlarmRecord) à la console
Qui est relié à l’action RouteAlarm de la console qui prend un AlarmRecord en paramètre :
Dans la DefaultAlarmClass, on a bien un topic avec un AlarmRecord en paramètre :
BTIB© 2021
Les colonnes de la feuille des slots
Name
Le nom des slots qu’on utilisera dans les requêtes BQL. Les caractères spéciaux sont encodés avec un code commençant par un $. Ex : « : » devient « $3a » Ex : « » (espace) devient « $20 »
BTIB© 2021
Les colonnes de la feuille des slots
Flags
Ils permettent notamment de modifier l’affichage et les droits sur chaque slot.
Petit rappel sur les flags les plus utilisés :
BTIB© 2021
Les colonnes de la feuille des slots
Definition
Les slots frozen sont définis par le composant et ne peuvent pas être supprimés ou modifiés. Les slots dynamiques sont ajoutés par l’utilisateur. On peut en ajouter d’autres via la feuille des slots.
BTIB© 2021
Les colonnes de la feuille des slots
Type
Le type de chaque propriété. Il est formé de la manière suivante : « nomDuModule:Classe ». Ex : control:BooleanPoint Ex : baja:String Ex : btibStrategy:Strategy Ex : alarm:AlarmRecord
BTIB© 2021
Les colonnes de la feuille des slots
Facets
Les facets servent à ajouter des informations à chaque slot telles que la précision, les unités ou une range (min-max) pour une valeur numérique. Les facets gèrent la visualisation ou les interactions avec le slot dans l’interface graphique.
BTIB© 2021
La synthaxe d’une requête BQL
{scope}|bql : select {colonne} from {type} where {filtre}
BTIB© 2021
La synthaxe d’une requête BQL
{SCOPE}|bql : select {colonne} from {type} where {filtre}
C’est l’endroit à partir duquel la requête va être effectuée. C’est le chemin (SlotPathOrd) d’un composant de la station. Ex : « station:|slot : » pour faire une requête sur toute la station Ex : « station:|slot:/Drivers/ModbusTcpNetwork » Ex : « slot: » pour une requête relative Ex : « history: » pour une requête sur les historiques Ex : « alarm: » pour une requête sur les alarmes Attention : pour optimiser la requête (temps et mémoire utilisés), il faut que le scope soit le plus précise possible.
BTIB© 2021
La synthaxe d’une requête BQL
{scope}|bql : select {COLONNE} from {type} where {filtre}
C’est ce qui permet de choisir les valeurs qu’on veut lire et afficher dans le résultat sur les éléments sélectionnés. On peut créer plusieurs colonnes, séparées par des virgules. On choisit généralement des propriétés des composants. Attention, les propriétés doivent être appelées par leur nom encodé (avec des $ à la place des caractères spéciaux donc) ET chaque $ doit être lui-même replacé par « $24 ». Ex : « select displayName, slotPathOrd » Ex : « select displayName, b$243adescription » pour b:description - Le « : » devient « $3a » dans la feuille des slots - Le « $ » devient « $24 » dans la requête Ex : « select * » si on ne veut pas de colonne en particulier
BTIB© 2021
La synthaxe d’une requête BQL
{scope}|bql : select {COLONNE} from {type} where {filtre}
On peut appeler du BFormat pour aller chercher des propriétés dans le parent ou dans les enfants. Attention ne pas mettre de %%, le BFormat est directement interprété. Ex : « select out.value » Ex : « select parent.displayName » On peut aussi injecter des fonctions qui vont calculer une valeur à la volée (voir section dédiée). Ex : « select displayName, btibCore:BqlLib.sFormat(‘{outRel(b:isIn)}’) »
BTIB© 2021
La synthaxe d’une requête BQL
{scope}|bql : select {COLONNE} from {type} where {filtre}
On peut restreindre le nombre de résultats de la requête avec un TOP à insérer entre le select et les colonnes choisies. Ex : « select TOP 50 * » Ex : « select TOP 3 displayName, shortName » On peut changer le nom d’affichage de la colonne avec un « as ». Ça permet de renommer des colonnes mais surtout d’avoir une table compréhensible lorsqu’on va chercher des slots moches ou des fonctions. Ex : « select parent.parent.displayName as ‘Grand parent’ » Ex : « select b$243adescription as ‘Description’ »
BTIB© 2021
La synthaxe d’une requête BQL
{scope}|bql : select {colonne} from {TYPE} where {filtre}
Le type des composants à sélectionner. On peut choisir plusieurs types, séparés par des virgules. Pour connaître le type d’un composant, il faut aller voir dans la feuille des slots du composant parent. Ex : « from control:ControlPoint » Ex : « from control:NumericWritable » Ex : « from btibStructure:Node »
BTIB© 2021
La synthaxe d’une requête BQL
{scope}|bql : select {colonne} from {type} where {FILTRE}
Le filtre doit renvoyer une valeur booléenne (vrai/faux) et permet de réduire les éléments sélectionnés Il y a deux types de filtre : un prédicat et une fonction :
- Un prédicat se présente sous la forme {colonne} {opérateur} {valeur}
- {colonne} : les colonnes utilisées dans le select
- {opérateur} : =, !=, <, >, <=, >=, like
- {valeur} : booléen, string ou numérique
BTIB© 2021
La synthaxe d’une requête BQL
{scope}|bql : select {colonne} from {type} where {FILTRE}
Le filtre doit renvoyer une valeur booléenne (vrai/faux) et permet de réduire les éléments sélectionnés Il y a deux types de filtre : un prédicat et une fonction :
- Une fonction renvoie directement un booléen
BTIB© 2021
La concaténation de filtres (and et or)
Plusieurs conditions peuvent être cumulées avec des ET (and) et des OU (or).Attention aux priorités car le ET (and) est prioritaire sur le OU (or) : Il faut donc ajouter des parenthèses pour bien appliquer nos conditions. Attention, il faut mettre un prédicat entier entre un ET (and) ou un OU (or). La synthaxe serait {predicat1} or {predicat2}. Ex : « where displayName like ‘Température*’ and out.value > 20 » Ex : « where displayName like ‘Température*’ and (out.value > 20 or out.value < 15) »
ET (and)
OU (or)
BTIB© 2021
Les fonctions (vykonPro:Lib et btibCore:BqlLib)
Les fonctions issues de modules Elles s’appellent avec le format :
«nomDuModule:Classe.fonction»
On utilise les modules : La Classe est Lib Ces modules ont des fonctions qui peuvent être utilisées pour les requêtes BQL. L'une des fonctions les plus utilisées de VykonPro est tagValue et celle de btibCore est le Sformat qui fera partie des prochains laboratoires.
BtibCore
VykonPro
Ex : « vykonPro:Lib.tagValue(‘b:description’) » Ex : « vykonPro:Lib.cycles(value) » sur un historique booléen Ex : « btibCore:BqlLib.sFormat(‘outRel(b:isIn)’) » Ex : « btibCore:BqlLib.currentTimeMillis »
BTIB© 2021
L’ordre (order by)
La clause "order by" peut être utilisée pour trier les résultats de la requête bql. Elle possède également une sémantique similaire à celle de SQL. Vous pouvez ordonner par une expression de chemin, un alias de colonne ou la position de la colonne (en utilisant un index basé sur 1). De plus, vous pouvez spécifier si vous souhaitez que le classement soit effectué par ordre croissant (ASC) ou décroissant (DESC). ASC est supposé si rien n'est spécifié.
12 3 4 5
AB C D E
BTIB© 2021
L’ordre (order by)
En quelques mots, une requête BQL peut être ordonnée avec « order by » qui se met à la fin de la requête (après le where). La synthaxe est la suivante : order by {colonne} {order}. • {colonne} : les colonnes utilisées dans le select • {order} : desc ou asc Ex : « order by name asc » Ex : « order by parent.displayName desc »
12 3 4 5
AB C D E
BTIB© 2021
Compter des composants (count(*) et having)
1. COUNT : compte le nombre d'éléments du résultat. Supporte la syntaxe spéciale COUNT(*). Il peut être utilisé dans le select et dans le where EX : select substr(displayName, 0, 1), COUNT(*) from baja:Folder 2. HAVING : doit être une expression booléenne. Vous pouvez utiliser la clause having pour filtrer les résultats de votre requête en fonction des fonctions d'agrégation Il peut être utilisé dans le select EX : select displayName, SUM(out.value) from control:NumericPoint having SUM(out.value) > 100
BTIB© 2021
Compter des composants (count(*) et having)
Tout d'abord, notez que cette requête peut renvoyer plusieurs lignes puisque sa projection contient à la fois des colonnes scalaires ("displayName") et des colonnes d'agrégats ("SUM(out.value)"). Chaque ligne contiendra un nom d'affichage distinct, et la SOMME de toutes les valeurs "out.value" pour les objets ayant ce nom d'affichage. La clause HAVING limitera davantage le résultat pour qu'il ne contienne que les lignes où la SOMME de toutes les valeurs out.value est supérieure à 100.
BTIB© 2021
Tips and tricks
Vous pouvez exécuter une requête avec la commande CTRL + L dans le workbench.
N’hésitez pas à y aller étape par étape. Ex : «station:|slot :/Folder|bql: select * from control:ControlPoint» «station:|slot :/Folder|bql: select displayName from control:ControlPoint» «station:|slot :/Folder|bql: select displayName, out.value from control:ControlPoint» «station:|slot :/Folder|bql: select displayName, out.value from control:ControlPoint where out.value>20»
BTIB© 2021
FIN
Appuyez sur la touche Echap pour fermer la présentation si vous êtes en mode plein écran et cliquez sur Suivant en haut à droite.
BTIB© 2021