StreamInsight -- 将一个字符串 csv PointEvent 转换为多个 int PointEvent

本文关键字:PointEvent csv 转换 int 字符串 一个 StreamInsight | 更新日期: 2023-09-27 18:31:13

我可以在UDSO中做到这一点:

public sealed class PromoIdsToEvents : CepPointStreamOperator<string, int>
{
    public override IEnumerable<int> ProcessEvent(PointEvent<string> inputEvent)
    {
        if (inputEvent.Payload.Length > 0)
        {
            string[] separator = new[] { "," };
            string[] idStrings = inputEvent.Payload.Split(separator, StringSplitOptions.RemoveEmptyEntries);
            foreach (var p in idStrings)
            {
                yield return int.Parse(p);
            }
        }
    }
    public override bool IsEmpty
    {
        get { return false; }
    }
}

是否可以在查询中完成所有操作?所有这一切都是使IE可编号:

var multipleEventsAsInts = from c in csvEvents
                           let split = c.Split(',').Select(int.Parse)
                           select split;

StreamInsight -- 将一个字符串 csv PointEvent 转换为多个 int PointEvent

你也许可以在一个主题中做这项工作,但我认为你通过UDSO做这件事的方式是以程序方式处理StreamInsight事件的正确方法。

通过创建该 UDSO,您现在拥有了可重用的代码块。如果您只是在查询逻辑中执行了这项工作,您将无法轻松地重用它。

TXPower 是绝对正确的。此外,UDSO 将比在查询中使用 UDF(静态方法)更有效。但是,您的示例 UDSO 可能会更好一些......请注意,ProcessEvent 的返回值是 IEnumerable。您不需要一次产生一个回报;创建可枚举(数组就可以了),然后简单地返回它。