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