В ключевых значениях используется шаблон замены , который не может ссылаться на псевдоним deviceName
(*).
В документации AWS это подчеркивается:
Поскольку выражение в шаблоне подстановки оценивается отдельно от оператора "SELECT ...", вы не можете ссылаться на псевдоним, созданный с помощью предложения AS. Вы можете ссылаться только на информацию, представленную в исходной полезной нагрузке, в дополнение к поддерживаемым функциям и операторам.
Вы можете ссылаться только на информацию в исходной полезной нагрузке.
Поскольку псевдоним отсутствует в исходной полезной нагрузке, вы можете использовать ${topic(2)}
в качестве значения ключа раздела. Функция имеет доступ к topi c, хотя это означает, что значение ключа связано с именем topi c.
Другой альтернативой является правило republi sh для другой topi c с deviceName
в полезной нагрузке. Правило / действие, которое обрабатывает эту топи c, может записывать в DynamoDB. Это действие затем будет иметь доступ к свойству deviceName
, так как оно доступно в переизданной полезной нагрузке.
* Документация ссылается на синтаксис значения ключа как шаблоны подстановки.
Ссылка выше заявляет:
Шаблоны замещения появляются в параметрах действия в правиле
Однако я также проверил, что полезная нагрузка доступна для функций не включает псевдонимы с помощью функции encode
для записи всей полезной нагрузки, доступной в действии, в таблицу.
, например, с правилом, включающим некоторые псевдонимы:
Сконфигурируйте действие для использования Sort key value
из ${encode(*, 'base64')}
, который будет кодировать всю полезную нагрузку как строку из 64 строк.
Когда вы публикуете sh сообщение:
Это сообщение записывается в DynamoDB as:
{
"DateTime": "ewogICJtZXNzYWdlIjogIkhlbGxvIGZyb20gQVdTIElvVCBjb25zb2xlIgp9",
"Payload": {
"arrivalTime": 1581082253585,
"myField": "Hello from AWS IoT console",
"payload": {
"message": "Hello from AWS IoT console"
}
},
"Topic": "blt/test"
}
Вся полезная нагрузка, включая псевдонимы, находится в * 106 5 * поле. Но декодирование строки base 64 в поле DateTime
покажет, что псевдонимы отсутствуют в функции encode
.