规则引擎Rule Engine

    SQL手册

    SQL语法主要基于SQL92标准。完整的SQL语法文档,请参考:SQL Reference

    下面介绍的是天工流式计算额外增加的函数。

    字符串函数

    String key_value(String str, String delimiter1, String delimiter2, String key)

    该函数对输入字符串字段(str)进行两次切分(split),第一次使用delimiter1切分,第二次以delimiter2切分,最后通过key查找切分出来的值,返回字符串类型。

    举例,假如用户的消息为:

    {
        "ts": 1525677150,
        "data": "userid=123456 product=baiduiot"
    }

    需要抽取data字段中product字段后面的值,即baiduiot,SQL语句示例如下:

    SELECT key_value(data, ' ', '=', 'product') AS product FROM...

    String json_value(String str, String path)

    该函数通过一个JSON路径,来提取字符串字段值本身为JSON格式的内部数据。str为一个STRING类型,但其符合JSON格式,path为一个完整的JSON路径。支持定位数组。

    举例1,假如用户的消息为:

    {
        "ts": 1525677150,
        "data": "{\"userid\": \"123456\", \"product\":\"baiduiot\"}"
    }

    需要抽取data字段中product对应的值,即baiduiot,SQL语句示例如下:

    SELECT json_value(data, 'product') AS product FROM...

    举例2,假如用户的消息为:

    {
        "ts": 1525677150,
        "data": "{\"info\":{\"arr\":[{\"name\":\"Sensor01\"},{\"name\":\"Sensor02\"}]}}"
    }

    需要抽取data字段中info.arr数组中第一个元素的name属性,即Sensor01,SQL语句示例如下:

    SELECT json_value(data, 'info.arr[0].name') AS sensorname FROM...

    聚合函数

    Long count_distinct(Object col)

    该函数统计某个字段其独立值出现的次数,例如统计活跃设备数,统计UV。输入参数col可以为任何类型(SQL_TIMESTAMP除外),内部统一转化成String处理。

    举例,假如用户的消息为:

    {
        "ts": 1525677150,
        "deviceid": "device001"
    }

    需要统计独立deviceid数目,SQL语句示例如下:

    SELECT count_distinct(deviceid) AS cnt FROM mysource GROUP BY Tumble(rowtime, INTERVAL '1' MINUTE)

    String last_value_str(field)

    返回一个窗口中某个字段的最后一个值,返回值类型为String。field的type可能取值:LONG, DOUBLE, STRING。其他类型需要使用该函数,需先CAST成STRING。比如SQL_TIMESTAMP类型的字段,需要使用该函数,可以:SELECT last_value_str(CAST(ts AS VARCHAR(13)))

    举例,在两个元素的OVER窗口中,获取最后一个元素的温度值:

    SELECT last_value_str(temperature) OVER (partition by deviceid order by rowtime rows between 1 preceding and current row) AS last_temperature FROM mysource

    String first_value_str(field)

    返回一个窗口中某个字段的第一个值,返回值类型为String。Field的type可能取值:LONG, DOUBLE, STRING。其他类型需要使用该函数,需先CAST成STRING。

    举例,在两个元素的OVER窗口中,获取第一个元素的时间戳值:

    SELECT first_value_str(CAST(rowtime AS VARCHAR(13))) OVER (partition by deviceid order by rowtime rows between 1 preceding and current row) AS first_ts FROM mysource

    地理函数

    double st_distance(double lat1, double lon1, double lat2, double lon2)

    计算两个经纬度坐标的球面距离。lat1, lon1分别为第一个点的纬度和经度; lat2, lon2分别为第二个点的纬度和经度。

    任务参数引用函数

    double jjpd(String jsonPath[, double default])

    jjpd(Json Job Parameter for Double)用来获取任务参数中的某个double参数。jsonPath为指向任务参数JSON某个double类型对象的路径,例如”mean.feature01”。default是可选参数,当指定的jsonPath不存在,或者所指向的对象不是double类型,则返回default。当default参数缺省时,想当于default=0.0。举例:

    如果任务参数为:

    {
        "mean": {
            "feature01": 3.456,
            "avg":[1.2, 3.4, 5.6]
        }
    }

    SELECT jjpd('mean.feature01', 12.34), jjpd('mean.avg[0]'), jjpd('non-exist-key', 10.0), jjpd('non-exist-key2')

    分别返回3.456, 1.2, 10.0和0.0。

    long jjpl(String jsonPath[, long default])

    jjpl(Json Job Parameter for Long)用来获取任务参数中的某个long参数。其参数类似函数jjpd。

    String jjps(String jsonPath[, String default])

    jjps(Json Job Parameter for String)用来获取任务参数中的某个String参数。缺省默认值为空字符串(“”)。其参数类似函数jjpd。

    机器学习函数

    double minmaxscaler(double input, double min, double max)

    将输入参数input,根据min和max,归一化到[0.0,1.0]之间。如果input < min,返回0.0;如果input > max,返回1.0。

    上一篇
    SQL示例
    下一篇
    常见问题及解答(FAQ)