【问题标题】:Azure Stream Analytics: "Stream Analytics job has validation errors: The given key was not present in the dictionary."Azure 流分析:“流分析作业存在验证错误:字典中不存在给定的键。”
【发布时间】:2017-03-10 23:01:54
【问题描述】:

我今天在一个问题上花费了几个小时,并认为我会分享。

我尝试启动以前工作的 Azure 流分析作业,但很快就失败了:

无法启动流式作业“shayward10ProcessLogs”。

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

流分析作业存在验证错误:字典中不存在给定键。

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

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

我的查询如下所示:

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

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

请看下面我的回答。

【问题讨论】:

    标签: azure dictionary azure-stream-analytics


    【解决方案1】:

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

    UDF.JsonToString(details) AS details
    

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

    udf.JsonToString
    

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

    udf.JsonToString(details) AS details
    

    成功了。

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

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

    流分析作业存在验证错误:字典中不存在给定键。

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

    我希望我 2 小时的头部碰撞课程可以帮助其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 2012-11-03
      • 2017-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多