流分析 JSON 输入查询解析

Stream Analytics JSON Input query parsing

我正在做一个 POC,通过 EventHub 摄取 JSON,通过 Stream 作业处理它并将它推送到 Azure SQL DW。

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

示例如下:

{
    "1-1": [{
            "Details": [{
                    "FirstName": "Super",
                    "LastName": "Man"                   
                }
            ]
        }
    ]
}

根元素有一个连字符 (-),我很难解析这个元素以访问相关项。

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

--#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

更多信息,您可以查看我们的页面Work with complex Data Types in JSON and AVRO

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

谢谢, JS(ASA 团队)

它尝试过并且效果很好。如果说我必须从两个单独的数组元素生成数据,我将不得不创建两个单独的 CTE。

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

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