【问题标题】:Azure Stream Analytics Pivoting Rows To ColumnsAzure 流分析将行转换为列
【发布时间】:2018-03-22 09:41:50
【问题描述】:

我有一个类似的数据;

        [
        {"deviceid":"d1","parameter"="p1" value="1" timestamp="2018-03-22T12:33:00"},
        {"deviceid":"d1","parameter"="p2" value="2" timestamp="2018-03-22T12:34:00"},
        {"deviceid":"d1","parameter"="p2" value="3" timestamp="2018-03-22T12:35:00"},
        {"deviceid":"d2","parameter"="p1" value="4" timestamp="2018-03-22T12:36:00"},
        {"deviceid":"d2","parameter"="p2" value="5" timestamp="2018-03-22T12:37:00"},
        {"deviceid":"d2","parameter"="p2" value="6" timestamp="2018-03-22T12:38:00"},
        {"deviceid":"d2","parameter"="p1" value="7" timestamp="2018-03-22T12:43:00"},
        {"deviceid":"d2","parameter"="p1" value="8" timestamp="2018-03-22T12:44:00"},
        {"deviceid":"d2","parameter"="p2" value="9" timestamp="2018-03-22T12:45:00"},
        {"deviceid":"d1","parameter"="p1" value="10" timestamp="2018-03-22T12:46:00"},
        {"deviceid":"d1","parameter"="p1" value="11" timestamp="2018-03-22T12:47:00"},
        {"deviceid":"d1","parameter"="p2" value="12" timestamp="2018-03-22T12:49:00"}
        ]

我想旋转该参数值(每 10 分钟窗口)并显示每个设备 ID 的每个参数的最后接收值,就像这样 edit*(参数将是动态的,而不仅仅是 p1 和 p2);

------------------------------------------------------------
| deviceid|     windowtime       |     p1    |     p2      |
------------------------------------------------------------
| d1      | 2018-03-22 12:40     |     1     |      3      |
------------------------------------------------------------
| d2      | 2018-03-22 12:40     |     4     |      6      | 
------------------------------------------------------------
| d2      | 2018-03-22 12:50     |     8     |      9      |
------------------------------------------------------------
| d1      | 2018-03-22 12:50     |     11    |     12      |
------------------------------------------------------------

谢谢。

【问题讨论】:

    标签: azure-stream-analytics stream-analytics


    【解决方案1】:

    另一种更清晰的方法是使用 UDA:

    SELECT
        deviceid, system.Timestamp as windowtime, uda.P1UDA(test) AS P1, uda.P2UDA(test) AS P2   
    FROM
        test TIMESTAMP BY timestamp
    GROUP BY
        deviceid,
        TumblingWindow(minute, 10)
    

    JavaScript UDA:

    function P1UDA() {
        this.init = function () 
    {
            this.state = 0;
        }
    
        this.accumulate = function (value, timestamp) {
    
            if (value.parameter == 'p1') {
                if (value.value > this.state) {
                    this.state = value.value;
                }
            }
        }
    
        this.computeResult = function () {
            return this.state;
        }
    }
    
    function P2UDA() {
        this.init = function () {
            this.state = 0;
        }
    
        this.accumulate = function (value, timestamp) {
    
            if (value.parameter == 'p2') {
                if (value.value > this.state) {
                    this.state = value.value;
                }
            }
        }
    
        this.computeResult = function () {
            return this.state;
        }
    }
    

    【讨论】:

    • 首先谢谢。对不起,我忘了提。参数将是动态的,而不仅仅是 p1 和 p2。我想要每个窗口中参数和设备 ID 的最新记录(最大时间戳不是值)
    • 此功能尚未作为标准 ASA 查询语言的一部分提供,但可以创建用户定义函数来执行此操作。更多信息请点击此处:docs.microsoft.com/en-us/azure/stream-analytics/…
    【解决方案2】:

    你可以试试下面的脚本:

    with tempone as (SELECT
        deviceid, system.Timestamp as windowtime, max(value) AS P1      
    FROM
        test TIMESTAMP BY timestamp
    where parameter = 'p1'
    GROUP BY
        deviceid,
        TumblingWindow(minute, 10)),
    
    temptwo AS ( SELECT
        deviceid, system.Timestamp as windowtime, max(value) AS P2      
    FROM
        test TIMESTAMP BY timestamp
    where parameter = 'p2'
    GROUP BY
        deviceid,
        TumblingWindow(minute, 10))
    
    select tempone.deviceid, tempone.windowtime, tempone.P1, temptwo.P2 from tempone
    join temptwo on tempone.deviceid = temptwo.deviceid
    and DATEDIFF(minute,tempone, temptwo) BETWEEN 0 AND 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多