我在让 AWS IoT Analytics Delta Window ( 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)
最佳答案
您使用的偏移量和时间表达式参数是什么?
由于增量窗口是插入到 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 ...) 只是限制扫描分区的优化。您可以将其删除以进行故障排除。
关于amazon-web-services - AWS IoT Analytics 增量窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56144542/