1.hive内置函数:
首先可以使用命令:show functions查看hive中内置的函数
可以使用命令:desc function nvl命令查看nvl这个函数的详情
常见的内置函数:
1>时间函数(具体用法自行百度)
查询日期之间相差的时间,以及相差几个月的命令:
日期加几天:(同理可加减月份add_months)
其他可以自行百度,这边只记录了我用到的
?2>字符串函数:
3>类型转换函数:
4>数学函数:
5>其他常用函数:
2.hive的窗口函数
?例如:我要查询一个船舶表中的所有数据,并且要查询这个表中的船舶数量,在每一行数据后面加一列
select *,count(*) over(partition?by vessel_bunting_nm) cs from 表名;(over()里面可以不加东西默认全部结果集,我这个是加了一个分组,根据这个分组进行聚合的);
例如:我要查询一个船舶表中的船舶名称,并且要查询这个表中的根据某一分组的总的船舶年龄,
select vessel_nm,vessel_age,sum(vessel_age) over(partition?by 字段) znl from 表名;
还可以在distribute by 字段 后面加 order?by 字段进行组内排序
3.window 子句:
序列函数:
1>NTILE函数:
ntile是hive很强大的一个分析函数,可以看成是:它把有序的数据集合平均分配到指定的数量个桶中,将桶号分配给每一行。如果不能平均分配,则优先分配较小编号的桶,并且各个桶中能放的行数最多相差1
例如:
select 字段1,字段2,字段3,ntile(3) over(partition by owner_management_nm order by date ) lz from 表名,结果如下(类似一个随机取样的结果,想看一下1桶数据,2桶数据,等等等等)
?2>LAG和LEAD函数
lag函数返回当前数据行的前第n行的数据
lead函数返回当前数据行的后第n行的数据
?
?
3>first_value和last_value
?first_value:取分组内排序后,截止到当前行第一个值。
last_value:取分组内排序后,截止到当前行最后一个值
例如:select 字段1,? first_value(字段1) over(partition by 字段2 order by 字段3) lz , last_value(字段1) over(partition by 字段2 order by 字段3 ) lz2 from 表名;
3>排名函数:row_number(),rank() ,dense_rank()
?
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |