Ottimizzazione delle query - AWS IoT SiteWise

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à.