现在我们在Flink中拥有带有花式窗口的SQL,我正在尝试使用“在Table API和SQL的未来Flink版本中可能实现的功能”所引用的递减移动平均线。来自他们的SQL roadmap/preview 2017-03 post:
table
.window(Slide over 1.hour every 1.second as 'w)
.groupBy('productId, 'w)
.select(
'w.end,
'productId,
('unitPrice * ('rowtime - 'w.start).exp() / 1.hour).sum / (('rowtime - 'w.start).exp() / 1.hour).sum)
这是我的尝试(也受到the calcite decaying example的启发):
SELECT
lb_index one_key,
HOP_START(proctime, INTERVAL '0.05' SECOND, INTERVAL '5' SECOND) start_time,
SUM(Y *
EXP(
proctime -
HOP_START(proctime, INTERVAL '0.05' SECOND, INTERVAL '5' SECOND)
))
FROM write_position
GROUP BY lb_index, HOP(proctime, INTERVAL '0.05' SECOND, INTERVAL '5' SECOND)
时间是处理时间,它是通过从AppendStream表中创建write_position时获得的过程时间:
tEnv.registerTable(
"write_position",
tEnv.fromDataStream(appendStream, "lb_index, Y, proctime.proctime"))
我收到此错误:
Cannot apply '-' to arguments of type '<TIME ATTRIBUTE(PROCTIME)> - <TIME ATTRIBUTE(PROCTIME)>'.
Supported form(s): '<NUMERIC> - <NUMERIC>' '<DATETIME_INTERVAL> - <DATETIME_INTERVAL>' '<DATETIME> - <DATETIME_INTERVAL>'
我尝试将proctime转换为我知道的所有其他类型(以尝试达到NUMERIC承诺的土地),但我只是找不到如何使它起作用。
我想念什么吗? proctime是否是您无法转换的非常特殊的“系统更改号”时间?如果是这样,仍然必须有某种方法可以将其与HOP_START(proctime,...)值进行比较。
答案 0 :(得分:1)
您可以使用timestampDiff减去两个时间点(请参见docs)。您可以这样使用它
TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)
时间点单位可以是秒,分钟,小时,天,月或年。
我还没有尝试使用处理时间,但是它确实适用于事件时间字段,因此希望可以。