我有一个Azure Stream Analytics作业,它使用Blob存储中的EventHub和引用数据作为2个输入。参考数据是CSV,如下所示:
REGEX_PATTERN,FRIENDLY_NAME
115[1-2]{1}9,Name 1
115[3-9]{1}9,Name 2然后,我需要根据这个CSV在EventHub中的传入事件中查找一个属性,以获得FRIENDLY_NAME。
使用引用数据的典型方法是使用JOIN子句。但在这种情况下,我无法使用它,因为LIKE运算符不支持这种正则表达式匹配。
UDF是另一种选择,但我似乎找不到一种在函数中使用引用数据作为CSV的方法。
在Azure流分析作业中有没有其他方法可以做到这一点?
发布于 2020-04-30 16:33:39
据我所知,您的方案不支持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'需要join密钥。我的意思是,即使在这里也不需要参考数据输入。
您的想法是使用UDF脚本并将数据加载到UDF中,以便与硬编码的regex数据进行比较。这个想法并不容易维护。也许你可以考虑我的变通方法:
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函数内部,请接受group id列并加载对应的json数组。然后循环各行以匹配正则表达式,并将数据保存到目标住宅。
我认为Azure函数在sql作业中比UDF更灵活。另外,这个解决方案可能更容易维护。
https://stackoverflow.com/questions/61505292
复制相似问题