ODPS SQL 大全

一、字符串函数

  • 1.char_matchcount

bigint char_matchcount(string str1, string str2)

用途:用于计算字符串str1中的字符有多少个出现在字符串str2中;

  • 2.char

string char(bigint ascii)

用途:将一个给定的ASCII码转换为字符

  • 3.concat

    string concat(string a , string b …)

用途:将多个字符串凭凑成为一个字符串

  • 4.get_json_object

string get_json_object( string json, string path)

用途:在一个标准的json字符串中,按照path抽取指定的字符串

  • 5.instr

bigint instr(string str1, string str2, bigint strat_position, bigint nth_appearance)

用途:计算一个字符串str1在字符串str2中的位置

for example:

instr(‘tech on the net’, ‘e’,1 ,2) = 11

  • 6.is_encoding

boolean is_encoding(string str, string from_encoding, string to_encoding)

用途:用于判断一个字符串是否可以从一个字符编码变成另外一种字符编码

for example:

is_encoding(‘测试’, ‘utf-8’, ‘GBK’) = true;

  • 7.keyvalue

keyvalue(string srcstr, string split1, string split2, string key);

keyvalue(string srcstr, string key) //split1=’;’ , split2 = ‘:’

用途:用两个分隔符分割后的键值对,给一个键返回一个数值;默认的两个分隔符为封号和冒号

for example:

keyvalue(‘0:1\;1:2’, 1) = 2

  • 8.length

bigint length(string str)

用途:返回一个字符串的长度

  • 9.lengthb

bigint lengthb(string str)

用途:返回一个字符串有多少个字节,比如说,一个中文文字就是两个字节

  • 10.md5

string md5(string value)

用途:计算输入字符串value的md5值

  • 11.regexp_extract(不懂)

string regexp_extract(string source, string pattern, bigint occurrence)

用途:

  • 12.regexp_instr(不懂)

  • 13.regexp_replace

  • 14.regexp_substr

  • 15.regexp_count

  • 16.split_part

string split_part(string str, string separator, bigint start[, bigint end])

用途:按照分隔符separator分割字符串,返回从start开始到end结束的字符串

  • 17.substr

string substr(string str, bigint start_position[, bigint length])

用途:返回字符串str从start_position开始,长度为length的字符串。

  • 18.tolower

string tolower(string source)

  • 19.toupper

string toupper(string source)

  • 20.to_char

string to_char(bigint/boolean/double/datetime value)

  • 21.trim

string trim(string str)

用途:将指定字符串去除左右空格

  • 22.ltrim

string ltrim(string str)

用途:将指定字符串去除左空格

  • 23.rtrim

string rtrim(string str)

用途:将指定字符串去除左空格

  • 24.reverse

string reverse(string str)

  • 25.space

string space(bigint n)

用途:空格字符串函数,返回长度为n的空字符串。

  • 26.repeat

string repeat(string str, bigint n)

用途:返回重复n次后的str字符串。

二、窗口函数

  • 1.window_func() over (partition by col1, [col2…] order by col1 [desc|asc], col2[asc|desc] windowing_clause)

开窗函数,支持这种开窗函数的有avg/count/max/min/stddev/sum,一般都是用于分区表的操作。

  • 2.count

bigint count([distinct] expr) over (partition by col1), [col2…] order by col1[asc|desc] window_clause

计算计数值

select user_id,

count(user_id) over (partition by user_id) as count

from test_src;

select user_id

count(user_id) over (partirion by user_id order by user_id) as count

from test_src;

  • 3.avg

avg([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

计算平均值

  • 4.max(min)

max([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

计算最大值|最小值

  • 5.median

double median([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

decimal median([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

计算中位数

  • 6.stddev

总体标准差

double stddev([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

decimal stddev([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

  • 7.stddev_samp

样本标准差

double stddev([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

decimal stddev([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

  • 8.sum

计算汇总值

sum([distinct] expr) over (partition by col1)[, col2…] [order by col1 [asc|desc]] [,col2[asc|desc]…]] [window_clause])

  • 9.dense_rank

bigint dense_rank() over(partition by col1[, col2…]) order by col1[asc|desc] [col2[asc|desc]]

计算连续排名。

  • 10.rank

bigint rank() over (partition by col1[, col2…] order by col1 [asc|desc][, col2[asc|desc]…])

计算排名。col2相同的行数获得排名顺序下降

  • 11.lag

lag(expr, bigint offset, default) over (partition by col1[, col2…])

order by col1[asc|desc][, col2[asc|desc]…])

按照偏移量取当前行之前第几行的值,如果当前行号为rn,则取行号为rn-offset的值。

  • 12。lead

lead(expr, bigint offset, default) over (partition by col1[, col2…])

order by col1[asc|desc][, col2[asc|desc]…])

按照偏移量取当前行之后第几行的值,如果当前行号为rn,则取行号为rn+offset的值。

  • 13.percent_rank

percent_rank() over partition by col1[, col2…] order by col1 [asc|desc][, col2[asc|desc]…]

计算一组数据中某行的相对排名

  • 14.row_number

row_number() over partition by col1[, col2…] order by col1 [asc|desc][, col2[asc|desc]…]

计算行号,从1开始

  • 15.cluster_sample

boolean cluster_sample(bigint x[, bigint y]) over(partition by col1[, col2…])

分组抽样

例如:有两个实验分组,group_a和group_b,每个实验分组的数值value都是几千个,现在要从a组和b组中随机抽样10%,用sql语句如何实现?

select group_id, value

from(

select group_id, value, cluster_sample(10,1) over (partition by group_id) as flag

from tbl ) sub

where flag = true;

三、聚合函数

  • 1.count

bigint count([distinct|all value)

计算记录数,可以与聚合函数搭配使用,类似map_reduce里面的combiner

  • 2.avg

double avg(double value)

decimal avg(double value)

计算平均数;如果value是bigint,会隐式转换为double类型后参与运算

  • 3.max

max(value)

计算最大值,value是什么类型,返回值就是什么类型

  • 4.min

min(value)

计算最小值,value是什么类型,返回值就是什么类型

  • 5.median

double median(double number)

decimal median(decimal mumber)

计算中位数

  • 6.stddev

double stddev(double number)

decimal stddev(decimal number)

计算总体标准差

  • 7.stddev_samp

double stddev_samp(double number)

decimal stddev_samp(decimal number)

计算样本标准差

  • 8.sum

sum(value)

计算汇总值,value是什么类型,返回什么类型

  • 9.wm_concat

string wm_concat(string separator, string str)

用指定的分隔符,把str衔接起来

  • 10.cast

cast(expr as )

将表达式的结果转换为指定的类型,例如:

cast(‘120’ as string)

cast(double as bigint)

cast(string as bigint)

cast(string as datetime) 或者 cast(datetime as string) 会采用默认的日期格式yyyy-mm-dd hh:mm:ss

  • 11.coalesce

coalesce(expr1, expr2, …)

返回参数列表中第一个非NULL的值,如果列表中全部都是NULL则返回NULL

  • 12.decode

decode(expression, search, result[, search, result]…[,default])

实现if-then-else分支选择的功能

以下两个案例是等值的

select

decode(customer_id

1, ‘taobao’,

2, ‘alipay’,

3, ‘aliyun’,

NULL, ‘N/A’

‘others’) as result

from sales_detail;

select

(if customer_id := 1 then

result := ‘taobao’;

elseif customer_id := 2 then

result := ‘alipay’;

elseif customer_id := 3 then

result := ‘aliyun’;

elseif customer_id := null then

result := ‘N/A’ )

else

result := ‘others’

end if;

) from sales_detail;

  • 13.greatest

greatest(var1, var2, …)

返回输入参数中最大的一个

  • 14.ordinal

ordinal(bigint nth, var1, var2, …)

将输入变量从小到大排序后,返回nth指定的位置的值。

  • 15.least

least(var1, var2, …)

返回输入参数中最小的一个

  • 16.uuid

uuid()

返回一个随机ID

  • 17.sample

boolean sample(x, y, column_name)

对所有读入的column_name的值,哈希x份,取第y份。其中y和colum_name同时存在或者同时省略

  • 18.case when

case value

when (condition1) then result1

when (condition2) then result2

else resultn

end

case

when (condition1) then result1

when (condition2) then result2

else resultn

end

  • 19.if

if(testcondition, valuetrue, valuefalseornull)

判断testcondition是否为真,真取第一个数值,否则取第二个数值。

四、日期函数

  • 1.dateadd

datetime dateadd(datetime date, bigint delta, string datepart);

用途:按照指定的单位datepart和幅度delta修改date的值

  • 2.datediff

bigint datediff(datetime date1, datetime date2, string datepart);

用途:计算两个时间date1, date2 在指定时间单位datepart的差值

  • 3.datepart

bigint datepart(datetime date, string datepart)

用途:提取日期date中指定的时间单位datepart的值

  • 4.datetrunc

datetime datetrunc(datetime date, string datepart)

用途:返回日期date被截取指定时间单位datepart后的日期值

  • 5.from_unixtime

datetime from_unixtime(bigint unixtime)

用途:将数字型的unix时间日期值unixtime 转为日期值

  • 6.UNIX_TIMESTAMP

bigint unix_timestamp(datetime date)

用途:将日期值转换成unixtime数值

  • 7.GETTIME

datetime gettime()

用途:获取计算的当前日期值

  • 8.ISDATE

boolean isdate(string date, string format)

用途:判断一个日期字符能否基于对应的格式转换为一个日期值,如果可以返回true,否则返回false

  • 9.lastday

datetime lastday(datetime date)

用途:取date当月的最后一天,截取到天,时分秒部分为00:00:00

  • 10.to_date

datetime to_date(string date, string format)

用途:将一个字符串date按照format的指定的格式转换为日期值

  • 11.to_char

string to_char(datetime date, string fromat)

用途:将一个日期值按照指定的格式转换为字符串

  • 12.weekday

bigint weekday(datetime date)

用途:返回date 日期当前周的第几天

  • 13.weekofyear

bigint weekofyear(datetime date)

用途:返回date在那一年中的第几周

五、数学函数

  • 1.abs

double abs(double number)

bigint abs(bigint number)

decimal abs(decimal number)

返回绝对值

select abs(id) from tb1;

  • 2.acos

double acos(double number)

decimal acos(decimal number)

计算number的反余玄函数

  • 3.asin

double asin(double number)

decimal asin(decimal number)

计算number的反正玄函数

  • 4.atan

double atan(double number)

反正切函数

  • 5.ceil

bigint ceil(double number)

bigint ceil(decimal number)

返回不小于number的最小整数

  • 6.conv

string conv(string input, bigint from_base, bigint to_base)

进制转换函数

例如:

conv(‘1111111001010101’, 2, 10)

  • 7.cos

double cos(double number)

decimal cos(decimal number)

计算number的余玄函数

  • 8.cosh

double cosh(double number)

decimal cosh(decimal number)

计算number的双余玄函数

  • 9.cot

double cot(double number)

decimal cot(decimal number)

计算number的余切函数

  • 10.exp

double exp(double number)

decimal exp(decimal number)

计算number的双余玄函数

  • 11.floor

bigint floor(double number)

bigint floor(decimal number)

向下取整,返回比number小的整数值

floor(1.2) = 1

floor(-1.2) = -2

floor(0.1) = 0

  • 12.ln

double ln(double number)

decimal ln(decimal number)

计算number的自然对数

  • 13.log

double log(double base, double x)

decimal log(decimal base, decimal x)

返回以base为底的x的对数

  • 14.pow

double pow(double x, double, y)

decimal pow(decimal x, decimal, y)

返回x的y次方

  • 15.rand

double rand(bigint seed)

返回以seed为种子的double随机数,返回值区间是的0-1;

  • 16.round

double round(double number, [bigint decimal_places])

decimal round(decimal number, [bigint decimal_places])

四舍五入到指定小数点

decimal_places可以是负数,负数会从小数点向左开始计数,并且不保留小数部分;

round(123.345, -2) = 100.0

round(123.345, -4) = 0.0

  • 17.sign

sign(x)

x为正值,返回1.0

x为负值,返回-1.0

当x为0, 返回0.0

当x为空,抛出异常

  • 18.sin

double sin(double number)

正玄函数

  • 19.sinh

double sinh(double number)

decimal sinh(decimal number)

双曲正玄函数

  • 20.sqrt

double sqrt(double number)

decimal sqrt(decimal number)

计算平方根

  • 21.tan

double tan(double number)

decimal tan(decimal number)

计算正切函数

  • 21.tanh

double tanh(double number)

decimal tanh(decimal number)

计算双曲正切函数

  • 22.trunc

double trunc(double number[, bigint decimal_places])

decimal trunc(decimal number[, bigint decimal_places])

将输入值number截取到指定小数点的位置,截取掉的部分补0,decimal_places也可以是负数,如果是负数,从小数点向左开始截取,并且不保留小数部分;如果decimal_places超过了整数部分长度,返回0

trunc(125.815) = 125.0

trunc(125.815,0)=125.0

trunc(125.815,1)=125.8

trunc(125.815,-1)=120.0

  • 9
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值