流分析 UDF 在测试中有效,但在作业中无效

Posted

技术标签:

【中文标题】流分析 UDF 在测试中有效,但在作业中无效【英文标题】:Stream Analytics UDF works in Test but not in Job 【发布时间】:2019-09-25 08:04:35 【问题描述】:

我需要在流分析中解析一个 JSON 数据,

下面是正在使用的示例,

SELECT
     UDF.parseData(GetRecordPropertyValue(GetArrayElement(A.message,0), 'raw')).intent as 'rawData'
FROM
    AppInsightMessages A  

我可以从现场解析意图。这是需要的自定义日志记录。

但它不适用于流分析作业。

我收到类似的错误

Stream Analytics job has validation errors: Query compilation error: Expression is not supported: 'udf . parseData 

尝试使用CAST 将字符串也记录下来。不走运。

我做错了什么? 提前谢谢..

【问题讨论】:

【参考方案1】:

通常,这是因为试图将多个阶段合并到一个表达式中。

请尝试将处理分成几个步骤:

With UDFStep AS (
SELECT
    UDF.parseData(GetRecordPropertyValue(GetArrayElement(A.message,0), 'raw'))
FROM
    AppInsightMessages A
)

SELECT intent as rawData
FROM UDFStep

顺便说一句,您不需要引用“rawData”。

【讨论】:

谢谢,我试过了,但它仍然显示相同的 UDF 错误。不知道为什么它在流作业中无法识别。 尝试将 GetArrayElement(A.message,0) 提取到一个单独的步骤,然后将 GetRecordPropertyValue 和 UDF 作为另一个步骤应用。甚至拆分这 2 个。 GetArrayElement 用于处理对象,但这些是字符串值。所以我对代码进行了更改以发送对象并使用 GetRecordPropertyValue + GetArrayElements 到现在为止。但我的情况仍然需要字符串转换。

以上是关于流分析 UDF 在测试中有效,但在作业中无效的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式在测试器中有效,但在我的代码中无效[重复]

我的 API url 在 Chrome 浏览器中有效,但在我的测试 apache 本地主机环境中无效

Http POST 在 Postman 中有效,但在 Flutter 中无效

重复的 typedef - 在 C 中无效但在 C++ 中有效?

简单的 Mockito 验证在 JUnit 中有效,但在 Spock 中无效

每月项目数在 CreateView 中有效,但在 TemplateView 中无效