Преобразование даты в AWS IoT Rule SQL

Я создаю правила AWS IoT, используя Ansible playbook для формирования облака. Ниже приведен фрагмент, в котором я хочу создать простое правило для записи всего, от обновленной тени устройства до S3. Имя ключа должно иметь формат ГГГГ / ММ / ДД.

  • Фрагмент кода для IoT Rule SQL:

my_iot_rule:

    region: "{{ region }}"
    state: present
    name: "{{ envType }}_deviceshadow_rule_v1"
    description: Forward device shadow status to S3
    sql: SELECT * FROM "${aws}/things/#/shadow/get/accepted" WHERE schemaVersion='mySchemaVersion1.0'
    sqlVersion: "2016-03-23"
    actions:
      - s3:
          roleArn: arn:aws:iam::{{ awsAccount.accountId }}:role/iot-rule-engine
          bucketName: "{{ s3.someBucketName}}"
          "key": "deviceshadow/${device.deviceId}**/YYYY/MM/DD/somename.someextention**"
  • Предположим, у меня есть поле со временем эпохи как «время»: 1471618669000, которое будет на выходе SELECT *, time.
  • Как преобразовать "время": 1471618669000, чтобы получить ГГГГ, ММ и ДД в значении "ключа", указанном выше. Есть ли какая-нибудь функция в IoT SQL?

  • Или как я могу получить Sysdate в IoT Rule SQL? Заранее спасибо.


person Kru    schedule 22.02.2017    source источник


Ответы (2)


На сегодняшний день функция SQL AWS IOT не имеет date функции. Близкое решение - преобразовать эпоху в количество дней с 1970-1-1 на deviceshadow/${device.deviceId}/${timestamp()/86400000}/${timestamp()}.

Это сгруппирует каждое сообщение о событии (уникальный идентификатор в виде отметки времени) по дням.

Это все еще не читается человеком, и я думаю, единственный способ - использовать лямбда для преобразования даты.

person Robin Loxley    schedule 04.05.2017

Пожалуйста, используйте:

key:${parse_time("yyyy", timestamp())}/${parse_time("MM", timestamp())}/${parse_time("dd", timestamp())}/${parse_time("HH", timestamp())}//${timestamp()} 

Будет создана структура папок типа "year/month/date/hour/file_name"

person Kishor Werulkar    schedule 01.07.2021