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 ...) 只是限制扫描分区的优化。您可以将其删除以进行故障排除。
请尝试以下操作:
- 将查询设置为
SELECT * FROM dev_iot_analytics_datastore
- 数据选择过滤器:
- 数据选择window:
Delta time
- 偏移量:-1 小时
- 时间戳表达式:
from_unixtime(timestamp_sec)
- 稍等片刻,例如 15 分钟或更长时间,等待数据集内容 运行。
- 查看内容
经过数周的测试并尝试了此 post 中的所有建议以及更多建议后, 非常技术性 的答案似乎是 'switch off and back on' .我删除了整个分析堆栈并用不同的名称重建了所有内容,现在它似乎可以正常工作了!
重要的是,尽管由于实际分辨率,我已将其标记为正确答案。如果我的部署按预期运行,@Populus and @Roger 提供的两个答案都是正确的。
我在使用 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 ...) 只是限制扫描分区的优化。您可以将其删除以进行故障排除。
请尝试以下操作:
- 将查询设置为
SELECT * FROM dev_iot_analytics_datastore
- 数据选择过滤器:
- 数据选择window:
Delta time
- 偏移量:-1 小时
- 时间戳表达式:
from_unixtime(timestamp_sec)
- 数据选择window:
- 稍等片刻,例如 15 分钟或更长时间,等待数据集内容 运行。
- 查看内容
经过数周的测试并尝试了此 post 中的所有建议以及更多建议后, 非常技术性 的答案似乎是 'switch off and back on' .我删除了整个分析堆栈并用不同的名称重建了所有内容,现在它似乎可以正常工作了!
重要的是,尽管由于实际分辨率,我已将其标记为正确答案。如果我的部署按预期运行,@Populus and @Roger 提供的两个答案都是正确的。