Utilizzo del servizio QueryPropertyHistory
Il servizio QueryPropertyHistory interroga lo stream di valori per ciascun valore della proprietà (deve essere una proprietà registrata) dell'oggetto di origine specificato in un determinato intervallo di tempo. Il servizio chiama ValueStream.queryValueStreamEntriesper ciascuna proprietà, quindi raggruppa i valori in un insieme di risultati.
QueryPropertyHistory restituisce un insieme di dati creato interrogando ciascuna proprietà registrata su un oggetto e quindi combinando i singoli insiemi di dati in un solo insieme di big data. Viene creata una "riga" per ogni data e ora nel singolo insieme di dati. Se è presente un valore registrato con la data e l'ora, viene inserito nella riga dell'insieme di dati. Se non è presente, per default viene utilizzato l'ultimo valore registrato per la proprietà. A meno che non si selezioni l'opzione None nel parametro fillOption, viene restituito il valore Null. Se non è presente una proprietà registrata, la voce viene lasciata vuota. Questo processo di combinazione rimuove i duplicati per una proprietà specifica in base a data e ora.
Per ottenere i valori registrati effettivi per una determinata proprietà, è necessario utilizzare i servizi QueryPropertyHistory, ad esempio QueryIntegerPropertyHistory. È possibile confermare l'effettiva eliminazione dei dati con questi servizi. Per comprendere il funzionamento di questo servizio, vengono forniti di seguito alcuni scenari di esempio.
Scenari di esempio
Scenario 1: l'utente specifica tre righe, ma QueryPropertyHistory ne restituisce nove
Viene utilizzato uno stream di valori per registrare tre proprietà. Per ogni proprietà sono già disponibili tre voci distinte. Il numero complessivo di coordinate immesse è dunque nove.
Se QueryPropertyHistory viene richiamato con questo stream di valori con il parametro maxItems impostato su tre, vengono restituite nove righe di dati. QueryPropertyHistory interroga ogni singola proprietà tre volte, poiché maxItems è impostato su tre. Poiché per ogni proprietà sono disponibili tre voci di dati, è possibile ottenere il numero massimo di voci restituite: nove righe.
Scenario 2: in una specifica data e ora sono presenti dati, ma viene restituita una infotable vuota
È possibile registrare data e ora personalizzate da un dispositivo edge se non si desidera utilizzare quelle generate automaticamente da ThingWorx quando viene immesso un valore nello stream di valori, ma è opportuno considerare i comportamenti riportati di seguito.
Cosa può accadere se si tenta di eseguire un'interrogazione su questa colonna di data e ora personalizzata, anziché utilizzare setPropertyVTQ?
Il servizio QueryPropertyHistory passa allo stream di valori utilizzato dall'oggetto e restituisce un insieme di risultati iniziale in base ai parametri startDate, endDate, oldestFirst e maxRows.
Se si lasciano vuoti i campi startDate ed endDate, non si esegue l'interrogazione sulla proprietà di data e ora generata automaticamente e l'interrogazione restituisce maxRows, ad esempio 500, dai valori di proprietà aggiunti più di recente o dai valori di proprietà meno recenti nello stream di valori. Questo risultato è determinato dal parametro booleano oldestFirst. Se oldestFirst è impostato su false, l'insieme di risultati restituito contiene i 500 valori di proprietà immessi più di recente per ogni proprietà. Pertanto, con tre proprietà registrate ognuna in valori maggiori di 500, l'insieme di dati iniziale contiene 1.500 righe.
Cosa accade in postelaborazione?
È rimasto un parametro inutilizzato, ovvero query. Questo parametro viene applicato in postelaborazione. In altre parole, al completamento dell'interrogazione iniziale sullo stream di valori, all'insieme di risultati iniziale restituito è applicato il parametro query per filtrare e restituire solo i dati desiderati.
Problema
Se si decide di eseguire l'interrogazione sulla proprietà di data e ora personalizzata creata, ma il primo insieme di risultati restituito non contiene l'ora cercata nell'interrogazione, non verranno restituiti risultati, ma una infotable vuota.
Soluzione
Per evitare del tutto questo problema, utilizzare il servizio setPropertyVTQ per inserire il valore di data e ora personalizzato nello stream di valori. Verranno in questo modo sovrascritti i valori di data e ora automaticamente generati che rappresentano l'ora esatta di inserimento di un valore nello stream di valori. È quindi possibile utilizzare i parametri startDate ed endDate per eseguire un'interrogazione sulle date anziché sul parametro query, per non rischiare di perdere dati eseguendo l'interrogazione su un valore di data e ora.
È stato utile?