Azure流分析:“流分析作业有验证错误:字典中没有给定的密钥。”

时间:2017-03-10 23:01:55

标签: azure dictionary azure-stream-analytics

我今天在一个问题上烧了几个小时,以为我会分享。

我尝试启动之前正在运行的Azure Stream Analytics工作,并受到快速失败的欢迎:

  

无法启动Streaming Job'shayward10ProcessLogs'。

我查看了JSON日志,发现没有任何帮助。对问题的唯一描述是:

  

Stream Analytics作业有验证错误:字典中没有给定的密钥。

鉴于错误和我们数据库的一些更改,我尝试了以下操作无效:

  • 删除和重新创建所有输入
  • 删除和重新创建所有输出
  • 针对数据运行测试(来自Event Hub),输出看起来不错

我的查询如下:

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';

没有任何意义,所以我开始解构我的查询。我把它带到了一个领域,它成功了。我逐字逐行,试图找出原因(如果有的话)。

请参阅下面的答案。

1 个答案:

答案 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小时头脑冲击会帮助其他人。