AWS IoT Rule SQL中的日期转换

时间:2017-02-22 07:57:08

标签: aws-iot

我使用Ansible playbook创建AWS IoT规则以形成云。 下面是我想要创建一个简单规则来编写从更新的设备阴影到S3的所有内容的片段。 Key的名称应为YYYY / MM / DD。

  • 物联网规则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以获得YYYY,MM和DD的"键"的值在上面。 IoT SQL中是否有任何功能?

  • 或者我如何在物联网规则SQL中获得Sysdate? 提前致谢。

2 个答案:

答案 0 :(得分:1)

今天,AWS IOT SQL功能没有date功能。最近的解决方案是将纪元转换为自1970-1-1以来的天数deviceshadow/${device.deviceId}/${timestamp()/86400000}/${timestamp()}

这会将每个事件消息(唯一ID作为时间戳)按天分组。

这仍然不是人类可读的,我想唯一的方法是使用lambda进行日期转换。

答案 1 :(得分:0)

请使用:

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

它将创建类似 "year/month/date/hour/file_name"

的文件夹结构