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 consultes metadatos o datos sin procesar, usa 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 la exploración de metadatos:
Igual (=)
Distinto de (!=)
LIKE
IN
AND
OR
Para las propiedades de los atributos, utilice los siguientes campos para filtrar los resultados. :
double_attribute_valueint_attribute_valueboolean_attribute_valuestring_attribute_value
Estos campos proporcionan un mejor rendimiento que la tabla latest_value_time_series para las propiedades de activos de tipo atributo.
nota
Utilice los literales en el lado derecho de los operadores para limitar correctamente el escaneo de datos. Por ejemplo, la siguiente consulta funciona peor que si se utiliza 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
Ejemplos de filtros:
-
Al consultar la tabla precomputed_aggregates, especifique siempre un filtro de calidad en la cláusula.
WHEREEsto reduce la cantidad de datos que escanea la consulta, especialmente si estás buscando datos.BADUNCERTAINTambién es muy recomendable 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 realizará de forma predeterminada un escaneo completo de la tabla en todas las resoluciones, lo que no es eficiente.
-
Al consultar datos sin procesar, las funciones de marca de tiempo también se pueden usar en la
WHEREcláusula para filtrar la cantidad de datos escaneados. Por ejemplo, la siguiente consulta solo escanea los últimos 30 minutos de datos de la tabla raw_time_series:SELECT r.event_timestamp, r.double_value FROM raw_time_series r WHERE r.event_timestamp > TIMESTAMP_SUB(MINUTE, 30, NOW())
nota
No es igual (!=) y, por lo general, OR los operadores no aplican filtros significativos al escaneo de datos sin procesar. Los filtros de los valores de los datos sin procesar (valor_cadena, valor_doble, etc.) tampoco limitan el análisis de los datos sin procesar.
OPTIMIZACIÓN DE JOIN
AWS IoT SiteWise SQL admite la JOIN palabra clave para combinar dos tablas. Solo JOIN se admiten los filtros activos en un campo (con la ON palabra clave). Se prohíben las uniones cartesianas completas.
AWS IoT SiteWise también admite JOIN s implícitas sin usar 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 combinaciones 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ícitas siempre que sea posible. Si debe usar la JOIN palabra clave, aplique filtros en las tablas de edición 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 del JOIN s se filtren durante el proceso de escaneo. También puedes usar la LIMIT palabra clave en las subconsultas para lograr 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 ExecuteQuery API en el valor máximo de 20000. Esto mejora el rendimiento general de las consultas.
Utilice la LIMIT cláusula para reducir la cantidad de datos analizados para algunas consultas. Tenga en cuenta que las funciones agregadas y algunas cláusulas que abarcan toda la tabla (GROUP BYORDER BY,,JOIN) requieren un análisis completo antes de aplicar la LIMIT cláusula.
nota
AWS IoT SiteWise pueden escanear una cantidad mínima de datos incluso con la LIMIT cláusula aplicada, especialmente para las consultas de datos sin procesar que escanean varias propiedades.