我在从Azure IOT Hub到Azure流分析(ASA)到Power BI的事件中提取数据时遇到问题。
以下是进入Azure IOT中心的Feed的示例:
"data": "[{\"Temperature\":74.15750885,\"Humidity\":26.32574463}]",
"device_id": "1e0037000d47353136383631",
"event": "Photon_WeatherData",
"published_at": "2017-12-12T16:52:18.405Z"
我可以通过ASA通过直接查询将其推送到Power BI:
SELECT *
INTO PowerBI
FROM PhotonEventData
结果如下: Screenshot of PBI Dataset
[{"Temperature":73.81002045,"Humidity":26.56988525}]
但我似乎无法剥离ASA中的数据点,以便我可以将每个键/值对传递给Power BI。我尝试了一些不同的东西,例如:
SELECT data.Temperature
INTO PowerBI
FROM PhotonEventData
答案 0 :(得分:0)
由于数据是一个数组,而不是一个复杂的类型Class
将不起作用。
您需要使用SELECT data.Temperate
方法,请参阅the docs。由于数组包含复杂类型,因此需要GetRecordPropertyValue来获取GetArrayElement
属性的值:
Temperature
编辑:正如另一个答案所指出的,您的数据属性包含一个字符串数组而不是一个json对象数组。如果您可以解决这个问题,那么它可以正确代表下面的对象,您可以使用我的解决方案:
SELECT GetRecordPropertyValue(GetArrayElement(data, 0), 'Temperature') AS Temperature
INTO PowerBI
FROM PhotonEventData
答案 1 :(得分:0)
似乎"数据"字段被格式化为字符串而不是JSON对象。您可能希望使用JavaScript UDF函数将其解析为JSON。 为此,您可以在Azure Stream Analytics中创建此功能:
function main(input, key) {
// return key
var myinput = String(input)
myinput = myinput.substring(1, myinput.length - 1);
values = JSON.parse(myinput);
return values[key]
}
然后您的查询将是:
select udf.extract(data,'Temperature') as temp, udf.extract(data,'Humidity') as hmdt from PhotonEventData
如果您有任何进一步的问题,请与我们联系。