AWS Timestream的LAST_VALUE是否支持IGNORE NULLS参数?
AWS Timestream中last_value函数的IGNORE NULLS支持问题
AWS Timestream不支持在last_value窗口函数中使用IGNORE NULLS语法,你尝试的两种写法都是Athena(基于Presto)的语法,并不适用于Timestream。
要实现“按deviceId分组,获取到当前行为止的最后一个非空power值”,可以使用以下替代方案:
方案1:使用FILTER子句过滤空值
Timestream支持在窗口函数后添加FILTER子句筛选非空记录,写法如下:
LAST_VALUE(power) FILTER (WHERE power IS NOT NULL) OVER ( PARTITION BY deviceId ORDER BY time ASC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS last_non_null_power
方案2:倒序窗口取第一个非空值
通过将时间倒序排列,用FIRST_VALUE获取最新的非空值,等价于原需求的“最后一个非空值”:
FIRST_VALUE(power) OVER ( PARTITION BY deviceId ORDER BY time DESC RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) FILTER (WHERE power IS NOT NULL) AS last_non_null_power
方案3:子查询关联(适合小数据集)
如果窗口函数方案不符合预期,可通过子查询找到每个时间点之前的最后一个非空值:
SELECT t.deviceId, t.time, t.power, (SELECT power FROM your_table sub WHERE sub.deviceId = t.deviceId AND sub.time <= t.time AND sub.power IS NOT NULL ORDER BY sub.time DESC LIMIT 1) AS last_non_null_power FROM your_table t
内容的提问来源于stack exchange,提问作者ADringer
相关产品推荐
相关产品推荐

