【问题标题】:Esper arithmetic operation on date object日期对象的埃斯珀算术运算
【发布时间】:2016-08-27 08:05:52
【问题描述】:

我正在寻找一种方法来确定两个连续事件之间的时间差,这些事件的时间事件属性的值如下:2016-08-25T13:05:06.953391Z。这里最好的方法是什么,我需要为事件模式使用什么类型。在线使用 Esper EPL 时,我尝试使用 Long 或 Date,但出现以下错误:

请检查 EPL 模块文本

表达式'create schema StockTick(symbol string, price double...(63 chars)'中的部署失败:错误开始语句:可嵌套类型配置遇到属性'time'的意外属性类型名称'date',预期java .lang.Class 或 java.util.Map 或先前声明的 Map 或 ObjectArray 类型的名称 [创建模式 StockTick(symbol string, price double, time date)]

请检查提前时间和发送事件文本

第 1 行的指令无效事件:名称为“时间”的属性无法接受分配的值:类型为“java.lang.String”的列“时间”到类型为“java.lang”的事件属性“时间”的分配无效.Long',列和参数类型不匹配

【问题讨论】:

    标签: esper


    【解决方案1】:

    对于 EPL 在线工具 web 应用程序,我认为不支持解析自定义日期格式。您可以使用“long”并使用自 1970 年 1 月 1 日 00:00:00 UTC 以来的毫秒数。

    【讨论】:

    • 谢谢!您认为确定具有例如相同唯一 ID 的连续事件之间的时间差并且仅输出时间差的最佳方法是什么?这可以用previous或prev函数完成吗?
    • 文档中有“prev”的例子
    • 谢谢。我让它工作了: select prev(0, time) - prev(1, time) as timeDiff from StockTick.win:length(2);您能否通过以下内容为我指明正确的方向。我想每天输出一次每个唯一 ID 的最频繁时差。我该怎么做?将时差存储在窗口或表格中?还是使用列举法最频繁?还是组合?
    • 您所做的工作可能不正确,因为您希望 prev 每个唯一 ID。我会将时差插入另一个流(插入)。然后我想你想计算时差。这意味着您需要对它们进行四舍五入。您可以在时差上使用 count(*) 和 group-by。然后我认为将该结果插入另一个流。比在该流上每 x 分钟使用带有输出快照的排名窗口。
    • 感谢您的建议!我尝试了以下方法:创建模式StockTick(符号字符串,价格加倍,时间长);插入 TimeDiffStream 选择先验(0,时间)-先验(1,时间)作为 timeDiff,来自 StockTick 的符号;插入 CountStream 选择 count(*) as count, symbol, timeDiff from TimeDiffStream group by timeDiff; select timeDiff from CountStream.ext:rank(symbol, 1, count);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 2013-05-16
    • 2011-10-22
    • 2018-04-03
    相关资源
    最近更新 更多