Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ottimizzazione delle query
Filtri per metadati
Quando esegui una query su metadati o dati non elaborati, utilizza la WHERE
clausola per filtrare in base ai campi di metadati per ridurre la quantità di dati analizzati. Utilizzate i seguenti operatori per limitare la scansione dei metadati:
Uguale a (=)
Non è uguale a (! =)
LIKE
IN
AND
O
Per le proprietà degli attributi, utilizza i seguenti campi per filtrare i risultati. :
double_attribute_value
int_attribute_value
boolean_attribute_value
string_attribute_value
Questi campi offrono prestazioni migliori rispetto alla tabella latest_value_time_series per le proprietà degli asset di tipo di attributo.
Nota
Utilizzate i valori letterali sul lato destro degli operatori per limitare correttamente la scansione dei dati. Ad esempio, la seguente query ha prestazioni peggiori rispetto all'utilizzo di una stringa letterale rigorosa:
SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
Esempio per i filtri di metadati:
SELECT p.property_name FROM asset_property p WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'
filtri per dati grezzi
Tutte le tabelle di dati grezzi (raw_time_series, latest_value_time_series, precomputed_aggregates) hanno timestamp associati alle rispettive righe. Oltre ai filtri per i metadati, utilizza i filtri delle clausole sul campo per ridurre la quantità di dati scansionati. WHERE
event_timestamp
Utilizzate le seguenti operazioni per limitare la scansione dei dati grezzi:
Uguale a (=)
Maggiore di (>)
Minore di (<)
Maggiore o uguale a (> =)
Minore o uguale a (< =)
BETWEEN
AND
Quando esegui una query sulla tabella precomputed_aggregates, specifica sempre un filtro di qualità nella clausola. WHERE
In questo modo si riduce la quantità di dati analizzati dalla query, soprattutto se state cercando dei dati. BAD
UNCERTAIN
Consigliamo inoltre vivamente di utilizzare un filtro di risoluzione (1m, 15m, 1h o 1d) quando si esegue una query sulla tabella precomputed_aggregates. Se non specifichi un filtro di risoluzione, per impostazione predefinita AWS IoT SiteWise verrà eseguita una scansione completa della tabella per tutte le risoluzioni, il che è inefficiente.
Nota
Non è uguale (!=)
e OR
gli operatori in genere non applicano filtri significativi alla scansione dei dati grezzi. Inoltre, i filtri sui valori dei dati grezzi (string_value, double_value, ecc.) non limitano la scansione dei dati grezzi.
Ottimizzazione JOIN
AWS IoT SiteWise SQL supporta la JOIN
parola chiave per unire due tabelle. Sono supportati solo JOIN
i filtri attivi su un campo (utilizzando la ON
parola chiave). I join cartesiani completi sono proibiti.
AWS IoT SiteWise supporta anche i messaggi impliciti JOIN
senza utilizzare la parola chiave. JOIN
Questi sono consentiti tra diverse tabelle di metadati e tra una tabella di metadati e una tabella non elaborata. Ad esempio, questa query:
SELECT a.asset_name, p.property_name FROM asset a, asset_property p
Prestazioni migliori di questa query equivalente:
SELECT a.asset_name, p.property_name FROM asset a JOIN asset_property p ON a.asset_id = p.asset_id
Sono consentiti i seguenti join impliciti (O è consentito, X è vietato):
asset | asset_property | latest_value_time_series | serie raw_time_ | aggregati_precalcolati | subquery | |
---|---|---|---|---|---|---|
asset | X | O | O | O | O | X |
asset_property | O | X | O | O | O | X |
latest_value_time_series | O | O | X | X | X | X |
serie raw_time_ | O | O | X | X | X | X |
aggregati_precalcolati | O | O | X | X | X | X |
subquery | X | X | X | X | X | X |
Usa s impliciti ove possibile. JOIN
Se devi usare la JOIN
parola chiave, applica i filtri sulle singole JOIN
tabelle di redazione per ridurre al minimo i dati scansionati. Ad esempio, invece di questa query:
SELECT level1.asset_id, level2.asset_id, level3.asset_id FROM asset AS level1 JOIN asset AS level2 ON level2.parent_asset_id = level1.asset_id JOIN asset AS level3 ON level3.parent_asset_id = level2.asset_id WHERE level1.asset_name LIKE 'level1%' AND level2.asset_name LIKE 'level2%' AND level3.asset_name LIKE 'level3%'
Usa questa query più efficiente:
SELECT level1.asset_id, level2.asset_id, level3.asset_id FROM asset AS level1 JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level2%') AS level2 ON level2.parent_asset_id = level1.asset_id JOIN (SELECT asset_id, parent_asset_id FROM asset WHERE asset_name LIKE 'level3%') AS level3 ON level3.parent_asset_id = level2.asset_id WHERE level1.asset_name LIKE 'level1%'
Inserendo i filtri dei metadati nelle sottoquery, ti assicuri che le singole tabelle in JOIN
s vengano filtrate durante il processo di scansione. È inoltre possibile utilizzare la LIMIT
parola chiave nelle sottoquery per ottenere lo stesso effetto.
Query di grandi dimensioni
Per le query che producono più righe del valore predefinito, imposta la dimensione della pagina dell'ExecuteQueryAPI sul valore massimo di 20000. Ciò migliora le prestazioni complessive delle query.
Utilizza la LIMIT
clausola per ridurre la quantità di dati analizzati per alcune query. Tieni presente che le funzioni di aggregazione e alcune clausole a livello di tabella (GROUP BY
,ORDER BY
,JOIN
) richiedono una scansione completa prima di applicare la clausola. LIMIT
Nota
AWS IoT SiteWise può eseguire la scansione di una quantità minima di dati anche con la LIMIT
clausola applicata, in particolare per le interrogazioni di dati non elaborati che eseguono la scansione di più proprietà.