Azure 流分析 : "Stream Analytics job has validation errors: The given key was not present in the dictionary."

标签 azure dictionary azure-stream-analytics

今天我花了几个小时来解决一个问题,并想分享一下。

我尝试启动之前正在运行的 Azure 流分析作业,但很快就失败了:

Failed to start Streaming Job 'shayward10ProcessLogs'.

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

Stream Analytics job has validation errors: The given key was not present in the dictionary.

考虑到错误以及对我们数据库的一些更改,我尝试了以下方法但没有效果:

  • 删除并重新创建所有输入
  • 删除并重新创建所有输出
  • 针对数据(来自事件中心)运行测试,输出看起来不错

我的查询如下:

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

没有任何意义,所以我开始解构我的查询。我把它简化为一个字段并且成功了。我逐个领域进行研究,试图找出是哪个领域(如果有的话)造成的。

请参阅下面我的回答。

最佳答案

答案很简单(但令人沮丧)。当我到达最后一个字段时,这就是失败的地方:

UDF.JsonToString(details) AS details

这是唯一使用用户定义函数的字段。经过一番折腾后,我注意到函数编辑器显示函数的标题为:

udf.JsonToString

这是一个外壳问题。我的 UDF 是大写的,而 Azure 流分析希望它是小写的。我将最终字段更改为:

udf.JsonToString(details) AS details

成功了。

奇怪的是,它之前是有效的。 Microsoft 可能对 Azure 流分析进行了更改,使其在以前似乎不区分大小写的地方区分大小写。

不过,这是有道理的。 JavaScript 区分大小写。每个 JavaScript 对象基本上都是一个成员字典。考虑错误:

Stream Analytics job has validation errors: The given key was not present in the dictionary.

“udf”对象有一个字典成员,其中包含我的函数。 UDF 对象将是未定义的。 Undefined 没有我作为成员的功能。

我希望我的 2 小时撞头类(class)能对其他人有所帮助。

关于Azure 流分析 : "Stream Analytics job has validation errors: The given key was not present in the dictionary.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42729164/

相关文章:

Azure 流分析 GetMetadataPropertyValue 不起作用

azure - 使用rest api启动停止azure应用程序服务

asp.net-mvc - 在哪里可以存储 ASP.NET MVC 应用程序的源代码副本?

python - 如何在不使用 Pillow 的情况下在 Python 中调整图像大小

list - 如何在 flutter 的共享首选项中存储列表 map 对象

azure - 流分析: Dynamic output path based on message payload

azure - 使用表存储azure中的Etag通过多线程更新属性

python - 使用 for 循环创建数据副本

c# - 是否有 IDictionary 实现在缺少键时返回默认值而不是抛出?

Azure 流分析不提供 DocumentDB 输出接收器