【ODPS】UDF基础
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基础的更多相关文章
- odps编写UDF的实现
问题 尝试写一个UDF,参数支持输入x,y与一个Polygon,返回结果是(x,y)是否在输入的Geometry之内? 环境 eclipse odps 插件 jts包:jts-1.8.jar 解法 i ...
- odps 使用参考 & tips
1. 自定义udf 编写udf 1)pom.xml <dependency> <groupId>com.aliyun.odps</groupId> <art ...
- ODPS_ele—UDF Python API
自定义函数(UDF) UDF全称User Defined Function,即用户自定义函数.ODPS提供了很多内建函数来满足用户的计算需求,同时用户还可以通过创建自定义函数来满足不同的计算需求.UD ...
- 如何在MaxCompute上处理存储在OSS上的开源格式数据
0. 前言 MaxCompute作为使用最广泛的大数据平台,内部存储的数据以EB量级计算.巨大的数据存储量以及大规模计算下高性能数据读写的需求,对于MaxCompute提出了各种高要求及挑战.处在大数 ...
- UDF2
问题 根据给定的gps点point(x,y)和北京的shape数据,关联出 AOI ID IO 输入 gps点表 create table gps ( x double, //经度 y double ...
- MaxCompute studio FAQ
1. 官方文档地址 https://help.aliyun.com/document_detail/50889.html 2. Show Table Detail 中文乱码 原因是Intellij A ...
- 阿里云MaxCompute 2019-6月刊
您好,MaxCompute 2019.6月刊为您带来6月产品.技术最新动态,欢迎阅读. 导读 [功能发布]6月产品重要发布 [文档更新]6月重要文档更新推荐 [干货精选]6月精选技术文章推荐 [活动回 ...
- MaxCompute 费用暴涨之新增SQL分区裁剪失败
现象:因业务需求新增了SQL任务,这SQL扫描的表为分区表,且SQL条件里表只指定了一个分区,按指定的分区来看数据量并不大,但是SQL的费用非常高.费用比预想的结果相差几倍甚至10倍以上. 若只知道总 ...
- ODPS基础
遇到一个项目需求是统计128张分库分表的数据表记录的最大id,通过单表查询计算非常费时,也无法应对分表数更多的情况,因此考虑到通过odps进行任务发布和运算 在云端 http://d2.alibaba ...
随机推荐
- ASP.NET Core 2.2 基础知识(六) 配置(内含MySql+EF)
先上一段代码,了解一下 .NET Core 配置数据的结构. 新建一个 控制台项目,添加一个文件 json.json ,文件内容如下: { "country": "cn& ...
- Visual Studio 2017 编译Clang
到http://releases.llvm.org/download.html下载LLVM和clang源码 比如: http://releases.llvm.org/6.0.0/llvm-6.0.0. ...
- Dumpzilla工具第615行bug的解决办法
Dumpzilla工具第615行bug的解决办法 在Dumpzilla使用选项frequency时,会提示SQL语法错误.这是由于其中SQL语句编写错误.需要将615行中: where url l ...
- 【计算几何】【凸包】bzoj2829 信用卡凸包
http://hzwer.com/6330.html #include<cstdio> #include<cmath> #include<algorithm> us ...
- 51单片机软件I2C驱动中的CY
做一个MSP430的项目,虽然430内部有硬件I2C的模块,略难,准备直接移植51的..碰到一句代码 dat <<= 1; //移出数据的最高位 pSDA = CY; //送数据口 dig ...
- 谁说 JavaScript 很简单了?
转载请注明出处,保留原文链接以及作者信息 本文介绍了 JavaScript 初学者应该知道的一些技巧和陷阱.如果你是老司机,就当做回顾了,哪里有写的不好的地方欢迎指出. 1. 你是否尝试过对一个数字数 ...
- Swift,集合
1.创建(Set)集合(无序不可重复) (1)创建空集合 var a=Set<Int>() //[] (2)创建集合 var a:Set=[1,2,3] //[2,3,1] 2.集合插入( ...
- python-sdk-demo的打包
1.安装setuptools pip install python-setuptools 2.创建一个简单的包 下载demo https://github.com/cp-m/py-sdk-demo.g ...
- golangWEB框架gin学习之获取post参数
原文地址:http://www.niu12.com/article/41 package main import ( "fmt" "github.com/gin-goni ...
- phpmyadmin后台4种拿shell方法 && php爆路径大法
php后台拿shell要知道php的路径,文章下面将讲诉爆php路径的方法!!! 方法一: CREATE TABLE `mysql`.`xss` (`xss1` TEXT NOT NULL ); IN ...