2017-03-10 10 views
0

今日は問題に2,3時間も燃えてしまい、分かち合うと思いました。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'; 

何も作ら感覚が私は私のクエリを解体開始しました。私はそれを1つのフィールドに持ってきて成功しました。私はフィールドでフィールドに行って、フィールド(もしあれば)が原因であるかを調べようとしました。

以下の回答を参照してください。

答えて

2

答えは簡単でした(まだ不満です)。最後のフィールドに移動したときに、それは失敗があった場所です:

UDF.JsonToString(details) AS details 

これは、ユーザー定義関数を使用した唯一のフィールドでした。最後に、関数エディタで関数のタイトルが次のように表示されていることに気づきました。

udf.JsonToString 

ケーシングの問題でした。私はUDFを大文字で、Azure Stream Analyticsは小文字でそれを期待していました。私は最終フィールドを次のように変更しました:

udf.JsonToString(details) AS details 

奇妙なことは以前は働いていたことです。マイクロソフトではAzure Stream Analyticsを変更して、以前とは思えない場所で大文字と小文字を区別している可能性があります。

ただし、意味があります。 JavaScriptは大文字と小文字を区別します。すべてのJavaScriptオブジェクトは基本的にメンバーの辞書です。エラーを考えてみます。

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

"udf"オブジェクトには、自分の機能を持つ辞書メンバーがあります。 UDFオブジェクトは未定義です。未定義には私のメンバーとしての機能はありません。

2時間のヘッドバンギングセッションが他の人に役立つことを願っています。

関連する問題