流分析 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。
我正在做一个 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。