在逐流分析SQL中将带有数组的流传递到多行

在逐流分析SQL中将带有数组的流传递到多行,sql,arrays,azure-sql-database,azure-iot-hub,azure-stream-analytics,Sql,Arrays,Azure Sql Database,Azure Iot Hub,Azure Stream Analytics,我有一个来自IoTHub的流,比如: { "topic": "saveData", "deviceId": "testDevice", "data": [ { "timestamp": "2018-04-06T11:46:11.842305", "device": "baiTest", "variable": "Status01_Test", "name": "

我有一个来自
IoT
Hub的流,比如:

{
    "topic": "saveData",
    "deviceId": "testDevice",
    "data": [
        {
            "timestamp": "2018-04-06T11:46:11.842305",
            "device": "baiTest",
            "variable": "Status01_Test",
            "name": "m_01_test",
            "value": 365
        },
        {
            "timestamp": "2018-04-06T11:46:11.842306",
            "device": "hmuTest",
            "variable": "Status02_Test",
            "name": "m_02_test",
            "value": 817
        },
        {
            "timestamp": "2018-04-06T11:46:11.842307",
            "device": "vwzTest",
            "variable": "Status03_Test",
            "name": "m_03_test",
            "value": 247
        }
    ]
}
我想在
SQL
DB中传递此流,如下所示:

deviceId    timestamp                   device   variable       name       value
testDevice  2018-04-06T11:46:11.842305  baiTest  Status01_Test  m_01_test  365
testDevice  2018-04-06T11:46:11.842306  hmuTest  Status02_Test  m_02_test  817
testDevice  2018-04-06T11:46:11.842307  vwzTest  Status03_Test  m_03_test  247
到目前为止,我的代码是:

WITH itemList AS ( 
    SELECT deviceId, GetArrayElement(data,0) as datas
    FROM [iotHub] WHERE topic = 'saveData' )
SELECT deviceId, datas.timestamp, datas.device, datas.variable, datas.name, datas.value
INTO [sqlTable]
FROM itemList
但这只将
data.array
的第一个索引[0]存储到
SQL
中。 我认为可以使用
**GetArrayElements**
函数来处理存储阵列,但我无法管理它。

您应该使用它在Azure Stream Analytics中展平复杂的json。请参考以下查询

SELECT   
  iothubAlias.deviceId,
  arrayElement.ArrayValue.timestamp,
  arrayElement.ArrayValue.device,
  arrayElement.ArrayValue.variable,
  arrayElement.ArrayValue.name,
  arrayElement.ArrayValue.value
FROM [iothub-input] as iothubAlias  
CROSS APPLY GetArrayElements(iothubAlias.data) AS arrayElement  
你会得到你想要的结果。