从来自Azure Stream Analytics的查询语言中的属性值中指定列和行

时间:2019-07-18 20:15:00

标签: azure azure-stream-analytics

希望我正确地描述了这一点: 是否可以仅从属性值创建列和行? 在我当前的代码中,列是属性名称,行是值。 Current Output Preferred Output

JSON消息: {   deviceName:“ FillerDevice”,   时间戳:“ 2019-07-17T16:42:10Z”,   标签:[     {        do4:1     },     {     do5:0     }   ] }

1 个答案:

答案 0 :(得分:0)

以下方法为数组中每个定义的属性键创建列。

您可以使用用户定义的函数来做到这一点,前提是您事先知道要查找的键:

ASA查询

select
    Input.deviceName,
    Input.timestamp,
    UDF.ExtractData(Input.tags, 'do4') as do4,
    UDF.ExtractData(Input.tags, 'do5') as do5
into Output
from Input

UDF

function ExtractData(array, key) {
    'use strict';

    var value = null;

    if (array != null
        && key != null
        && Array.isArray(array)
        && isString(key)) {

        // find all objects indexes of objects in the array with the key
        var indexes = [], i;
        for (i = 0; i < array.length; i++) {
            if (array[i].hasOwnProperty(key)) {
                indexes.push(i);
            }  
        }

        if (indexes.length > 0) {
            // in case it occurs multiple times take the first one
            // you could also implement other conditions here
            var indexToUse = indexes[0];

            // set return value
            value = array[indexToUse][key];
        } 
    }

    return value;
}


function isString(value) {
    return typeof value === 'string' || value instanceof String;
}