【发布时间】:2020-02-23 22:55:20
【问题描述】:
我尝试合并来自同一 EventHub 输入的两个不同事件(EventB 和 EventC)。我想要实现的是输出(Azure 函数)合并事件(EventB + EventC)每当收到 EventC。
这就是事件的样子:
{
"EventB": {
"Claim": {
"EventAUri": "A/123",
"Uri": "B/456"
},
"Metainfo": {
"Color": "Green"
}
}
}
和
{
"EventC" : {
"Claim": {
"EventBUri": "B/456"
},
"Target": {
"City": "Berlin",
"Position": {
"Latitude": 50.325096,
"Longitude": 72.19710
}
}
}
}
EventB 将只发送一次,而 EventC 每分钟发送几次。上述示例的期望输出是:
{
"Claim": {
"EventBUri": "B/456"
},
"Target": {
"City": "Berlin",
"Position": {
"Latitude": 50.325096,
"Longitude": 72.19710
}
},
"BMetainfo": {
"Color": "Green"
}
}
这是我迄今为止尝试过的:
WITH AllEvents AS (
SELECT
*
FROM
ehubinput
),
EventB AS (
select
EventB
From AllEvents
Where EventB Is Not NUll
),
EventC AS (
select EventC
from AllEvents
Where EventC Is Not NUll
)
Select * From EventB
Inner Join EventC
On DATEDIFF(day, EventB, EventC) BETWEEN 0 AND 5
AND EventB.EventB.Claim.Uri = EventC.EventC.Claim.EventBUri
不幸的是,我的代码将输出 EventB + x(for each EventC) * EventC 而不是 EventB + Last EventC....
谁能帮我解决这个问题?
更新:
This is my current output。 (我只希望最新的 EventC 与 EventB 结合在一起,而不是像我现在那样在流中的每个事件)
【问题讨论】:
-
所以你想基本上只取你已经拥有的最后一对 (EventB,EventC) 吗?我的理解正确吗?
-
@kgalic 是的。每次收到 EventC 时,我都不想输出相关的(对)EventB。我用我的查询的当前状态、我使用的输入和我当前得到的输出更新了我的问题。我还添加了一个赏金,我很乐意为正确答案而放弃。
标签: azure azure-stream-analytics