Запрашивайте несколько тем одновременно, используя правило IoT SQL - PullRequest
0 голосов
/ 14 января 2020

У меня есть две темы результатов, где сообщения приходят из разных источников "почти одновременно".

Topi c: sensor1/result - получение полезной нагрузки -> { "output_from_sensor1": {"result":"OK"} }
Topi c: sensor2/result - получение полезной нагрузки -> { "output_from_sensor2": {"result":"OK"} }

Я хотел бы создать AWS Правило IoT, которое сканирует эти две темы «одновременно в одном запросе» и выполняет действие.

Я не уверен, поддерживает ли AWS IoT SQL «сканирование нескольких тем» в одном запросе. Таких ссылок в AWS документах не найдено.

В процессе работы я пытался выполнить эти IoT-запросы (насколько мне известно о синтаксисе SQL), но пока не повезло: (

SELECT output_from_sensor1.result AS final_output.result FROM ‘sensor1/result’ WHERE (SELECT output_from_sensor2.result FROM ‘sensor2/result’)=‘OK’

(SELECT output_from_sensor1.result FROM 'sensor1/result') UNION (SELECT output_from_sensor2.result FROM 'sensor2/result')

Большое спасибо!

1 Ответ

1 голос
/ 15 января 2020

AWS Правила IoT запускаются одним сообщением MQTT, а действия правила обрабатывают только сообщение, которое вызвало правило. Таким образом, хотя + и # Подстановочные знаки могут использоваться для выбора из нескольких тем, каждый вызов правила обрабатывает только одно сообщение.

Ваше предположение, что это возможно сканирование нескольких тем »в одном запросе подразумевает, что задействовано несколько сообщений (для каждой топи c).

В зависимости от проблемы, которую вы пытаетесь решить, может иметь смысл буферизовать сообщения в очереди ( например SQS). Затем обработка может проверить, появляются ли несколько сообщений в заданном временном окне для выполнения одного действия над обоими сообщениями.

Я не уверен, поддерживает ли AWS IoT SQL «сканирование нескольких тем» в одном запросе. Такие ссылки не найдены в AWS документах.

Я не нашел однозначного утверждения в документации, которое исключает это. Но формулировка согласуется с правилом, которое запускается одним сообщением.

Например, из учебника правил

Правило запускается при совпадении сообщения MQTT, которое соответствует фильтр topi c получен на topi c.

FROM подписывает правило на фильтр topi c или topi c, используя MQTT + и # подстановочные знаки.

Есть операторов , таких как AND и OR, но они не используются в предложении FROM. Документация операторов гласит:

Следующие операторы могут использоваться в предложениях SELECT и WHERE.

...