【问题标题】:Azure Stream Analytics: Regex in Reference DataAzure 流分析:参考数据中的正则表达式
【发布时间】:2020-08-13 17:56:37
【问题描述】:

我有一个 Azure 流分析作业,它使用 Blob 存储中的 EventHub 和参考数据作为 2 个输入。参考数据是 CSV,看起来像这样:

REGEX_PATTERN,FRIENDLY_NAME
115[1-2]{1}9,Name 1
115[3-9]{1}9,Name 2

然后,我需要在 EventHub 中的传入事件中针对此 CSV 查找属性以获取 FRIENDLY_NAME

使用参考数据的典型方式是使用JOIN 子句。但在这种情况下,我不能使用它,因为LIKE 运算符不支持这种正则表达式匹配。

UDF 是另一种选择,但我似乎找不到在函数内将参考数据用作 CSV 的方法。

在 Azure 流分析作业中还有其他方法吗?

【问题讨论】:

  • 事件中心和参考数据之间的连接键是什么? REGEX_PATTERN?
  • @JayGong 是的,它是加入密钥。
  • 了解,但我认为关键应该是特定的,而不是 ASA 工作中的正则表达式值。所以这是你的痛点,对吧?
  • @JayGong 正确。这就是为什么我怀疑JOIN 是否适用于我的情况。我能想到的替代方法是使用 UDF,但我想知道是否可以使用 UDF 中的整个参考数据列表来执行查找。
  • 作为最后的后备,我正在考虑在 UDF 中硬编码参考数据。但我需要这适用于使用不同参考数据的几个不同的 ASA 工作。所以那里的事情会变得很糟糕。

标签: azure azure-stream-analytics


【解决方案1】:

据我所知,您的方案不支持JOIN。连接键应该是特定的,不能是正则表达式值。

因此,这里不适合参考数据,因为它应该在 ASA sql 中使用,如下所示:

SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId  
FROM Input1 I1 TIMESTAMP BY EntryTime  
JOIN Registration R  
ON I1.LicensePlate = R.LicensePlate  
WHERE R.Expired = '1'

需要加入密钥。我的意思是即使在这里也不需要参考数据输入。

您的想法是使用 UDF 脚本并加载 UDF 中的数据以与硬编码正则表达式数据进行比较。这个想法不容易维持。也许你可以考虑我的解决方法:

1.您说您有不同的参考数据,请将它们分组并存储为json数组。为每个组分配一个组 ID。例如:

组 ID 1:

[
    {
        "REGEX":"115[1-2]{1}9",
        "FRIENDLY_NAME":"Name 1"
    },
    {
        "REGEX":"115[3-9]{1}9",
        "FRIENDLY_NAME":"Name 2"
    }
]

....

2. 将一列添加到引用组 ID 并设置您的 ASA SQL 的 Azure Function as Output。在 Azure Function 中,请接受 group id 列并加载相应组的 json 数组。然后循环行以匹配正则表达式并将数据保存到目标位置。

我认为 Azure Function 在 ASA sql 作业中比 UDF 更灵活。另外,这个解决方案可能更容易维护。

【讨论】:

  • 我对这个解决方案有了大致的了解。当前的 ASA 作业输出到另一个 EvenHub,现在需要将其更改为 Azure 函数,让 Azure 函数执行正则表达式查找工作,然后使用自定义代码下沉到事件中心。这意味着我们的工作将发生重大的架构变化,我一直在寻找一个仅使用 ASA 结构的更简单的解决方案。感谢您的想法,如果我们找不到其他解决方法,我们会牢记这一点。
  • @user_name 是的!我知道这对你来说可能太反了。您可以将其保留为解决方法。还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 2011-06-05
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 2011-08-10
相关资源
最近更新 更多