我今天在一个问题上烧了几个小时,以为我会分享。
我尝试启动之前正在运行的Azure Stream Analytics工作,并受到快速失败的欢迎:
无法启动Streaming Job'shayward10ProcessLogs'。
我查看了JSON日志,发现没有任何帮助。对问题的唯一描述是:
Stream Analytics作业有验证错误:字典中没有给定的密钥。
鉴于错误和我们数据库的一些更改,我尝试了以下操作无效:
我的查询如下:
SELECT
dateTimeUtc,
context.tenantId AS tenantId,
context.userId AS userId,
context.deviceId AS deviceId,
changeType,
dataType,
changeStatus,
failureReason,
ipAddress,
UDF.JsonToString(details) AS details
INTO
[MyOutput]
FROM
[MyInput]
WHERE
logType = 'MyLogType';
没有任何意义,所以我开始解构我的查询。我把它带到了一个领域,它成功了。我逐字逐行,试图找出原因(如果有的话)。
请参阅下面的答案。
答案 0 :(得分:2)
答案很简单(但令人沮丧)。当我到达最后一个领域时,那就是失败的地方:
UDF.JsonToString(details) AS details
这是唯一使用用户定义函数的字段。在完成后,我注意到函数编辑器将函数的标题显示为:
udf.JsonToString
这是一个套管问题。我在大写中使用了UDF,Azure Stream Analytics期望它以小写形式出现。我把我的最后一个字段改为:
udf.JsonToString(details) AS details
有效。
奇怪的是,它以前在工作。 Microsoft可能已对Azure Stream Analytics进行了更改,以使其在以前看不到的地方区分大小写。
但这很有意义。 JavaScript区分大小写。每个JavaScript对象基本上都是成员字典。考虑错误:
Stream Analytics作业有验证错误:字典中没有给定的密钥。
“udf”对象有一个包含我的函数的字典成员。 UDF对象将是未定义的。未定义的作为成员没有我的功能。
我希望我的2小时头脑冲击会帮助其他人。