View a markdown version of this page

Optimierung von Abfragen - AWS IoT SiteWise

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Optimierung von Abfragen

Metadaten-Filter

Wenn Sie Metadaten oder Rohdaten abfragen, verwenden Sie die WHERE Klausel, um nach Metadatenfeldern zu filtern, um die Menge der gescannten Daten zu reduzieren. Verwenden Sie die folgenden Operatoren, um den Metadatenscan einzuschränken:

  • Entspricht (=)

  • Nicht gleich (! =)

  • LIKE

  • IN

  • AND

  • ODER

Verwenden Sie für Attributeigenschaften die folgenden Felder, um die Ergebnisse zu filtern. :

  • double_attribute_value

  • int_attribute_value

  • boolean_attribute_value

  • string_attribute_value

Diese Felder bieten eine bessere Leistung als die latest_value_time_series-Tabelle für Asset-Eigenschaften des Attributtyps.

Anmerkung

Verwenden Sie Literale auf der rechten Seite der Operatoren, um den Datenscan richtig einzuschränken. Die folgende Abfrage schneidet beispielsweise schlechter ab als die Verwendung eines strikten Zeichenfolgenliterals:

SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
Beispiel für Metadatenfilter:
SELECT p.property_name FROM asset_property p WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'

Filter für Rohdaten

Allen Rohdatentabellen (raw_time_series, latest_value_time_series, precomputed_aggregates) sind ihren Zeilen Zeitstempel zugeordnet. Verwenden Sie zusätzlich zu den Metadatenfiltern Klauselfilter für das Feld, um die Menge der gescannten Daten zu reduzieren. WHERE event_timestamp Verwenden Sie die folgenden Operationen, um den Rohdatenscan einzuschränken:

  • Entspricht (=)

  • größer als (>)

  • Kleiner als (<)

  • Größer als oder gleich (> =)

  • Kleiner als oder gleich (< =)

  • BETWEEN

  • AND

Beispiele für Filter:

  • Wenn Sie die Tabelle precomputed_aggregates abfragen, geben Sie in der Klausel immer einen Qualitätsfilter an. WHERE Dadurch wird die Datenmenge reduziert, die von der Abfrage gescannt wird, insbesondere wenn Sie nach Daten suchen. BAD UNCERTAIN

    Wir empfehlen außerdem dringend, bei der Abfrage der Tabelle precomputed_aggregates einen Auflösungsfilter (1 m, 15 m, 1 h oder 1 d) zu verwenden. Wenn Sie keinen Auflösungsfilter angeben, AWS IoT SiteWise wird standardmäßig ein vollständiger Tabellenscan für alle Auflösungen verwendet, was ineffizient ist.

  • Bei der Abfrage von Rohdaten können in der WHERE Klausel auch Zeitstempelfunktionen verwendet werden, um die Menge der gescannten Daten zu filtern. Die folgende Abfrage scannt beispielsweise nur die Daten der letzten 30 Minuten aus der Tabelle raw_time_series:

    SELECT r.event_timestamp, r.double_value FROM raw_time_series r WHERE r.event_timestamp > TIMESTAMP_SUB(MINUTE, 30, NOW())
Anmerkung

Ist nicht gleich (!=) und OR Operatoren wenden in der Regel keine aussagekräftigen Filter auf den Rohdatenscan an. Filter für Rohdatenwerte (string_value, double_value usw.) schränken den Rohdatenscan ebenfalls nicht ein.

JOIN-Optimierung

AWS IoT SiteWise SQL unterstützt das JOIN Schlüsselwort, um zwei Tabellen zusammenzuführen. Nur JOIN s, die aktiv nach einem Feld filtern (mithilfe des ON Schlüsselworts), werden unterstützt. Vollständige kartesische Verknüpfungen sind verboten.

AWS IoT SiteWise unterstützt auch implizite JOIN s, ohne das Schlüsselwort zu verwenden. JOIN Diese sind zwischen verschiedenen Metadatentabellen sowie zwischen einer Metadatentabelle und einer Rohtabelle zulässig. Beispielsweise würde diese Abfrage:

SELECT a.asset_name, p.property_name FROM asset a, asset_property p

Leistet eine bessere Leistung als diese äquivalente Abfrage:

SELECT a.asset_name, p.property_name FROM asset a JOIN asset_property p ON a.asset_id = p.asset_id

Die folgenden impliziten Verknüpfungen sind zulässig (O ist zulässig, X ist verboten):

Komponente asset_property neueste_Wert_Zeitreihe raw_time_series vorberechnete_Aggregate subquery
Komponente X O O O O X
Asset_Eigentum O X O O O X
neueste_Wert_Zeitreihe O O X X X X
raw_time_series O O X X X X
vorberechnete_Aggregate O O X X X X
subquery X X X X X X

Verwenden Sie, wenn möglich, implizit as. JOIN Wenn Sie das JOIN Schlüsselwort verwenden müssen, wenden Sie Filter auf die einzelnen roten Tabellen an, um die JOIN Anzahl der gescannten Daten zu minimieren. Zum Beispiel anstelle dieser Abfrage:

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%'

Verwenden Sie diese effizientere Abfrage:

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%'

Indem Sie Metadatenfilter in Unterabfragen einfügen, stellen Sie sicher, dass einzelne Tabellen in den JOIN s während des Scanvorgangs gefiltert werden. Sie können das LIMIT Schlüsselwort auch in Unterabfragen verwenden, um den gleichen Effekt zu erzielen.

Große Abfragen

Für Abfragen, die mehr Zeilen als die Standardanzahl erzeugen, legen Sie die Seitengröße der ExecuteQuery API auf den Maximalwert 20000 fest. Dies verbessert die allgemeine Abfrageleistung.

Verwenden Sie die LIMIT Klausel, um die Menge der gescannten Daten für einige Abfragen zu reduzieren. Beachten Sie, dass Aggregatfunktionen und bestimmte tabellenweite Klauseln (GROUP BYORDER BY,JOIN) einen vollständigen Scan erfordern, bevor die Klausel angewendet wird. LIMIT

Anmerkung

AWS IoT SiteWise scannt möglicherweise eine Mindestmenge an Daten, auch wenn die LIMIT Klausel angewendet wird, insbesondere bei Rohdatenabfragen, bei denen mehrere Eigenschaften durchsucht werden.