AWS 物联网分析增量 Window

AWS IoT Analytics Delta Window

我在使用 AWS IoT Analytics Delta Window (docs) 时遇到了实际问题。

我正在尝试对其进行设置,以便每天查询 运行 仅获取最后 1 小时的数据。根据文档,schedule 功能可用于 运行 使用 cron 表达式的查询(在我的例子中是每小时一次)并且 delta window 应该限制我的查询仅包括以下记录在指定的时间 window(在我的例子中是最后一个小时)。

我 运行ning 的 SQL 查询只是 SELECT * FROM dev_iot_analytics_datastore,如果我不包含任何增量 window,我会按预期获得记录。不幸的是,当我包含一个增量表达式时,我什么也得不到(永远)。我现在让数据积累了大约 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)

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

由于 delta windows 是插入到您的 SQL 中的有效过滤器,您可以通过手动将过滤器表达式插入到数据集的查询中来解决它们。

即,将具有 -3 分钟(负)偏移量和 'from_unixtime(my_timestamp)' 时间表达式的增量 window 过滤器应用于 '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 between ...) 只是限制扫描分区的优化。您可以将其删除以进行故障排除。

请尝试以下操作:

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

经过数周的测试并尝试了此 post 中的所有建议以及更多建议后, 非常技术性 的答案似乎是 'switch off and back on' .我删除了整个分析堆栈并用不同的名称重建了所有内容,现在它似乎可以正常工作了!

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