ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hive 常用系统函数

2021-06-28 16:32:00  阅读:172  来源: 互联网

标签:tmp 常用 06 函数 gmall hive 2020 Hive select


1. concat函数 :在连接字符串的时候,只要其中一个是NULL,那么将返回NULL
        hive> select concat('a','b');
        ab
        hive> select concat('a','b',null);
        NULL
2. concat_ws函数:在连接字符串的时候,只要有一个字符串不是NULL,就不会返回NULL。concat_ws函数需要指定分隔符。
    hive> select concat_ws('-','a','b');
        a-b
    hive> select concat_ws('-','a','b',null);
        a-b
    hive> select concat_ws('','a','b',null);
        ab
3. collect_set函数
    1)创建原数据表
        hive (gmall)>
        drop table if exists stud;
        create table stud (name string, area string, course string, score int);
    2)向原数据表中插入数据
        hive (gmall)>
        insert into table stud values('zhang3','bj','math',88);
        insert into table stud values('li4','bj','math',99);
        insert into table stud values('wang5','sh','chinese',92);
        insert into table stud values('zhao6','sh','chinese',54);
        insert into table stud values('tian7','bj','chinese',91);
    3)查询表中数据
        hive (gmall)> select * from stud;
        stud.name       stud.area       stud.course     stud.score
        zhang3              bj              math            88
        li4                 bj              math            99
        wang5               sh              chinese         92
        zhao6               sh              chinese         54
        tian7               bj              chinese         91
    4)把同一分组的不同行的数据聚合成一个集合
         hive (gmall)> select course, collect_set(area), avg(score) from stud group by course;
            chinese     ["sh","bj"]     79.0
            math        ["bj"]  93.5
    5)用下标可以取某一个
        hive (gmall)> select course, collect_set(area)[0], avg(score) from stud group by course;
            chinese     sh      79.0
            math        bj      93.5
4. str_to_map函数
    1)语法描述
        str_to_map(VARCHAR text, VARCHAR listDelimiter, VARCHAR keyValueDelimiter)
    2)功能描述
        使用listDelimiter将text分隔成K-V对,然后使用keyValueDelimiter分隔每个K-V对,组装成MAP返回。默认listDelimiter为( ,),keyValueDelimiter为(=)。
    3)案例
        str_to_map('1001=2020-06-14,1002=2020-06-14',  ','  ,  '=')
         输出
        {"1001":"2020-06-14","1002":"2020-06-14"}

5. nvl函数
    1)基本语法==等同于if的用法
        NVL(表达式1,表达式2)
        如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。
        该函数的目的是把一个空值(null)转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。
    2)案例实操
        hive (gmall)> select nvl(1,0);
            1
        hive (gmall)> select nvl(null,"hello");
            hello
6. coalesce函数
    1) 基本语法==等同于加强版的nvl,可以传递多个参数一次判断是否为空,不空则取值
        coalesce(表达式1,表达式2,表达式3,....)
    2)案例实操
        select  *
            from tmp_login
            full outer join tmp_cart on tmp_login.user_id=tmp_cart.user_id
            full outer join tmp_order on nvl(tmp_login.user_id,tmp_cart.user_id)=tmp_order.user_id
            full outer join tmp_payment on coalesce(tmp_login.user_id,tmp_cart.user_id,tmp_order.user_id) = tmp_payment.user_id
            full outer join tmp_detail on coalesce(tmp_login.user_id,tmp_cart.user_id,tmp_order.user_id,tmp_payment.user_id) = tmp_detail.user_id ;

7. 日期处理函数
    1)date_format函数(根据格式整理日期)
         hive (gmall)> select date_format('2020-06-14','yyyy-MM');
         2020-06
    2)date_add函数(加减日期)
        hive (gmall)> select date_add('2020-06-14',-1);
        2020-06-13
        hive (gmall)> select date_add('2020-06-14',1);
        2020-06-15
    3)next_day函数
        (1)取当前天的下一个周一
            hive (gmall)> select next_day('2020-06-14','MO');
            2020-06-15
            说明:星期一到星期日的英文(Monday,Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday)
        (2)取当前周的周一
            hive (gmall)> select date_add(next_day('2020-06-14','MO'),-7);
            2020-06-8
    4)last_day函数(求当月最后一天日期)
        hive (gmall)> select last_day('2020-06-14');
        2020-06-30
    5) unix_timestamp 获取指定日期的时间戳
        hive (gmall)> select unix_timestamp('2021-04-15 12:45:00');
            1618490700
        hive (gmall)> select unix_timestamp('2021-04-15','yyyy-MM-dd');
            1618444800
        hive (gmall)> select unix_timestamp('20210415','yyyyMMdd');
            1618444800
    6)from_unixtime 根据时间戳获取日期
        hive (gmall)>select from_unixtime(1618444800);
            2021-04-15 00:00:00
        hive (gmall)>select from_unixtime(1618444800,'yyyy-MM-dd');
            2021-04-15
        hive (gmall)>select from_unixtime(1618444800,'yyyyMMdd');
            20210415
    7) datediff 求取两个日期之间差 分组后可以使用一进一出的函数,要求入参是常量或者分组字段
        select datediff('2020-06-15','2020-06-13')
    8).add_months 月份添加
        例子: 获取当前时间的上个月月初+月末
            select unix_timestamp('202106','yyyyMM');
            -- 1622476800

            select from_unixtime(unix_timestamp('202106','yyyyMM'),'yyyy-MM-dd HH:mm:ss');
            -- 2021-06-01 00:00:00

            select add_months(from_unixtime(unix_timestamp('202106','yyyyMM'),'yyyy-MM-dd HH:mm:ss'),-1);
            -- 2021-05-01

            SELECT last_day(from_unixtime(unix_timestamp('202106','yyyyMM'),'yyyy-MM-dd HH:mm:ss'));
            -- 2021-06-30

            select add_months(last_day(from_unixtime(unix_timestamp('202106','yyyyMM'),'yyyy-MM-dd HH:mm:ss')),-1);
            -- 2021-05-31

 

标签:tmp,常用,06,函数,gmall,hive,2020,Hive,select
来源: https://www.cnblogs.com/dduo/p/14945029.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有