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. 数字 function

    SELECT TRUNC(15.79), TRUNC(), ROUND(15.79), ), ), FLOOR(26.983), CEIL(26.123), ), ), ), MOD(,) FROM ...

  2. JAVA net 笔记

    1.InetAddress 获取主机ip等 2.URL 3.URLConnection (url.openConnection() 创建对象) 4.BufferedReader 5.InputStre ...

  3. Asp.Net MVC part45 过滤器、模板页

    过滤器 使用方式自定义类继承自相应的类或接口,重写方法,作为特性使用在控制器类中重写方法 特性方式的使用注意:如果继承自接口需要让类实现FilterAttribute,才可以作为特性使用使用方式1:作 ...

  4. mysql replication 复制的一些问题

    1   过大的复制延迟 mysql 的复制延迟是一个常见问题,现在已经有一些解决方案,如淘宝开发的一些工具 2 没有磁盘空间 复制导致磁盘空间塞满,二进制日志.中继日志或临时文件把磁盘塞满,slave ...

  5. 会话对应的线程id

    http://blog.csdn.net/sqlserverdiscovery/article/details/7968117

  6. display:flex;多行多列布局学习

    从以前的table布局到现在的div布局,再到未来的flex布局,CSS重构方面对展示行和适应性的要求越来越高: 首先来比较一下布局方式的更新意义: table布局: 优点:1.兼容性好,ie6.ie ...

  7. linux如何启动/停止/重启MySQL

    如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld star ...

  8. nagios系列教程地址

    http://www.sosidc.com/sort/10/page/3 http://www.sosidc.com/sort/10/page/2 http://www.sosidc.com/sort ...

  9. 算法导论-散列表(Hash Table)-大量数据快速查找算法

    目录 引言 直接寻址 散列寻址 散列函数 除法散列 乘法散列 全域散列 完全散列 碰撞处理方法 链表法 开放寻址法 线性探查 二次探查 双重散列 随机散列 再散列问题 完整源码(C++) 参考资料 内 ...

  10. 转:RESTful架构详解

    http://kb.cnblogs.com/page/512047/ REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. ...