Azure 流分析中的 UDF 在 JSON 中输出别名

UDF in Azure Stream Analytics outputs alias in the JSON

SAJ 脚本:

SELECT 

udf.createJsonMessage(param1, param2)

INTO Output
FROM  EventHubLocal  eventHub

删除了此处不需要的其他内容。

UDF:

function CreateJsonMessageForOutput(param1, param2) {
    var obj = new Object();
    obj.Prop1 = param1;
    obj.Prop2 = param2;

    return JSON.stringify(obj);
}

删除了此处不需要的代码。

输出 JSON 包括函数别名:

{
"createjsonmessage": "{\"Prop1\":\"param1\",\"Prop2\":\"param2\"}"
}

我要怎么做才能得到这种格式:

{
    \"Prop1\":\"param1\",
    \"Prop2\":\"param2\"
}

一种可能的方法是从对象中提取不同的元素。 请参阅下面的示例:

WITH step1 AS(
            SELECT udf.createJsonMessage(param1, param2)
            FROM EventHubLocal eventHub
)
SELECT createJsonMessage.Prop1, createJsonMessage.Prop2
INTO Output
FROM step1

这只需要对 UDF 函数做一点小改动:

function CreateJsonMessageForOutput(param1, param2) {
  var obj = new Object();
  obj.Prop1 = param1;
  obj.Prop2 = param2;

  return obj;
}

谢谢, JS

要获取 JSON 对象的值,我们还可以使用 GetRecordPropertyValue 方法。其中 属性 名称作为字符串表达式。

这个UDF函数将returnJSON对象

function CreateJsonMessageForOutput(param1, param2) {
  var obj = new Object();
  obj.Prop1 = param1;
  obj.Prop2 = param2;
  return obj;
}

查询

WITH step1 AS(SELECT udf.createJsonMessage(param1, param2)
            FROM EventHubLocal eventHub)
SELECT GetRecordPropertyValue(createJsonMessage,'Prop1') as Prop1, GetRecordPropertyValue(createJsonMessage,'Prop2') as Prop2
INTO Output
FROM step1