Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Azure Stream Analytics中执行条件测试_Azure_Azure Stream Analytics - Fatal编程技术网

如何在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

我已经挣扎了两天了。。。但是,不断碰壁,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 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被粘贴到原始帖子的底部