Optimierung der Abfrage - 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 der Abfrage

Metadatenfilter

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 Tabelle latest_value_time_series 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 Zeichenkettenliterals:

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

Rohdatenfilter

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

  • Entspricht (=)

  • größer als (>)

  • Kleiner als (<)

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

  • Kleiner als oder gleich (< =)

  • BETWEEN

  • AND

Geben Sie bei der Abfrage der Tabelle precomputed_aggregates immer einen Qualitätsfilter in der Klausel an. WHERE Dadurch wird die Datenmenge reduziert, die von der Abfrage gescannt wird, insbesondere wenn Sie nach OR-Daten suchen. BAD UNCERTAIN Wir empfehlen außerdem dringend, bei der Abfrage der Tabelle precomputed_aggregates einen Auflösungsfilter (1m, 15m, 1h oder 1d) 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.

Anmerkung

Ist ungleich (!=) und OR Operatoren wenden normalerweise 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 zum Zusammenführen von zwei Tabellen. Es werden nur JOIN s unterstützt, die aktiv nach einem Feld filtern (mithilfe des ON Schlüsselworts). 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

Erbringt eine bessere Leistung als diese entsprechende 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 erlaubt, X ist verboten):

Komponente asset_property Zeitreihe mit neuestem Wert raw_time_series vorberechnete_Aggregate subquery
Komponente X O O O O X
Vermögensgegenstand O X O O O X
Zeitreihe mit neuestem Wert 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 nach Möglichkeit implizit. JOIN Wenn Sie das JOIN Schlüsselwort verwenden müssen, wenden Sie Filter auf die einzelnen ED-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 Standardeinstellung erzeugen, legen Sie die Seitengröße der ExecuteQueryAPI auf den Maximalwert von 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 für Aggregatfunktionen und bestimmte tabellenweite Klauseln (GROUP BY,ORDER BY,JOIN) ein vollständiger Scan erforderlich ist, bevor die Klausel angewendet wird. LIMIT

Anmerkung

AWS IoT SiteWise kann selbst bei angewendeter LIMIT Klausel eine minimale Datenmenge scannen, insbesondere bei Rohdatenabfragen, bei denen mehrere Eigenschaften gescannt werden.