Azure流分析将行转移到列

时间:2018-03-22 09:41:51

标签: azure-stream-analytics stream-analytics

我有像;

这样的数据
        [
        {"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分钟窗口)并显示每个deviceid的每个参数的最后收到的值,并且像这样编辑*(参数将是动态的,而不仅仅是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      |
------------------------------------------------------------

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下脚本:

integration

答案 1 :(得分:0)

另一种更明确的方法是使用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;
    }
}