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.