• Hive之函数


    Hive之函数

    第一节:内置函数

    一、显示内置函数列表

          show functions;

    默认271个

    二、查看函数的基本使用

          desc function funname;

    desc function max;

    三、查看函数的详细使用教程

          desc function extended funname;

    desc function extended max;

    四、函数分类

    1、UDF

          USER DEFINE FUNCTION 用户定义函数,进一路出一路

    2、UDAF

          USER DEFINE aggregate FUNCTION  用户定义聚合函数,进多路出一路

    3、UDTF

          USER DEFINE table FUNCTION  用户定义表函数,进一路出多路

          explode 炸裂

    第二节:常用函数之数值

    一、ceil

          向上取整 

          ceil(x)  大于等于参数的第一个整数

    二、floor

          向下取整

          floor(x)  小于等于参数的第一个整数

    三、round

          round(x[, d]) 参数1 需要四舍五入的数 参数2:小数位数

          select round(3.556789);

          select round(3.556789,2);

    四、rand

          求随机数  0-1

          rand([seed])  参数:随机数种子,种子一样的,随机数固定的。

          一般使用无参的select rand();

    第二节:常用函数之字符串

    一、简介

          hive中的字符串,下标1开始的,字符串从右向左标记-1开始的。

    二、split

          split(str, regex)  参数1 字符串 参数2 切分的分隔符

          select split("a,b,c,d",","); 返回值 数组类型

    三、instr

          instr(str, substr) 参数1:原始字符串,参数2:需要查找的子字符串

          返回子字符串在原始字符串中第一次出现的位置,不存在 0

          select instr("hello word","wo");

          select instr("hello word","ww");

    四、大小写

          ucase  大写

    lcase  小写

    upper  大写

    lower  小写

    ucase(str)

    五、字符串切分

          substr

    substring

    substr(str, pos[, len])  参数1 字符串 参数2 位置 参数3 截取长度

    六、去空格

          trim(str)  去前后空格

    ltrim(str)   去前空格

    rtrim(str)   去后空格

    七、拼接

          concat(str1, str2, ... strN)  将参数拼接为一个字符串

    concat_ws(分隔符,str1,str2....)  按照一定的分隔符,拼接字符串的

    八、字符串长度

    length 返回字符串长度

    第三节:常用函数之日期

    一、获取当前系统时间戳

          current_timestamp()

    select current_timestamp();  日期 时间

    current_date

    select current_date();  获取当前系统的日期的

    二、时间戳->日期

          from_unixtime

    from_unixtime(unix_time, format)  参数1 时间戳 参数2 日期格式

    select from_unixtime(1558281600,"yyyy-MM-dd hh:mm:ss");

    时间戳转成日期,其中时间戳必须是整形。

    三、日期->时间戳

    unix_timestamp(date[, pattern])  参数1 日志 参数2 参数1的表达式

    select unix_timestamp("2019-5-20 17:27:56","yyyy-MM-dd hh:mm:ss");

    四、时间提取

    year 年

    month 月

    day

    hour

    minute

    second

    select year("2019-3-4");

    五、其他

          to_date:返回日期

    date_add:当前日期加几天

    date_sub:当前日期  减几天

    day:当前日期的号

    month:当前日期是几月份

    year:当前日期是哪一年

    2018-6-30

    weekofyear:给定的日期的周数

    第四节:常用函数之类型转换

          cast(原始数据 as 需要转换的类型)

          cast(age as bigint)

    第五节:常用函数之条件判断

    一、if

          if(判断,返回值1,返回值2);

          类似java中的三元运算符

    二、nvl

          nvl(需要判断的字段,参数1为null的返回值);

          用于处理null值

    三、coalesce

          coalesce;

          返回第一个不为null的值

    第六节:常用函数之炸裂函数

    一、简介

          explode:炸裂函数,将数组或map集合进行炸裂。

          数组或map集合中的每一个元素为一行[1,2,3,4]{a:1,b:2}

          对于数组每个元素只有一个,炸裂的结果只有一列,对于map每个元素有k-v 炸裂出来的结果2列。

    二、单独使用

          作为查询的参数

    第七节:常用函数之窗口函数

    一、概念

          hive中提供的,运用一定的语法,可以按照我们的用户需求,将表中的数据分成多个独立的部分,每一个部分都是单独执行的,每一个部分数据称为一个窗口,每一个窗口内部的逻辑只执行当前窗口的数据,不会垮窗口执行数据。

          开窗函数一般和其他的功能性函数一起使用,在都出开窗的那一字段。

          在over子句中可以只给排序,默认只有一个窗口。

    二、over子句

    1、简介

          over子句用于指定开窗的,每一个“窗口”依据。一般情况下,指定的每一个窗口按照某一个字段相同的数据放在每一个窗口中。

    over(指定开窗依据的字段 指定每一个窗口内的排序规则)

    2、开窗依据

          必须要指定的。

          一旦指定开窗依据的字段,就会将相同的字段值,放在一个窗口中。

    语法:

    distribute by 字段名

          partition by 字段名

    3、排序规则

          可以指定,也可以不指定。

    语法:

    sort by --- distribute by

          order by --- partition by

    4、总结

          over(partition by ...order by ..)

       over(distribute by ....sort by )

          over子句(开窗)不能单独使用,需要配合一些功能性的函数一起使用。

    三、配合聚合函数

    1、简介

          max(字段) | sum(字段) + over子句,根据over子句指定的开窗规则,进行求每一个窗口内部的最大值 | 总和。

          一般用于利润累计,目前最大值等

    四、分组求topN

    1、简介

    rank|dense_rank 添加排名的,每个开窗内部,添加排名的

    row_number添加行号的,1开始的

  • 相关阅读:
    力扣算法:组合总和IV
    力扣算法:组合总和III
    逻辑回归(Logistic Regression)学习笔记
    力扣算法:组合总和II
    力扣算法:组合总和
    寒假作业(五)
    寒假作业(四)
    寒假作业(三)
    寒假作业(二)
    寒假学习(一)
  • 原文地址:https://www.cnblogs.com/lizm166/p/13354967.html
Copyright © 2020-2023  润新知