• hive 常用函数


    一、时间函数

    1、date_format:格式化时间

     select date_format('2021-05-20','yyyyMMdd') yyyymmdd

      注意写法:date_format('2021-05-20','yyyyMMdd') dd 小写 MM 大写


    2、日期加减
    select '2021-05-20'               d,
           date_sub('2021-05-20', 1)  d_1,
           date_sub('2021-05-20', -1) d_2,
           date_add('2021-05-20', 1)  d_3,
           date_add('2021-05-20', -1) d_4

    date_sub 和 date_add 用法一样,注意传参即可;

     3、datediff:两个时间相减

     select datediff('2019-06-29','2019-06-24')

      4、last_day 取最后一天

    select date_format(last_day(from_unixtime(unix_timestamp('202002', 'yyyyMM'))), 'yyyMMdd');

      5、add_months 月份

    select date_format(add_months(to_date(from_unixtime(unix_timestamp('202009', 'yyyyMM'))), 1), 'yyyyMM');

      6、months_between 月份差值

    select
     months_between(to_date(from_unixtime(unix_timestamp('202105', 'yyyyMM'))),
        from_unixtime(unix_timestamp('202101', 'yyyyMM'))) months_

      7、next_day函数

    select next_day('2021-05-18','MO') ,next_day('2021-05-18','Tuesday');

     说明:星期一到星期日的英文(Monday,Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday)

    二、判断函数

    1、nvl(n1,n2)
    select nvl(null,1),nvl('pp',1);

      2 if 判断

    select if(2 >= 1, '2>1', '2<1');

      3、case when 

    select case when 2 >= 1 then '2>1' else '2<1' end;

      4 Coalesce 

    Coalesce可以对多个值进行判空校验,只会返回第一个不为空的值,当所有参数都为null时,返回null

    select Coalesce(null,null,'令狐少侠','依琳');

     三、字符串

    select concat('北京', '欢迎', '')        c1,
           concat('北京', '欢迎', null)       c2,
           concat_ws('-', '欢迎', '')      c3,
           concat_ws('', '欢迎', '', null) c4,
           '欢迎' || null                   c5
    
    

      说明 当使用 concat 或 || 拼接字符串,参数为null 时 返回 null ;

    str_to_map
     select str_to_map('1001=2020-06-14,1002=2020-06-14', ',', '=')

      四 列转行

    select tag_info from tag_info where province_code='10'

      要把数据列式展示

    select tag_info
    from (select substr(substr(regexp_replace(tag_info, '\|', '\,'), 2), 1,
                        length(substr(regexp_replace(tag_info, '\|', '\,'), 2)) - 1) tag_info_1
          from tag_info
          where province_code = '10') a
             lateral view explode(split(tag_info_1, ',')) b as tag_info;

    hive> select * from xajh;
    OK
    xajh.name       xajh.dept       xajh.sex
    令狐冲  华山    男
    任盈盈  日月神  女
    风清扬  华山    男
    宁中则  华山    女
    任我    日月神  男
    东方不败        日月神  男
    方正    少林    男
    方生    少林    男
    余沧海  青城    男
    依林    衡山    女
    依玉    衡山    女
    定静    衡山    女
    田伯光  衡山    男
    余人杰  青城    男
    岳灵珊  华山    女
    select dept_sex,concat_ws(' - - ',collect_set(name))
    from (select concat(dept, ' , ', sex) dept_sex, name from xajh) t1
    group by dept_sex;
    ept_sex        _c1
    华山 , 女       宁中则 - - 岳灵珊
    华山 , 男       令狐冲 - - 风清扬
    少林 , 男       方正 - - 方生
    日月神 , 女     任盈盈
    日月神 , 男     任我 - - 东方不败
    衡山 , 女       依林 - - 依玉 - - 定静
    衡山 , 男       田伯光
    青城 , 男       余沧海 - - 余人杰
    hive> select * from movie_info;
    OK
    movie_info.movie        movie_info.category
    《疑犯追踪》    ["悬疑","动作","科幻","剧情"]
    《Lie to me》   ["悬疑","警匪","动作","心理","剧情"]
    《战狼 2["战争","动作","灾难"]
    Time taken: 0.081 seconds, Fetched: 3 row(s)
    hive> desc movie_info;
    OK
    col_name        data_type       comment
    movie                   string                                      
    category                array<string>                               
    Time taken: 0.157 seconds, Fetched: 2 row(s)
    hive> select explode(category) from movie_info;
    OK
    col
    悬疑
    动作
    科幻
    剧情
    悬疑
    警匪
    动作
    心理
    剧情
    战争
    动作
    灾难
    hive> select movie, category_name  from movie_info lateral view explode(category) table_tmp as category_name;
    OK
    movie   category_name
    《疑犯追踪》    悬疑
    《疑犯追踪》    动作
    《疑犯追踪》    科幻
    《疑犯追踪》    剧情
    《Lie to me》   悬疑
    《Lie to me》   警匪
    《Lie to me》   动作
    《Lie to me》   心理
    《Lie to me》   剧情
    《战狼 2》      战争
    《战狼 2》      动作
    《战狼 2》      灾难

     数字处理

    select round(ceiling(751/60) *0.1,2), round(ceiling(30/6) *0.03,2), round(ceiling(161/6) *0.03,2)

    ceiling() 向上取整
    round() 小数四舍五入


  • 相关阅读:
    实验一
    MVVM Light Toolkit 学习
    配置mongodb分片群集(sharding cluster)
    【silverlight】web发布方法
    MongoDb数据库设计
    【解决方案】添加web服务失败:下载“http://localhost:2540/Service.asmx”时出错。无法生成***类型
    Codeforces #380 div2 C(729C) Road to Cinema
    Codeforces #380 div2 B(729B) Spotlights
    数据挖掘项目总结
    南方电网用电时间序列分析
  • 原文地址:https://www.cnblogs.com/wdh01/p/14782966.html
Copyright © 2020-2023  润新知