• 上传 UDF jar 包
  • 修改 UDF jar 包信息
  • 删除 UDF jar 包
  • 获取 UDF jar 包列表
  • UDF 函数注册
  • UDF 函数注册删除
  • UDF 函数查询
  • UDF调试
  • UDF 内置函数展示

    上传 UDF jar 包

    请求语法

    1. POST /v2/udf/jars/<JarName>
    2. Content-Type: application/java-archive
    3. Content-MD5: <ContentMD5>
    4. Authorization: Pandora <auth>

    请求内容

    参数 类型 必填 说明
    JarName string jar包名称唯一标识一个jar文件,命名规则: ^[a-zA-Z][a-zA-Z0-9_\\.]{0,127}[a-zA-Z0-9_]$,1-128个字符,支持小写字母、数字、下划线;必须以大小写字母开头
    Content-MD5 string jar包的MD5码

    UDF Jar包说明:

    • 上传的UDF Jar包最大为100MB。

    • Content-MD5头部是可选的。如果上传UDF Jar包的时候带上该头部服务器会校验上传数据的校验和,如果两者不一致服务器将拒绝上传。如果不带该头部,服务器不做任何校验和的检查。

    • 先计算UDF Jar内容的MD5,再对MD5做一次base64编码转化为字符串。例如qiniu这个字符串的Content-MD5是gLL29S04bTCxYd2kCqsEIQ==而不是7b9d6b4d89f6825a196d4cc50fdbedc5

    响应报文

    1. 200 OK

    示例

    1. curl -X POST https://pipeline.qiniu.com/v2/udf/jars/UdfAggCollection \
    2. -H 'Content-Type: application/java-archive' \
    3. -H 'Authorization: Pandora 111e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \
    4. -T /path/to/udf-agg-1.0-SNAPSHOT.jar

    修改 UDF jar 包信息

    请求语法

    1. PUT /v2/udf/jars/<JarName>
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>
    4. {
    5. "description": "<UDF 描述信息>"
    6. }

    请求内容

    参数 类型 必填 说明
    JarName string jar包名称唯一标识一个jar文件,命名规则: ^[a-zA-Z][a-zA-Z0-9_\\.]{0,127}[a-zA-Z0-9_]$,1-128个字符,支持小写字母、数字、下划线;必须以大小写字母开头
    description string 对于jar包的一些描述信息

    响应报文

    1. 200 OK

    删除 UDF jar 包

    请求语法

    1. DELETE /v2/udf/jars/<JarName>
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>

    请求内容

    参数 类型 必填 说明
    jarName string jar包名称, 如UdfAggCollection

    示例

    1. curl -X DELETE https://pipeline.qiniu.com/v2/jars/UdfAggCollection \
    2. -H 'Content-Type: application/json' \
    3. -H 'Authorization: Pandora 111e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y='

    响应报文

    1. 200 OK
    2. Content-Type: application/json

    or

    1. 404 NotFound
    2. Content-Type: application/json
    3. {
    4. "error":"jar file does not exist"
    5. }

    获取 UDF jar 包列表

    请求语法

    1. GET /v2/udf/jars?from=1&size=2&sort=uploadTime
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>

    请求内容

    参数 类型 必填 说明
    from int 分页条件,从第几条开始展示,不填则返回全部
    size int 分页条件,返回多少条展示,不填则返回全部
    sort string 排序字段,格式如列名:排序顺序,如sort=uploadTime:desc, sort=uploadTime:asc,如果不填排序顺序,如sort=uploadTime,则默认顺序排列

    响应内容

    参数 类型 必填 说明
    jarName string jar包名称
    description string jar包描述
    uploadTime string jar包上传时间

    示例

    1. curl -X GET https://pipeline.qiniu.com/v2/udf/jars?from=1&size=2&sort=uploadTime \
    2. -H 'Content-Type: application/json' \
    3. -H 'Authorization: Pandora 111e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y='

    响应报文

    1. 200 OK
    2. Content-Type: application/json
    3. {
    4. "result": [
    5. {
    6. "jarName": "UdfAggCollection",
    7. "description":"聚合类UDF集合",
    8. "uploadTime": "2017-06-01 15:00:00"
    9. },
    10. {
    11. "jarName": "UdfSortCollection",
    12. "description":"排序类UDF集合",
    13. "uploadTime": "2017-06-01 14:00:00"
    14. }
    15. ]
    16. }

    UDF 函数注册

    请求语法

    1. POST /v2/udf/funcs/<FuncName>
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>
    4. {
    5. "jarName": "<Jar Name>",
    6. "className": "<Full path class name>",
    7. "funcDeclaration" : "<Function Definition>",
    8. "description": "<UDF description>"
    9. }

    请求内容

    参数 类型 必填 说明
    funcName string udf的自定义函数名称(主键),如sum,avg。【注意】函数名大小写不敏感,将统一转成小写注册
    className string 自定义udf的全路径名称com.company.biz.udf.SUM
    jarName string udf包名称,从中解析出UDF类
    funcDeclaration string 函数定义式,用来简要表达函数的输入输出,double add(double m, double n)
    description string 自定义的函数描述

    示例

    1. curl -X POST https://pipeline.qiniu.com/v2/udf/funcs/str_len \
    2. -H 'Content-Type: application/json' \
    3. -H 'Authorization: Pandora 111e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \
    4. -d '{
    5. "jarName":"UdfCollection",
    6. "className": "com.qiniu.udf.StrLength",
    7. "funcDeclaration" : "int str_len(string s)",
    8. "description": "计算字符串长度,参数s代表输入字符串,返回值为字符串长度。\n 比如 str_len("abc") 返回值为 3 "
    9. }'

    响应报文

    1. 200 OK
    2. Content-Type: application/json

    or

    1. 409 Conflict
    2. Content-Type: application/json
    3. {
    4. "error":"funcName already exists"
    5. }

    UDF 函数注册删除

    请求语法

    1. DELETE /v2/udf/funcs/<FuncName>
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>

    请求内容

    参数 类型 必填 说明
    funcNames array udf的自定义函数名称(主键)数组,如sum,avg,批量删除

    示例

    1. curl -X DELETE https://pipeline.qiniu.com/v2/udf/funcs/str_len \
    2. -H 'Content-Type: application/json' \
    3. -H 'Authorization: Pandora 111e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \

    响应报文

    1. 200 OK
    2. Content-Type: application/json

    UDF 函数查询

    请求语法

    1. GET /v2/udf/funcs?from=1&size=2&sort=uploadTime:desc&jarName=a,b,c&funcName=a,b,c
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>

    请求内容

    参数 类型 必填 说明
    from int 分页条件,从第几条开始展示,不填则返回全部
    size int 分页条件,返回多少条展示,不填则返回全部
    sort string 排序字段,格式如列名:排序顺序,如sort=jarName:desc, sort=jarName:asc,如果不填排序顺序,如sort=jarName,则默认顺序排列
    jarName string 选择指定jar包对应的注册函数,jarName=a,b,c,逗号分隔字符串,代表查询a,b,c三个jar包的所有注册函数
    funcName string 选择指定函数名的注册函数,funcName=a,b,c,逗号分隔字符串,代表查询a,b,c三个函数名对应的注册函数信息

    响应报文

    1. 200 OK
    2. Content-Type: application/json
    3. {
    4. result:[
    5. {
    6. "jarName": "UdfCollection",
    7. "funcName": "str_len",
    8. "className": "com.qiniu.udf.StrLength",
    9. "funcDeclaration" : "int str_len(string s)",
    10. "description": "计算字符串长度,参数s代表输入字符串,返回值为字符串长度。\n 比如 str_len("abc") 返回值为 3 "
    11. }
    12. ]
    13. }

    响应内容

    参数 类型 必填 说明
    funcName string udf的自定义函数名称(主键),如sum,avg
    jarName string udf包名称
    className string 自定义udf的全路径名称,com.company.biz.udf.SUM
    funcDeclaration string 函数定义式,用来简要表达函数的输入输出,如 double add(double m, double n)
    description string 自定义的函数描述

    UDF调试

    请求语法

    1. POST /v2/udf/debug
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>
    4. {
    5. "udfExpression": "<UDF debug expression>"
    6. }

    请求内容

    参数 类型 必填 说明
    udfExpression string 要调试的UDF的表达式,来验证udf的输出是否符合预期,如str_lenth(“debug_udf”)

    说明
    目前仅支持UDF调试,暂不支持UDAF,UDTF调试

    示例

    1. curl -X POST https://pipeline.qiniu.com/v2/udf/debug \
    2. -H 'Content-Type: application/json' \
    3. -H 'Authorization: Pandora 111e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \
    4. -d '{
    5. "udfExpression": "select str_len("abcd") as a1, ucase("ab") as a2"
    6. }'

    响应报文

    1. 200 OK
    2. Content-Type: application/json
    3. {
    4. result:[
    5. {"a1":"4", "a2": "AB"}
    6. ]
    7. }

    or

    1. 400 BadRequest
    2. Content-Type: application/json
    3. {
    4. "error":"invalid udf debug expression"
    5. }

    说明

    UDF调试调试表达式必须符合 select udf1(param...) as column2, udf2(param...) as column2 格式

    UDF 内置函数展示

    请求语法

    1. GET /v2/udf/builtins?from=1&size=2&sort=funcName:desc
    2. Content-Type: application/json
    3. Authorization: Pandora <auth>

    请求内容

    参数 类型 必填 说明
    from int 分页条件,从第几条开始展示,不填则返回全部
    size int 分页条件,返回多少条展示,不填则返回全部
    sort string 排序字段,格式如列名:排序顺序,如sort=funcName:desc, sort=funcName:asc,如果不填排序顺序,如sort=funcName,则默认顺序排列
    category string 选择指定类别对应的内置函数,category=窗口函数,代表查询所有窗口函数

    响应内容

    参数 类型 必填 说明
    funcName string udf的内置函数名称(主键),如sum, avg
    description string 内置的函数描述
    category string 函数分类,如日期函数,数学函数等。默认支持:match(数学函数),collection(集合函数),type_conversion(类型转换函数),date(日期函数),condition(条件函数), string(字符串函数),udaf(聚合函数),udtf(表格函数)

    示例

    1. curl -X GET https://pipeline.qiniu.com/v2/udf/builtins?from=1&size=2&sort=funcName:desc \
    2. -H 'Content-Type: application/json' \
    3. -H 'Authorization: Pandora 111e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \

    响应报文

    1. 200 OK
    2. Content-Type: application/json
    3. [
    4. {
    5. "funcName": "abs",
    6. "funcDeclaration" : "double cos(double a) \n bigint cos(bigint a)",
    7. "description": "绝对值计算",
    8. "category": "math"
    9. },
    10. {
    11. "funcName":"cos",
    12. "funcDeclaration" : "double cos(double a)",
    13. "description": "余弦值计算",
    14. "category": "math"
    15. }
    16. ...
    17. ]