Formats de table supportés
Les formats de table suivants sont pris en charge lors de l'utilisation de requêtes de lecture Sql comme source pour la valeur des variables (SELECT).
Ils sont également supportés lors des requêtes Sql d'écriture pour affecter une ou plusieurs lignes (INSERT, UPDATE...)
Une table peut être le résultat d'une ou plusieurs jointures ou de tout autre traitement exécuté au niveau de la source de données.
Le nombre maximal de valeurs qu'il est possible de lire est limité par le nombre maximal de colonnes pris en charge par le fournisseur ADO.Net ou par la source de données, auquel il faut retrancher 1.
Format de table étroit
Le format étroit est une table avec un champ contenant les valeurs et une autre les métadonnées associées à la valeur. C'est l'un des formats les plus courants utilisé dans PcVue par le HDS pour les données de consignation et de tendance.
| field_Ts | field_Name | field_Value | field_Quality |
| 11/01/2019 10h00 | Temperature | 22,5 | 192 |
| 11/01/2019 10h00 | Humidity | 63 | 192 |
| 11/01/2019 10h00 | Wind | 39 | 192 |
| 11/01/2019 10h01 | Temperature | 22,5 | 192 |
| 11/01/2019 10h01 | Humidity | 64 | 192 |
| 11/01/2019 10h01 | Wind | 12 | 192 |
| 11/01/2019 10h02 | Humidity | 64 | 192 |
| 11/01/2019 10h02 | Humidity | 64 | 192 |
La requête la plus simple pour ce format est de lire la dernière valeur de chaque métrique (température, humidité et vent), mais cela nécessite une requête Sql pour chaque variable et n'est pas très efficace.
|
SELECT TOP(1) [field_Ts], [field_Value], [field_Name] FROM [NarrowTable] WHERE [field_Name] = ‘Temperature’ ORDER BY [field_Ts] DESC |
Une autre approche consiste à utiliser la mutualisation des requêtes pour obtenir la dernière valeur de chaque métrique, puis à mapper le résultat sur plusieurs variables.
L'exemple ci-dessous est donné pour Sql Server et peut ne pas fonctionner avec d'autres SGBDR.
|
;WITH CTE AS ( SELECT [field_Ts], [field_Value], [field_Name], ROW_NUMBER() OVER(PARTITION BY [field_Name] ORDER BY [field_Ts] DESC) AS "RowNumber" FROM [NarrowTable] WHERE [field_Ts] > DATEADD(DD, -10, GETDATE()) ) SELECT [field_Ts], [field_Value], [field_Name] FROM CTE WHERE RowNumber=1 ORDER BY [field_Ts] DESC |
En utilisant les exemples de données ci-dessus, le résultat de cette requête est le suivant :
| field_Ts | field_Name | field_Value | field_Quality |
| 11/01/2019 10h00 | Wind | 39 | 192 |
| 11/01/2019 10h03 | Temperature | 22,5 | 192 |
| 11/01/2019 10h05 | Humidity | 64 | 192 |
Dans cet exemple, 3 valeurs et leur qualité sont lues avec une seule exécution de requête Sql, mais elle pourrait être étendue à bien d'autres.
Format de table large avec horodate unique
Le format de table large est celui où chaque métrique apparaît dans un champ distinct. Ce format est un instantané de plusieurs mesures à un moment donné.
| field_Ts | field_Temperature | field_Humidity | field_Wind | … |
| 11/01/2019 10h00 | 22,5 | 63 | 39 | … |
| 11/01/2019 10h01 | 22,5 | 64 | 12 | … |
| 11/01/2019 10h02 | 22,5 | 64 | 17 | … |
Il s'agit du format le plus facile à utiliser si nous souhaitons conserver uniquement la dernière valeur de chaque métrique (température, humidité et vent).
|
SELECT TOP(1) [field_Ts], [field_Temperature], [field_Humidity] [field_Wind] FROM [WideTable] ORDER BY [field_Ts] DESC |
En utilisant les exemples de données ci-dessus, le résultat de cette requête est le suivant :
| field_Ts | field_Temperature | field_Humidity | field_Wind | … |
| 11/01/2019 10h02 | 22,5 | 64 | 17 | … |
Dans cet exemple, 3 valeurs sont lues avec une requête Sql, mais elles peuvent être étendues à de nombreuses autres.
Format de table large avec plusieurs horodates
Similaire à ce qui précède, mais avec l'horodate répétée pour chaque métrique. Il s'agit d'un format couramment utilisé par les fournisseurs de Supervision.
| field_Ts | field_Ts Temperature |
field_ValueTemperature |
field_TsHumidity |
Field_ValueHumidity |
… |
| 11/01/2019 10h00 | 11/01/2019 10h00 | 22,5 | 11/01/2019 10h00 | 63 | … |
| 11/01/2019 10h01 | 11/01/2019 10h01 | 23,0 | 11/01/2019 10h01 | 64 | … |
| 11/01/2019 10h02 | 11/01/2019 10h02 | 23,5 | 11/01/2019 10h01 | 64 | … |
C'est un format facile à utiliser si vous ne voulez conserver que la dernière valeur de chaque métrique (température, humidité et vent).
|
SELECT TOP(1) [field_Tstemperature], [field_ValueTemperature], [field_TsHumidity] [field_ValueHumidity] FROM [WideTable] ORDER BY [field_Ts] DESC |
En utilisant les exemples de données ci-dessus, le résultat de cette requête est le suivant :
| field_TsTemperature | field_ValueTemperature | field_TsHumidity | field_ValueHumidity | … |
| 11/01/2019 10h02 | 23,5 | 11/01/2019 10h02 | 64 | … |
Avec cet exemple, 2 valeurs ou plus sont lues avec une requête Sql, mais elles peuvent être étendues à bien d'autres.
Format de table large sans horodate
| field_BatchID | field_Failed | field_Score | field_Operator |
| 4012 | 0 | 965 | AD |
| 4013 | 0 | 1093 | AD |
| 4014 | 0 | 875 | AD |
| 4015 | 1 | 15 | AD |
Encore une fois, format facile à utiliser si vous ne voulez conserver que les n dernières valeurs pour toutes les métriques (failed, score, opérateur).
|
SELECT TOP(2) [field_Failed], [field_Score], [field_Operator] FROM [WideTable] ORDER BY [field_BatchID] DESC |
En utilisant les exemples de données ci-dessus, le résultat de cette requête est le suivant :
| field_BatchID | field_Failed | field_Score | field_Operator |
| 4014 | 0 | 875 | AD |
| 4015 | 1 | 15 | AD |
Avec cet exemple, il est possible de lire un ou plusieurs ensembles de valeurs avec une requête Sql.
Format de table fixe
Une table dans laquelle le nombre de lignes et leur utilisation sont fixes.
| field_Day | field_Production |
| Monday | 10005 |
| Tuesday | 98509 |
| Wednesday | 99678 |
| Thursday | 10014 |
| Friday | 99256 |
| Saturday | 73968 |
| Sunday | NULL |
Il n'est pas nécessaire de filtrer ou de trier le résultat.
|
SELECT [field_Day], [field_Production], [field_Operator] FROM [FixTable] |
En utilisant les exemples de données ci-dessus, le résultat de cette requête est le suivant :
| field_Day | field_Production |
| Monday | 10005 |
| Tuesday | 98509 |
| Wednesday | 99678 |
| Thursday | 10014 |
| Friday | 99256 |
| Saturday | 73968 |
| Sunday | NULL |
Avec cet exemple, il est possible de lire un ou plusieurs ensembles de valeurs avec une requête Sql.
Alternativement, le résultat pourrait être une seule valeur scalaire.
|
SELECT COUNT(*) as Result FROM [FixTable] |
En utilisant les exemples de données ci-dessus, le résultat de cette requête est le suivant :
| Result |
| 7 |