UDF全称User Defined Function,即用户自己定义函数。ODPS提供了非常多内建函数来满足用户的计算需求,同一时候用户还能够通过创建自己定义函数来满足 不同的计算需求。

UDF种类:

UDF 分类 描写叙述
User Defined Scalar Function。通常也称之为UDF 用户自己定义标量值函数(User Defined Scalar Function)通常也称之为UDF。其输入与输出是一对一的关系,即读入一行数据,写出一条输出值。
UDTF(User Defined Table Valued Function) 自己定义表值函数。是用来解决一次函数调用输出多行数据场景的。也是唯一能返回多个字段的自己定义函数。而UDF仅仅能一次计算输出一条返回值。
UDAF(User Defined Aggregation Function) 自己定义聚合函数。其输入与输出是多对一的关系, 即将多条输入记录聚合成一条输出值。能够与 SQL中的Group By语句联用。

详细语法请參考 聚合函数 。

  • UDF广义的说法代表了自己定义标量函数,自己定义聚合函数及自己定义表函数三种类型的自己定义函数的集合。

    狭义来说,仅代表用户自己定义标量函数。 文档会常常使用这一名词。请读者依据文档上下文推断详细含义。

UDF參数与返回值类型:

UDF支持ODPS SQL的数据类型有:bigint, string, double, boolean以及datetime类型。ODPS数据类型与Java类型的相应关系例如以下:

ODPS SQL Type Bigint String Double Boolean Datetime
Java Type Long String Double Boolean Date
  • SQL中的NULL值通过Java中的NULL引用表示,因此Java primitive type是不同意使用的,由于无法表示SQL中的NULL值。

UDF应用实例:URL解码

比如在搜索查询中一般会对URL进行URL编码(Encode)。比方“阿里云”在URL中被编码成“%e9%98%bf%e9%87%8c%e4%ba%91”。我们如今就能够写一个简答的UDF进行解码操作。

1、代码实现

Java UDF必须继承com.aliyun.odps.udf.UDF类。

package com.aliyun.odps.udf;

import com.aliyun.odps.udf.UDF;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
public class URLDecode extends UDF { public String evaluate(String url) throws UnsupportedEncodingException{
if(url.isEmpty() || url==null){
return "";
}
return URLDecoder.decode(url, "UTF-8");
} }

1)自己定义类必须实现evaluate方法。该方法依据输入输出类型仅仅支持四种:String、Long、Double、Boolean,注意是对象,不是基本数据类型,他们相应ODPS的String、Bigint、Double、Boolean四种数据类型。

2)參数个数能够子定义,系统能够自己主动识别。

2、资源上传

将上述代码生成JAR文件,然后使用ODPSclient上传到ODPS资源中:

加入资源详细操作见:https://docs.aliyun.com/?spm=5176.383718.4.6.Crqixn#/pub/odps/basic/common_command&resources

3、创建函数

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

ODPS函数详细操作见:https://docs.aliyun.com/?

spm=5176.383718.4.6.Crqixn#/pub/odps/basic/common_command&functions

4、在SQL中使用自己定义函数

如今就能够使用自定函数urldecode().

select urldecode("%E9%98%BF%E9%87%8C%E4%BA%91%0A") as url from dual limit 1;

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

特殊说明:异常:Do not allow java UDF in project: ls_saas_jyltest是由于阿里云ODPS如今还没有全然开放UDF和MR功能,后期开放就能正常使用了。

【ODPS】UDF基础的更多相关文章

  1. odps编写UDF的实现

    问题 尝试写一个UDF,参数支持输入x,y与一个Polygon,返回结果是(x,y)是否在输入的Geometry之内? 环境 eclipse odps 插件 jts包:jts-1.8.jar 解法 i ...

  2. odps 使用参考 & tips

    1.  自定义udf 编写udf 1)pom.xml <dependency> <groupId>com.aliyun.odps</groupId> <art ...

  3. ODPS_ele—UDF Python API

    自定义函数(UDF) UDF全称User Defined Function,即用户自定义函数.ODPS提供了很多内建函数来满足用户的计算需求,同时用户还可以通过创建自定义函数来满足不同的计算需求.UD ...

  4. 如何在MaxCompute上处理存储在OSS上的开源格式数据

    0. 前言 MaxCompute作为使用最广泛的大数据平台,内部存储的数据以EB量级计算.巨大的数据存储量以及大规模计算下高性能数据读写的需求,对于MaxCompute提出了各种高要求及挑战.处在大数 ...

  5. UDF2

    问题 根据给定的gps点point(x,y)和北京的shape数据,关联出 AOI ID IO 输入 gps点表 create table gps ( x double, //经度 y double ...

  6. MaxCompute studio FAQ

    1. 官方文档地址 https://help.aliyun.com/document_detail/50889.html 2. Show Table Detail 中文乱码 原因是Intellij A ...

  7. 阿里云MaxCompute 2019-6月刊

    您好,MaxCompute 2019.6月刊为您带来6月产品.技术最新动态,欢迎阅读. 导读 [功能发布]6月产品重要发布 [文档更新]6月重要文档更新推荐 [干货精选]6月精选技术文章推荐 [活动回 ...

  8. MaxCompute 费用暴涨之新增SQL分区裁剪失败

    现象:因业务需求新增了SQL任务,这SQL扫描的表为分区表,且SQL条件里表只指定了一个分区,按指定的分区来看数据量并不大,但是SQL的费用非常高.费用比预想的结果相差几倍甚至10倍以上. 若只知道总 ...

  9. ODPS基础

    遇到一个项目需求是统计128张分库分表的数据表记录的最大id,通过单表查询计算非常费时,也无法应对分表数更多的情况,因此考虑到通过odps进行任务发布和运算 在云端 http://d2.alibaba ...

随机推荐

  1. JavaScript函数中的参数(arguments)

    arguments argument是JavaScript中的一个关键字,用于指向调用者传入的所有参数. function example(x){ alert(x); alert(arguments. ...

  2. Eclipse导入idea 项目

    学校做的项目老师会导入到Eclipse下查看. 使用idea做的项目直接导入eclipse会发生问题(file-Export to Eclipse) 让Eclipse兼容idea项目,或者直接导入id ...

  3. 【AC自动机】【高斯消元】hdu5955 Guessing the Dice Roll

    http://blog.csdn.net/viphong/article/details/53098489 我有一点不是很懂,这样算出来转移到AC自动机根节点的概率是一个远大于1的数. 按我的理解,因 ...

  4. [CF915F]Imbalance Value of a Tree

    [CF915F]Imbalance Value of a Tree 题目大意: 一棵\(n(n\le10^6)\)个结点的树,每个结点有一个权值\(w_i\).定义\(I(i,j)\)为\(i\)到\ ...

  5. 让XCode的Stack Trace信息可读

    程序报错信息如下:

  6. linux-排序-sort

    命令格式: sort [参数][源文件][-o 输出文件] 参数:  -b   忽略每行前面开始出的空格字符.  -c   检查文件是否已经按照顺序排序.  -f   排序时,忽略大小写字母.  -M ...

  7. awk-使用

    http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html 命令格式: awk [-F field-separator] 'pat ...

  8. web 中加载配置文件

    1.web.xml中配置   <!-- 加载配置文件 -->   <listener>      <description>ServletContextListen ...

  9. JavaScript 中函数节流和函数去抖的讲解

    JavaScript 中函数节流和函数去抖的讲解 我们都知道频繁触发执行一段js逻辑代码对性能会有很大的影响,尤其是在做一些效果实现方面,或者逻辑中需要进行后端请求,更是会导致卡顿,效果失效等结果,所 ...

  10. centos系统的时间时区和MySQL的时间时区问题

    原文:http://1567045.blog.51cto.com/1557045/1074971 centos系统的时间时区和MySQL的时间时区问题  年轻人做事要细心,特别我们这些搞IT的千万不莽 ...