hive内置函数详解(分析函数、窗口函数)

cli命令

show functions;

desc function concat;

desc function extended concat;查看某个函数怎么使用的例子

nvl函数
coalesce(v1,v2,...)返回参数中第一个非空值,如果所有值都为null返回null;

set.cli.print.header=true;

winfunc

员工 工资 标识

id  money type

关系型运算符优先级高到低为:not and or
and or 优先级

select id ,money from winfunc where id='1001' or id='1002'
     and money ='100'; 
    
结果

    1001  100
    1001  150
    1001  200
    1001  150
    1002  100

正确的sql应该是

select id ,money from winfunc where (id='1001' or id='1002') and money ='100';

结果

     1001  100
     1002  100

if(con,v1,v2)

    select if(2>1,'v1','v2') from dual;
    v1

case when

select case when id='1001' then 'v1' when id='1002' then 'v2' else 'v3' end from winfunc;

get_json_object

select get_json_object('{"name":"jack","age":"20"}','$.name') from dual;
jack

parse_url

 select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST') from
    lxw_dual;
    facebook.com

select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'QUERY', 'k1')
    from lxw_dual;
    v1

concat_ws比concat多了个拼接字符串之间的分隔符

concat_ws(string SEP,array<string>)对数组里的值处理

collect_set(id)去重返回数组

    
    select collect_set(id) from winfunc;
    ["1001","1002","1003","1004"]

collect_list(id)不去重返回数组

    select collect_list(id) from winfunc;

partition by关键字是oracle中分析性函数的一部分,它和聚合函数不同的地方在于它能返回一个分组中的多条记录,而聚合函数一般只有一条反映统计值的记录

sum() over (PARTITION BY ...) 是一个分析函数。 他执行的效果跟普通的sum ...group by ...不一样,它计算组中表达式的累积和,而不是简单的和。

Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。

在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:
 
SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProductPlace = N'china')
ORDER BY IDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。

ORDER BY 子句中的列必须包含在聚合函数或 GROUP BY 子句中。

GROUP BY 和 ORDER BY一起使用时,ORDER BY要在GROUP BY的后面。

一、窗口函数

 first_value(求组的第一个值)
    
    select id,money,
    first_value(money) over (partition by id order by money
    rows between 1 preceding and 1 following) 
    from winfunc

每行对应的数据窗口是从第一行到最后一行
    rows between unbounded preceding and unbounded following

lead(money,2) 取后面距离为2的记录值,没有就取null

    select id,money,lead(money,2) over(order by money) from winfunc

lag(money,2)于lead相反

rank()排序函数与row_number()

select id,money, rank() over (partition by id order by money) from winfunc
结果

    1001 100 1
    1001 150 2
    1001 150 2
    1001 200 4

dense_rank()

select id,money, dense_rank() over (partition by id order by money) from winfunc

结果

    1001 100 1
    1001 150 2
    1001 150 2
    1001 200 3

cume_dist()

计算公式:CUME_DIST 小于等于当前值的行数/分组内总行数–比如,统计小于等于当前薪水的人数,所占总人数的比例

    select id,money, cume_dist() over (partition by id order by money) from winfunc

结果

    1001 100 0.25
    1001 150 0.75
    1001 150 0.75
    1001 200 1

percent_rank(),第一个总是从零开始
PERCENT_RANK() = (RANK() – 1) / (Total Rows – 1)

计算公式:(相同值最小行号-1)/(总行数-1)

结果

    1001 100 0
    1001 150 0.33
    1001 150 0.33
    1001 200 1

ntile(2) 分片

asc时, nulls last为默认
desc时, nulls first为默认

select id,money, ntile(2) over (order by money desc nulls last) from winfunc;

混合函数(使用java里面的方法)

java_method和reflect是一样的

select java_method("java.lang.Math","sqrt",cast(id as double)) from winfunc;

UDTF表函数explode()配合lateral view关键字

select id ,adid from winfunc lateral view explode(split(type,'B')) tt as adid

1001 ABC

列转行

1001 A

1001 C

正则表达式函数

like 字符"_"表示任意单个字符,而字符"%"表示任意数量的字符

rlike后面跟正则表达式

select 1 from dual where 'footbar' rlike  '^f.*r$';

正则表达式替换函数

regexp_replace(string A,string B,string C)
将字符串A中符合java正则表达式B的部分替换为C

select regexp_replace('foobar','oo|ar','') from dual;

返回fb

regexp_extract(string subject,string pattern,int index)

select regexp_extract('foothebar','foo(.*?)(bar)',1) from dual;

返回the,()正则表达式中表示组,1表示第一个组的索引

1.贪婪匹配(.*), |一直匹配到最后一个|

    select regexp_extract('979|7.10.80|8684','.*\\|(.*)',1) from dual;

返回8684

2.非贪婪匹配(.*?)加个问号告诉正则引擎,尽可能少的重复上一个字符

    select regexp_extract('979|7.10.80|8684','(.*?)\\|(.*)',1) from dual;

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1710582

时间: 2024-10-21 15:12:13

hive内置函数详解(分析函数、窗口函数)的相关文章

ASP内置对象详解之Application对象

application|对象|内置对象|详解 Application对象是个应用程序级的对象,用来在所有用户间共享信息,并可以在Web应用程序运行期间持久地保持数据. Application的属性: 方法如下: Application对象没有内置的属性,但是我们可以自行创建其属性. <% Application("属性名")=值 %> 其实大部分Application变量都 存放在Contents集合中,当你创建一个新的Application变量时,其实就是在Content

ASP内置对象详解之ObjectContext对象

object|对象|内置对象|详解 该对象用于控制Active Server Pages的事务处理.事务处理由Microsoft Transaction Server (MTS)管理. 事件 ObjectContext.OnTransactionAbort 由放弃的事务处理事件激发,在脚本完成处理后发生. ObjectContext.OnTransactionCommit 由成功的事务处理事件激发,在脚本完成处理后发生. 方法 ObjectContext.SetAbort 显式的放弃一次事务处理

ASP内置对象详解之Request对象

request|对象|内置对象|详解 Request对象用于接受所有从浏览器发往你的服务器的请求内的所有信息. 集合 Request.ClientCertificate(key[SubField]) 所有客户证书的信息的集合.对于Key,该集合具有如下的关键字: Subject 证书的主题.包含所有关于证书收据的信息.能和所有的子域后缀一起使用. Issuer 证书的发行人.包含所有关于证书验证的信息.除了CN外,能和所有的子域后缀一起使用. VadidFrom 证书发行的日期.使用VBScri

ASP内置对象详解之Response对象

response|对象|内置对象|详解 Response对象用于向客户端浏览器发送数据,用户可以使用该对象将服务器的数据以HTML的格式发送到用户端的浏览器,它与Request组成了一对接收.发送数据的对象,这也是实现动态的基础.下面介绍它常用的属性和方法. 1.Buffer属性 该属性用于指定页面输出时是否要用到缓冲区,默认值为False.当它为True时,直到整个Active Server Page执行结束后才会将结果输出到浏览器上.如:<%Response.Buffer=True%>&l

ASP内置对象详解之Server对象

server|对象|内置对象|详解 Server对象是ASP中一个很重要的对象,许多高级功能都是靠它来完成的.它提供了对Active Server Pages对和方法的使用,在这我主要介绍几个常用的方法. 1.MapPath方法 该方法返回指定文件的相对路径或物理路径.若Path以一个(/)或(\)开始,则MapPath方法返回路径时将Path视为完整的虚拟路径.若Path不是以斜杠开始,则MapPath方法返回同.asp文件中已有的路径相对的路径.如:test.asp文件位于C:\inetpu

ASP内置对象详解之Session对象

session|对象|内置对象|详解 Session其实指的就是访问者从到达某个特定主页到离开为止的那段时间.每一访问者都会单独获得一个Session.在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据:如果另一个用户也同时访问该Web应用,他也拥有自己的Session变量,但两个用户之间无法通过Session变量共享信息,而Application类型的变更则可以实现站点多个用户之间在所有页面中共享信息. 1.SessionID属

ASP内置对象详解精彩教程

对象|教程|内置对象|详解 使用ASP开发动态网站我们经常使用到其中的六个内置的对象,今天给大家收集了一下供大家参考! 1.ASP内置对象详解之Session对象 [2005-03-16]     2.ASP内置对象详解之Server对象 [2005-03-16]     3.ASP内置对象详解之Response对象 [2005-03-16]     4.ASP内置对象详解之Request对象 [2005-03-16]     5.ASP内置对象详解之ObjectContext对象 [2005-

nginx 内置变量详解及隔离进行简单的拦截_nginx

1,nginx内置变量 nginx 有很多内置变量可以进行简单的过滤. $arg_name 请求行中的name参数. $args 请求行中参数字符串. $cookie_name 名为name的cookie. 与$uri相同. $http_name 任意请求头的值:变量名的后半部为转化为小写并且用下划线替代横线后的请求头名称. $host "Host"请求头的值,如果没有该请求头,则为与请求对应的虚拟主机的首要主机名. $query_string 与$args相同. $realpath_

Python_List对象内置方法详解

前言 在上一篇中介绍了Python的序列和String类型的内置方法,本篇继续学习作为序列类型成员之一的List类型的内置方法. 软件环境 系统  UbuntuKylin 14.04 软件  Python 2.7.3 IPython 4.0.0 列表List 列表是一种容器,存放内存对象的引用.即是任意内存对象的有序集合,不同的类型对象可以存放在同一个列表中.通过索引来访问其中的元素.可以任意的嵌套.伸长.异构.为可变数据类型,支持原处修改列表内部元素的引用. 修改列表的元素 In [130]: