Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Optimización de las consultas
Filtros de metadatos
Cuando consulte metadatos o datos sin procesar, utilice la WHERE
cláusula para filtrar por campos de metadatos a fin de reducir la cantidad de datos escaneados. Utilice los siguientes operadores para limitar el escaneo de metadatos:
Igual (=)
Distinto de (!=)
LIKE
IN
AND
OR
En el caso de las propiedades de los atributos, utilice los siguientes campos para filtrar los resultados. :
double_attribute_value
int_attribute_value
boolean_attribute_value
string_attribute_value
Estos campos ofrecen un mejor rendimiento que la tabla latest_value_time_series para las propiedades de los activos del tipo de atributo.
nota
Utilice literales en el lado derecho de los operadores para limitar adecuadamente el escaneo de datos. Por ejemplo, la siguiente consulta tiene un rendimiento peor que el uso de un literal de cadena estricto:
SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
ejemplo para filtros de metadatos:
SELECT p.property_name FROM asset_property p WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'
Filtros de datos sin procesar
Todas las tablas de datos sin procesar (raw_time_series, latest_value_time_series, precomputed_aggregates) tienen marcas de tiempo asociadas a sus filas. Además de los filtros de metadatos, utilice filtros de cláusulas en el campo para reducir la cantidad de datos escaneados. WHERE
event_timestamp
Utilice las siguientes operaciones para limitar el escaneo de datos sin procesar:
Igual (=)
Mayor que (>)
Menor que (<)
Mayor que o igual a (>=)
Menor que o igual a (<=)
BETWEEN
AND
Al consultar la tabla precomputed_aggregates, especifique siempre un filtro de calidad en la cláusula. WHERE
Esto reduce la cantidad de datos que escanea la consulta, especialmente si está buscando datos. BAD
UNCERTAIN
También recomendamos encarecidamente utilizar un filtro de resolución (1 m, 15 m, 1 h o 1 d) al consultar la tabla precomputed_aggregates. Si no especificas un filtro de resolución, se AWS IoT SiteWise escaneará de forma predeterminada la tabla completa en todas las resoluciones, lo que resulta ineficiente.
nota
No es igual (!=)
y, por lo general, los OR
operadores no aplican filtros significativos al escaneo de datos sin procesar. Los filtros de los valores de los datos sin procesar (string_value, double_value, etc.) tampoco limitan el escaneo de datos sin procesar.
Únete a la optimización
AWS IoT SiteWise SQL admite la JOIN
palabra clave para combinar dos tablas. Solo JOIN
se admiten los filtros activos en un campo (mediante la ON
palabra clave). Están prohibidas las uniones cartesianas completas.
AWS IoT SiteWise también admite la JOIN
s implícita sin utilizar la palabra clave. JOIN
Se permiten entre diferentes tablas de metadatos y entre una tabla de metadatos y una tabla sin procesar. Por ejemplo, esta consulta:
SELECT a.asset_name, p.property_name FROM asset a, asset_property p
Funciona mejor que esta consulta equivalente:
SELECT a.asset_name, p.property_name FROM asset a JOIN asset_property p ON a.asset_id = p.asset_id
Se permiten las siguientes uniones implícitas (O está permitida, X está prohibida):
asset | asset_property | latest_value_time_series | raw_time_series | precomputed_aggregates | 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 |
raw_time_series | O | O | X | X | X | X |
precomputed_aggregates | O | O | X | X | X | X |
subquery | X | X | X | X | X | X |
Utilice JOIN
s implícitos siempre que sea posible. Si debe usar la JOIN
palabra clave, aplique filtros en las tablas editoriales individuales JOIN
para minimizar los datos escaneados. Por ejemplo, en lugar de esta consulta:
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 esta consulta más eficiente:
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%'
Al insertar filtros de metadatos en las subconsultas, se asegura de que las tablas individuales de la JOIN
s se filtren durante el proceso de digitalización. También puedes usar la LIMIT
palabra clave en las subconsultas para obtener el mismo efecto.
Consultas grandes
Para las consultas que producen más filas que las predeterminadas, establece el tamaño de página de la ExecuteQueryAPI en un valor máximo de 20 000. Esto mejora el rendimiento general de las consultas.
Utilice la LIMIT
cláusula para reducir la cantidad de datos escaneados en algunas consultas. Tenga en cuenta que las funciones de agregado y ciertas cláusulas que abarcan toda la tabla (GROUP BY
ORDER BY
,,JOIN
) requieren un análisis completo antes de aplicar la LIMIT
cláusula.
nota
AWS IoT SiteWise puede escanear una cantidad mínima de datos incluso con la LIMIT
cláusula aplicada, especialmente en el caso de consultas de datos sin procesar que escanean varias propiedades.