Otimização de consultas - AWS IoT SiteWise

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Otimização de consultas

Filtros de metadados

Ao consultar metadados ou dados brutos, use a WHERE cláusula para filtrar por campos de metadados para reduzir a quantidade de dados digitalizados. Use os seguintes operadores para limitar a verificação de metadados:

  • Igual (=)

  • Não é igual (>)

  • LIKE

  • IN

  • E

  • OU

Para propriedades de atributos, use os campos a seguir para filtrar os resultados. :

  • double_attribute_value

  • int_attribute_value

  • boolean_attribute_value

  • string_attribute_value

Esses campos oferecem melhor desempenho do que a tabela latest_value_time_series para propriedades de ativos do tipo de atributo.

nota

Use literais no lado direito dos operadores para limitar adequadamente a varredura de dados. Por exemplo, a consulta a seguir tem um desempenho pior do que usar uma string literal estrita:

SELECT property_id FROM asset_property WHERE property_name = CONCAT('my', 'property')
exemplo para filtros de metadados:
SELECT p.property_name FROM asset_property p WHERE p.property_type = 'attribute' AND p.string_attribute_value LIKE 'my-property-%'

Filtros de dados brutos

Todas as tabelas de dados brutos (raw_time_series, latest_value_time_series, precomputed_aggregates) têm timestamps associados às suas linhas. Além dos filtros de metadados, use filtros de WHERE cláusula no event_timestamp campo para reduzir a quantidade de dados digitalizados. Use as seguintes operações para limitar a verificação de dados brutos:

  • Igual (=)

  • Maior que (>)

  • Menor que (<)

  • Maior ou igual a (>=)

  • Menor ou igual a (<=)

  • BETWEEN

  • E

Ao consultar a tabela precomputed_aggregates, sempre especifique um filtro de qualidade na cláusula. WHERE Isso reduz a quantidade de dados que a consulta verifica, especialmente se você estiver procurando BAD por UNCERTAIN dados. Também é altamente recomendável usar um filtro de resolução (1m, 15m, 1h ou 1d) ao consultar a tabela precomputed_aggregates. Se você não especificar um filtro de resolução, AWS IoT SiteWise usará como padrão uma varredura completa da tabela em todas as resoluções, o que é ineficiente.

nota

Não são iguais (!=) e os OR operadores normalmente não aplicam filtros significativos à verificação de dados brutos. Filtros em valores de dados brutos (string_value, double_value etc.) também não limitam a varredura de dados brutos.

Otimização JOIN

AWS IoT SiteWise O SQL suporta a JOIN palavra-chave para mesclar duas tabelas. Somente JOIN aqueles que filtram ativamente em um campo (usando a ON palavra-chave) são suportados. As uniões cartesianas completas são proibidas.

AWS IoT SiteWise também suporta JOIN s implícitos sem usar a JOIN palavra-chave. Elas são permitidas entre tabelas de metadados diferentes e entre uma tabela de metadados e uma tabela bruta. Por exemplo, esta consulta:

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

Tem um desempenho melhor do que essa consulta equivalente:

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

As seguintes junções implícitas são permitidas (O é permitido, X é proibido):

asset asset_property latest_value_time_series raw_time_series precomputed_aggregates subconsulta
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
subconsulta X X X X X X

Use JOIN s implícitos sempre que possível. Se você precisar usar a JOIN palavra-chave, aplique filtros nas tabelas de ensino individuais JOIN para minimizar os dados digitalizados. Por exemplo, em vez dessa 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%'

Use essa consulta mais 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%'

Ao inserir filtros de metadados em subconsultas, você garante que tabelas individuais no JOIN s sejam filtradas durante o processo de digitalização. Você também pode usar a LIMIT palavra-chave em subconsultas para obter o mesmo efeito.

Consultas grandes

Para consultas que produzem mais linhas do que o padrão, defina o tamanho da página da ExecuteQueryAPI para o valor máximo de 20000. Isso melhora o desempenho geral da consulta.

Use a LIMIT cláusula para reduzir a quantidade de dados digitalizados para algumas consultas. Observe que as funções agregadas e certas cláusulas de toda a tabela (GROUP BY,ORDER BY,JOIN) exigem uma verificação completa para serem concluídas antes de aplicar a cláusula. LIMIT

nota

AWS IoT SiteWise pode escanear uma quantidade mínima de dados mesmo com a LIMIT cláusula aplicada, especialmente para consultas de dados brutos que examinam várias propriedades.