在 esper 语句中使用自定义类型属性的 Cumulocity
Cumulocity using custom type properties in esper statements
我很难使用自定义类型的属性来编写上下文等语句。例如,这是有效的:
create context TripContext
context PartionBySource
partition by source from EventCreated,
context ContextBorders
initiated by EventCreated(
type="c8y_SwitchPowerReport") as startEvent
terminated by EventCreated(
type="c8y_SwitchPowerReport") as endEvent;
但这还不够,我需要检查我的一些自定义属性以更好地定义上下文。我希望能够做这样的事情:
create context TripContext
context PartionBySource
partition by
source,
getString(????, "customProp1"),
getNumber(????, "customProp2"),
...
from EventCreated,
context ContextBorders
initiated by EventCreated(
type="c8y_SwitchPowerReport",
getString(startEvent, "c8y_SwitchPower.newStatus") = "ON") as startEvent
terminated by EventCreated(
type="c8y_SwitchPowerReport",
getString(endEvent, "c8y_SwitchPower.newStatus") = "OFF") as endEvent;
我不知道用什么代替 ????参考事件。它对 "native" 属性(如源、时间、类型等)是透明的。但是一旦有自定义 属性,我就不知道如何访问它了。
至于 initiated/terminated 语法,有些东西真的很奇怪我不明白,但也许它更像是一个 Esper 而不是 Cumulocity 问题。这是有效的:
terminated by EventCreated(
type="c8y_SwitchPowerReport",
getString(endEvent, "c8y_SwitchPower.newStatus") = "OFF") as endEvent
但这不是:
initiated by EventCreated(
type="c8y_SwitchPowerReport",
getString(startEvent, "c8y_SwitchPower.newStatus") = "ON") as startEvent
我收到一条错误消息:
Failed to validate single-row function parameter expression 'startEvent': Property named 'startEvent' is not valid in any stream
如有任何见解,我们将不胜感激。
我也找不到像您尝试的那样快速获取它的方法运行。
但我会推荐以下方法。如果您无论如何都与自定义片段有很大关系,那么通过提取此值的附加流 运行 事件是有意义的:
create schema MyCustomEvent(
event Event,
myCustomString String,
myCustomNumber BigDecimal
);
insert into MyCustomEvent
select
e.event as Event,
getString(e, "myCustomString") as myCustomString,
getNumber(e, "myCustomNumber") as myCustomNumber
from EventCreated e
where getString(e, "myCustomString") is not null
and getNumber(e, "myCustomNumber") is not null;
现在您可以轻松地在 MyCustomEvent 而不是 EventCreated 上创建上下文。
我很难使用自定义类型的属性来编写上下文等语句。例如,这是有效的:
create context TripContext
context PartionBySource
partition by source from EventCreated,
context ContextBorders
initiated by EventCreated(
type="c8y_SwitchPowerReport") as startEvent
terminated by EventCreated(
type="c8y_SwitchPowerReport") as endEvent;
但这还不够,我需要检查我的一些自定义属性以更好地定义上下文。我希望能够做这样的事情:
create context TripContext
context PartionBySource
partition by
source,
getString(????, "customProp1"),
getNumber(????, "customProp2"),
...
from EventCreated,
context ContextBorders
initiated by EventCreated(
type="c8y_SwitchPowerReport",
getString(startEvent, "c8y_SwitchPower.newStatus") = "ON") as startEvent
terminated by EventCreated(
type="c8y_SwitchPowerReport",
getString(endEvent, "c8y_SwitchPower.newStatus") = "OFF") as endEvent;
我不知道用什么代替 ????参考事件。它对 "native" 属性(如源、时间、类型等)是透明的。但是一旦有自定义 属性,我就不知道如何访问它了。
至于 initiated/terminated 语法,有些东西真的很奇怪我不明白,但也许它更像是一个 Esper 而不是 Cumulocity 问题。这是有效的:
terminated by EventCreated(
type="c8y_SwitchPowerReport",
getString(endEvent, "c8y_SwitchPower.newStatus") = "OFF") as endEvent
但这不是:
initiated by EventCreated(
type="c8y_SwitchPowerReport",
getString(startEvent, "c8y_SwitchPower.newStatus") = "ON") as startEvent
我收到一条错误消息:
Failed to validate single-row function parameter expression 'startEvent': Property named 'startEvent' is not valid in any stream
如有任何见解,我们将不胜感激。
我也找不到像您尝试的那样快速获取它的方法运行。 但我会推荐以下方法。如果您无论如何都与自定义片段有很大关系,那么通过提取此值的附加流 运行 事件是有意义的:
create schema MyCustomEvent(
event Event,
myCustomString String,
myCustomNumber BigDecimal
);
insert into MyCustomEvent
select
e.event as Event,
getString(e, "myCustomString") as myCustomString,
getNumber(e, "myCustomNumber") as myCustomNumber
from EventCreated e
where getString(e, "myCustomString") is not null
and getNumber(e, "myCustomNumber") is not null;
现在您可以轻松地在 MyCustomEvent 而不是 EventCreated 上创建上下文。