如何在Azure Stream Analytics中执行条件测试
我已经挣扎了两天了。。。但是,不断碰壁,Azure Stream Analytics不支持变量 我想获取一个有效负载值,提取一个特定字节,然后输出它 这很简单:如何在Azure Stream Analytics中执行条件测试,azure,azure-stream-analytics,Azure,Azure Stream Analytics,我已经挣扎了两天了。。。但是,不断碰壁,Azure Stream Analytics不支持变量 我想获取一个有效负载值,提取一个特定字节,然后输出它 这很简单: SELECT device AS Device, dateadd(S, time, '1970-01-01') AS Time, data AS Payload, SUBSTRING (data, 3, 1) AS Counter, SUBSTRING (data, 6, 1) AS Sensor
SELECT
device AS Device,
dateadd(S, time, '1970-01-01') AS Time,
data AS Payload,
SUBSTRING (data, 3, 1) AS Counter,
SUBSTRING (data, 6, 1) AS Sensor1Type,
SUBSTRING (data, 8, 1) AS Sensor1State =
…等等
这将在输出blob中返回有效负载值、计数器等,如下所示
{"device":"F8A96","time":"2018-03-27T09:04:35.0000000Z","payload":"01b00200000002000000","counter":"b","sensor1type":"2","sensor1state":"0","sensor2type":"2","sensor2state":"0"}
现在我想将“传感器1状态”改为“打开”或“关闭”,而不是1或0
我试过使用CASE、with等,但无法正确使用,因为我使用的是表达式(子字符串)的输出,而不是列
例如,我试过:
SELECT
....
SUBSTRING (data, 8, 1) AS Sensor1State =
CASE
WHEN SUBSTRING (data, 8, 1) = 1 THEN 'Closed' ELSE 'Open'
END,
...
但它给了我一个语法错误
有什么想法吗?流分析不支持变量,所以我不能使用它。我是个大笨蛋,所以不知道怎么耍花招
更新:
经过一段时间的黑客攻击,解决了我自己的问题,工作查询:
SELECT
device AS Device,
dateadd(S, time, '1970-01-01') AS Time,
data AS Payload,
SUBSTRING (data, 3, 1) AS Counter,
SUBSTRING (data, 6, 1) AS Sensor1Type,
SUBSTRING (data, 14, 1) AS Sensor2Type,
CASE SUBSTRING (data, 8, 1)
WHEN '1' THEN 'Closed'
ELSE 'Open'
END as Sensor1State,
CASE SUBSTRING (data, 16, 1)
WHEN '1' THEN 'Closed'
ELSE 'Open'
END as Sensor2State
INTO
iotoutput
FROM
iotinputs
WHERE
Device = 'F8A96'
注意:我没有在任何地方看到它的文档,但是StreamAnalytics代码解析器中似乎有一个bug,如果您的“INTO”语句不是直接在SELECT之后,在FROM之前,它会给出一个非常没有帮助的语法错误 您可以为这个转换逻辑定义一个java脚本UDF,然后在asa脚本中引用它
function get_status(time)
{
var res = time.substring(8, 1);
if(res == "1") return "Closed";
else if(res == "0") return "Open";
else return "Unknown";
}
你能发布完整的usql脚本和语法错误详细信息吗?哇哦,在添加代码和解释错误的同时,我发现我做错了什么。SQL被粘贴到原始帖子的底部