# 定制函数 eKuiper 可以定制函数,函数的开发、编译及使用请[参见这里](../extension/native/develop/function.md)。 ## echo 插件 | 函数 | 示例 | 说明 | |------|-----------|---------| | echo | echo(avg) | 原样输出参数值 | echo(avg) 示例 - 假设 avg 类型为 int ,值为30, 则结果为: `[{"r1":30}]` ``` SELECT echo(avg) as r1 FROM test; ``` ## countPlusOne 插件 | 函数 | 示例 | 说明 | |--------------|-------------------|------------| | countPlusOne | countPlusOne(avg) | 输出参数长度加一的值 | countPlusOne(avg) 示例 - 假设 avg 类型为 []int ,值为`[1,2,3]`, 则结果为: `[{"r1":4}]` ``` SELECT countPlusOne(avg) as r1 FROM test; ``` ## accumulateWordCount 插件 | 函数 | 示例 | 说明 | |---------------------|------------------------------|--------------| | accumulateWordCount | accumulateWordCount(avg,sep) | 函数统计一共有多少个单词 | accumulateWordCount(avg,sep) 示例 - 假设 avg 类型为 string ,值为`My name is Bob`;sep 类型为 string ,值为空格,则结果为: `[{"r1":4}]` ``` SELECT accumulateWordCount(avg,sep) as r1 FROM test; ``` ## 图像处理插件 图像处理目前暂时只支持`png`和`jpeg`格式 | 函数 | 示例 | 说明 | |-----------|-------------------------------------|---------------------------------------------------------------------------------------------------| | resize | resize(avg, width, height, [isRaw]) | 创建具有新尺寸(宽度,高度)的缩放图像。如果 width 或 height 设置为0,则将其设置为长宽比保留值。isRaw 为可选参数,用于指定是否输出原始未编码数据,常用于 AI 模型推理中。 | | thumbnail | thumbnail(avg,maxWidth, maxHeight) | 将保留宽高比的图像缩小到最大尺寸( maxWidth,maxHeight)。 | resize(avg,width, height)示例 - 其中 avg 类型为 []byte 。 ``` SELECT resize(avg,width,height) as r1 FROM test; ``` thumbnail(avg,maxWidth, maxHeight)示例 - 其中 avg 类型为 []byte。 ``` SELECT countPlusOne(avg,maxWidth, maxHeight) as r1 FROM test; ``` ### Geohash 插件 | 函数 | 示例 | 说明 | |-----------------------|----------------------------------------------------------|---------------------------------------------------------------------------------------| | geohashEncode | geohashEncode(la,lo float64)(string) | 将经纬度编码为字符串 | | geohashEncodeInt | geohashEncodeInt(la,lo float64)(uint64) | 将经纬度编码为无类型整数 | | geohashDecode | geohashDecode(hash string)(la,lo float64) | 将字符串解码为经纬度 | | geohashDecodeInt | geohashDecodeInt(hash uint64)(la,lo float64) | 将无类型整数解码为经纬度 | | geohashBoundingBox | geohashBoundingBox(hash string)(string) | 返回字符串编码的区域 | | geohashBoundingBoxInt | geohashBoundingBoxInt(hash uint64)(string) | 返回无类型整数编码的区域 | | geohashNeighbor | geohashNeighbor(hash string,direction string)(string) | 返回一个字符串对应方向上的邻居(方向列表:North NorthEast East SouthEast South SouthWest West NorthWest) | | geohashNeighborInt | geohashNeighborInt(hash uint64,direction string)(uint64) | 返回一个无类型整数对应方向上的邻居(方向列表:North NorthEast East SouthEast South SouthWest West NorthWest) | | geohashNeighbors | geohashNeighbors(hash string)([]string) | 返回一个字符串的所有邻居 | | geohashNeighborsInt | geohashNeighborsInt(hash uint64)([]uint64) | 返回一个无类型整数的所有邻居 | geohashEncode 示例 - 输入:`{"lo" :131.036192,"la":-25.345457}` - 输出:`{"geohashEncode":"qgmpvf18h86e"}` ```sql SELECT geohashEncode(la,lo) FROM test ``` geohashEncodeInt 示例 - 输入:`{"lo" :131.036192,"la":-25.345457}` - 输出:`{"geohashEncodeInt":12963433097944239317}` ```sql SELECT geohashEncodeInt(la,lo) FROM test ``` geohashDecode 示例 - 输入:`{"hash" :"qgmpvf18h86e"} ` - 输出:`{"geohashDecode":{"Longitude":131.036192,"Latitude":-25.345457099999997}}` ```sql SELECT geohashDecode(hash) FROM test ``` geohashDecodeInt 示例 - 输入:`{"hash" :12963433097944239317}` - 输出:`{"geohashDecodeInt":{"Longitude":131.03618861,"Latitude":-25.345456300000002}}` ```sql SELECT geohashDecodeInt(hash) FROM test ``` geohashBoundingBox 示例 - 输入:`{"hash" :"qgmpvf18h86e"} ` - 输出:`{"geohashBoundingBox":{"MinLat":-25.345457140356302,"MaxLat":-25.34545697271824,"MinLng":131.03619195520878,"MaxLng":131.0361922904849}}` ```sql SELECT geohashBoundingBox(hash) FROM test ``` geohashBoundingBoxInt 示例 - 输入:`{"hash" :12963433097944239317}` - 输出:`{"geohashBoundingBoxInt":{"MinLat":-25.345456302165985,"MaxLat":-25.34545626025647,"MinLng":131.0361886024475,"MaxLng":131.03618868626654}}` ```sql SELECT geohashBoundingBoxInt(hash) FROM test ``` geohashNeighbor 示例 - 输入:`{"hash" :"qgmpvf18h86e","direction":"North"} ` - 输出:`{"geohashNeighbor":"qgmpvf18h86s"}` ```sql SELECT geohashNeighbor(hash,direction) FROM test ``` geohashNeighborInt 示例 - 输入:`{"hash" :12963433097944239317,"direction":"North"}` - 输出:`{"geohashNeighborInt":12963433097944240129}` ```sql SELECT geohashNeighborInt(hash,direction) FROM test ``` geohashNeighbors 示例 - 输入:`{"hash" :12963433097944239317}` - 输出:`{"geohashNeighbors":["qgmpvf18h86s","qgmpvf18h86u","qgmpvf18h86g","qgmpvf18h86f","qgmpvf18h86d","qgmpvf18h866","qgmpvf18h867","qgmpvf18h86k"]}` ```sql SELECT geohashNeighbors(hash) FROM test ``` geohashNeighborsInt 示例 - 输入: `{"hash" :"qgmpvf18h86e","neber":"North"}` - 输出:`{"geohashNeighborsInt":[12963433097944240129,12963433097944240131,12963433097944240130,12963433097944237399,12963433097944237397,12963433097944150015,12963433097944152746,12963433097944152747]}` ```sql SELECT geohashNeighborsInt(hash) FROM test ``` ### LabelImage plugin 该插件(只能用在有 slim 后缀的 docker image 中)为展示使用 TensorFlowLite 模型的示例插件。此函数接收一个以 bytea 类型表示的图像的输入,输出该图像的根据 tflite 模型计算的标示。 如下 SQL 中,假设输入为 peacock.jpg 文件的二进制流,则输出为字符串 “peacock”。 ```sql SELECT labelImage(self) FROM tfdemo ``` ### tfLite 插件 该插件(只能用在有 slim 后缀的 docker image 中)用于执行 TensorFlow Lite 推理。用户只需上传 `.tflite` 模型,在 sql 中调用 `tfLite(model_name, input_data)` 函数,即可收到模型推理的结果。 上传模型时请使用 [uploads](../api/restapi/uploads.md) 接口将模型文件上传即可。 函数调用时 `model_name` 参数为不带 `.tflite` 后缀的模型名称。 `input_data` 应该是消息中的 key 字段,对应的值应该是一维数组格式 ```sql SELECT tfLite(model_name, input_data) FROM tfdemo ```