8)Hive(函数二)

系统内置函数
  1. 查看系统自带的函数:
    show functions;

  2. 显示自带的函数的用法:
    desc functions upper;

  3. 详细显示自带的函数的用法:
    desc function extended upper;

日期处理函数
  1. date_format(根据格式整理日期)
    示例:
    select date_format('2019-02-10','yyyy-MM'); //2019-09

  2. date_add(加减日期)
    示例:
    select date_add('2019-02-10',-1); //2019-02-09
    select date_add('2019-02-10',1); //2019-02-11

  3. next_day
    示例:
    取当前周的周一:select date_add(next_day('2019-02-12','MO'),-7);
    取当前天的下一个周一:select next_day('2019-02-12','MO');

  4. last_day(求当月最后一天日期)
    示例:
    select last_day('2019-02-10'); //2019-02-28

自定义函数
  1. Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展
  2. 当Hive提供的内置函数无法满足业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)
  3. 根据用户自定义函数类别分为以下三种
    1. UDF(User-Defined-Function):一进一出
    2. UDTF (User-Defined Table-Generating Functions):一进多出,如lateral view explore()
    3. UDAF(User-Defined Aggregation Function): 聚集函数,多进一出,类似于: count/max/min…
  4. 官方文档地址:https://cwiki.apache.org/confluence/display/Hive/HivePlugins
  5. 编程步骤:
    1. 继承org.apache.hadoop.hive.ql.UDF
    2. 需要实现evaluate函数;evaluate函数支持重载
    3. 在hive的命令行窗口创建函数
      1. 添加jar:add jar linux_jar_path
      2. 创建function:create [temporary] function [dbname.]function_name AS
        class_name;
      3. 在hive的命令行窗口删除函数:
        Drop [temporary] function [if exists] [dbname.]function_name;
  6. 注意事项:
    UDF必须要有返回类型,可以返回null,但是返回类型不能为void
自定义UDF函数
  1. 创建一个Maven工程Hive

  2. 导入依赖:

    <dependencies>
       <!--https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
       <dependency>
           <groupId>org.apache.hive</groupId>
           <artifactId>hive-exec</artifactId>
           <version>1.2.1</version>
       </dependency>
    </dependencies>
  3. 创建一个类继承UDF接口

    public class Lower extends UDF {
     public String evaluate (final String s) {  
     if (s == null)  return null;
     return s.toLowerCase();   
     }
    }
  4. 打成jar包上传到服务器/opt/module/jars/udf.jar

  5. 将jar包添加到hive的classpath:
    add jar /opt/module/datas/udf.jar;

  6. 创建临时函数与开发好的java class关联
    create temporary function mylower as "com.atguigu.hive.Lower";

  7. 在hql中使用自定义的函数:
    select ename, mylower(ename) lowername from emp;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值