Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 流分析JSON输入查询解析_Azure_Azure Stream Analytics - Fatal编程技术网

Azure 流分析JSON输入查询解析

Azure 流分析JSON输入查询解析,azure,azure-stream-analytics,Azure,Azure Stream Analytics,我正在通过EventHub接收JSON,通过流作业处理JSON,并将其推送到Azure SQL DW中 我以前使用过JSON摄取,但现在面临的困难是JSON中使用的命名结构 以下是示例: 根元素有一个连字符(-),我很难通过该元素进行解析以访问相关项 我尝试了以下查询,并在它输出到的SQL表中得到空值: --#1 SELECT ["2-1"].Details.FirstName AS First_Name ,["2-1"].Details.LastName AS Last_Na

我正在通过EventHub接收JSON,通过流作业处理JSON,并将其推送到Azure SQL DW中

我以前使用过JSON摄取,但现在面临的困难是JSON中使用的命名结构

以下是示例:
根元素有一个连字符(-),我很难通过该元素进行解析以访问相关项

我尝试了以下查询,并在它输出到的SQL表中得到空值:

--#1
SELECT
    ["2-1"].Details.FirstName AS First_Name
    ,["2-1"].Details.LastName AS Last_Name
INTO
    [SA-OUTPUT]
FROM
    [SA-INPUT]

--#2
SELECT
    [2-1].Details.FirstName AS First_Name
    ,[2-1].Details.LastName AS Last_Name
INTO
    [SA-OUTPUT]
FROM
    [SA-INPUT]

--#3
SELECT
    2-1.Details.FirstName AS First_Name
    ,2-1.Details.LastName AS Last_Name
INTO
    [SA-OUTPUT]
FROM
    [SA-INPUT]

--#4
SELECT
    SA-INPUT.["2-1"].Details.FirstName AS First_Name
    ,SA-INPUT.["2-1"].Details.LastName AS Last_Name
INTO
    [SA-OUTPUT]
FROM
    [SA-INPUT]
如果能找到正确的方法,我将不胜感激


提前感谢。

您的JSON模式是嵌套的,但也有一些数组。为了读取数据,需要使用GetArrayElement函数

下面是一个将读取示例数据的查询:

WITH Step1 AS(
SELECT GetArrayElement([1-1], 0) as FirstLevel
FROM iothub),
Step2 AS(
SELECT GetArrayElement(FirstLevel.Details,0) SecondLevel
FROM Step1)
SELECT SecondLevel.FirstName, SecondLevel.LastName from Step2
有关更多信息,您可以查看我们的页面

如果你有任何问题,请告诉我

谢谢,
JS(ASA团队)

它尝试过,而且工作得很好。假设我必须从两个单独的数组元素生成数据,那么我必须创建两个单独的CTE

{
    "1-1": [{
            "Details": [{
                    "FirstName": "Super",
                    "LastName": "Man"                   
                }
            ]
        }
    ]
},
{
    "2-1": [{
            "Address": [{
                    "Street": "Main",
                    "Lane": "Second"                   
                }
            ]
        }
    ]
}   

如何将两个CTE中的元素合并到一个输出查询中?我只能在下一行中引用CTE。

谢谢您的帮助。我得到了处理数组和嵌套结构的要点。链接无效。您可以在以下位置找到信息:您可以在第一步中调用两个GetArrayElement函数(一个用于“1-1”,另一个用于“2-1”)。从那里延伸到其他步骤。顺便说一句,如果你想减少步骤的数量,也可以使用GetRecordPropertyValue。谢谢你的回复。我最终将GetRecordPropertyValue与多个GetArrayElement一起使用。工作得很有魅力。
{
    "1-1": [{
            "Details": [{
                    "FirstName": "Super",
                    "LastName": "Man"                   
                }
            ]
        }
    ]
},
{
    "2-1": [{
            "Address": [{
                    "Street": "Main",
                    "Lane": "Second"                   
                }
            ]
        }
    ]
}