AWS IoT Analytics增量窗口

时间:2019-05-15 08:14:32

标签: amazon-web-services aws-iot-analytics

我在使AWS IoT Analytics Delta窗口(docs)正常工作方面遇到真正的问题。

我正在尝试进行设置,以便每天运行查询以仅获取最后1小时的数据。根据文档,schedule功能可用于使用cron表达式(在我的情况下,每小时)运行查询,而delta window应该将查询限制为仅包含指定时间内的记录窗口(在我的情况下为最后一个小时)。

我正在运行的SQL查询只是SELECT * FROM dev_iot_analytics_datastore,如果我不包括任何增量窗口,则将按预期获得记录。不幸的是,当我包含一个增量表达式时,我什么也得不到。我现在将数据累积了大约10天,因此数据库中有几百万条记录。鉴于我不确定最佳格式是什么,我在条目中包括以下时间字段:

datetime  :  2019-05-15T01:29:26.509
(A string formatted using ISO Local Date Time)

timestamp_sec  :  1557883766
(A unix epoch expressed in seconds)

timestamp_milli  :  1557883766509
(A unix epoch expressed in milliseconds)

AWS还自动添加了一个名为__dt的值,该值与我的datetime使用相同的格式,只是似乎在1天内准确。即在指定日期输入的所有值都具有相同的值(例如2019-05-15 00:00:00.00

我已经尝试了标准SQL和Presto的一系列表达式(包括建议的AWS表达式),因为我不确定此查询使用的是哪个表达式。我知道他们将Presto的子集用于分析,因此将其用于增量很有意义,但是文档只是说' ...任何有效的SQL表达式'。

到目前为止我还没有尝试过的表情:


from_unixtime(timestamp_sec)
from_unixtime(timestamp_milli)
cast(from_unixtime(unixtime_sec) as date)
cast(from_unixtime(unixtime_milli) as date)
date_format(from_unixtime(timestamp_sec), '%Y-%m-%dT%h:%i:%s')
date_format(from_unixtime(timestamp_milli), '%Y-%m-%dT%h:%i:%s')
from_iso8601_timestamp(datetime)

3 个答案:

答案 0 :(得分:0)

您使用的偏移量和时间表达参数是什么?

由于增量窗口是有效插入SQL的过滤器,因此您可以通过将过滤器表达式手动插入数据集的查询中来对它们进行故障排除。

即,将具有-3分钟(负)偏移量和'from_unixtime(my_timestamp)'时间表达式的增量窗口过滤器应用于'SELECT my_field FROM my_datastore'查询将转换为等效查询:

SELECT my_field FROM
    (SELECT * FROM "my_datastore" WHERE
        (__dt between date_trunc('day', iota_latest_succeeded_schedule_time() - interval '1' day)
                  and date_trunc('day', iota_current_schedule_time() + interval '1' day)) AND
        iota_latest_succeeded_schedule_time() - interval '3' minute < from_unixtime(my_timestamp) AND
        from_unixtime(my_timestamp) <= iota_current_schedule_time() - interval '3' minute)

尝试使用类似的查询(不带增量时间过滤器),对偏移量和时间表达式使用正确的值,然后看清得到的结果。(_dt之间...)只是用于限制扫描分区的一种优化。您可以将其删除以进行故障排除。

答案 1 :(得分:0)

请尝试以下操作:

  1. 将查询设置为SELECT * FROM dev_iot_analytics_datastore
  2. 数据选择过滤器:
    • 数据选择窗口:Delta time
    • 偏移量:-1小时
    • 时间戳记表达式:from_unixtime(timestamp_sec)
  3. 等待数据集内容运行15分钟或更长时间。
  4. 检查内容

答案 2 :(得分:0)

经过数周的测试,并尝试了本文中的所有建议以及更多建议,看来极其技术的答案是“关闭并重新打开”。我删除了整个分析堆栈,并使用不同的名称重建了所有内容,现在看来它可以正常工作!

重要的是,即使由于实际分辨率我已将其标记为正确答案。如果我的部署按预期运行,则@Populus@Roger提供的答案都是正确的。