我在从Azure IOT Hub到Azure Stream Analytics (ASA)再到Power BI的事件中提取数据时遇到问题。
以下是进入Azure IOT集线器的提要的示例:
"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发布于 2017-12-13 03:07:00
由于数据是一个数组而不是复杂类型,因此SELECT data.Temperate将不起作用。
您需要向我们介绍GetArrayElement方法,参见the docs。由于该数组包含复杂类型,因此需要使用GetRecordPropertyValue来获取Temperature属性的值:
SELECT GetRecordPropertyValue(GetArrayElement(data, 0), 'Temperature') AS Temperature
INTO PowerBI
FROM PhotonEventData编辑:正如另一个答案所指出的,您的数据属性包含一个字符串数组,而不是一个json对象数组。如果您可以修复它,使其正确表示如下所示的对象,则可以使用我的解决方案:
{
"data": [{ "Temperature":74.15750885, "Humidity":26.32574463}],
"device_id": "1e0037000d47353136383631",
"event": "Photon_WeatherData",
"published_at": "2017-12-12T16:52:18.405Z"
}发布于 2017-12-13 10:12:46
"data“字段似乎被格式化为字符串,而不是JSON对象。您可能希望使用JSON UDF函数将其解析为JavaScript。为此,您可以在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如果你有任何进一步的问题,请告诉我。
https://stackoverflow.com/questions/47778016
复制相似问题