2

我在让 AWS IoT Analytics Delta Window ( docs ) 工作时遇到了真正的问题。

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

我正在运行的 SQL 查询很简单SELECT * FROM dev_iot_analytics_datastore,如果我不包含任何增量窗口,我会按预期获得记录。不幸的是,当我包含一个 delta 表达式时,我什么也得不到(永远)。我现在将数据累积了大约 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 的一个子集进行分析,所以他们将它用于 delta 是有道理的,但文档只是说' ......任何有效的 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)

4

3 回答 3

2

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

由于增量窗口实际上是插入到 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 between ...) 只是限制扫描分区的优化。您可以将其删除以进行故障排除。

于 2019-05-30T23:13:35.060 回答
1

请尝试以下方法:

  1. 将查询设置为SELECT * FROM dev_iot_analytics_datastore
  2. 数据选择过滤器:
    • 数据选择窗口:Delta time
    • 偏移量:-1 小时
    • 时间戳表达式:from_unixtime(timestamp_sec)
  3. 等待数据集内容运行一段时间,比如 15 分钟或更长时间。
  4. 检查内容
于 2019-06-18T18:34:46.240 回答
0

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

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

于 2019-06-22T08:52:51.693 回答