hive常用函数

MONTH: MONTH函数是一个用于提取日期中的月份的函数。它接受一个日期作为参数,并返回一个整数值,表示该日期的月份。月份从1开始计数(即1表示一月),到12结束(即12表示十二月)。SELECT * FROM orders WHERE month(order_date) = 3;

YEAR: YEAR函数来提取日期中的年份;SELECT * FROM orders WHERE year(order_date) = 2023;

DAY: DAY将返回所有日期中的天数 SELECT * FROM orders WHERE day(order_date) = 17;

HOUR(date) : 返回日期的小时部分。

RANK(): 排序相同时会重复,总数不会变

DENSE_RANK(): 排序相同时会重复,总数会减少

ROW_NUMBER(): 会根据顺序计算

SUBSTRING:SUBSTRING函数是用于从字符串中提取子字符串的函数。它接受三个参数:待提取子字符串的字符串、子字符串的起始位置和要提取的长度。如果只提供两个参数,则第二个参数将被视为起始位置,而长度将默认为从起始位置到字符串的末尾。

窗口函数OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化.

行转列

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;

CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;

COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

COLLECT_LIST(col) : 不去除重复.

COUNT(*) 和count(1)有区别吗?

COUNT(*)会计算表中的总行数,并返回该值。如果表中有100行数据,COUNT()将返回100。 

COUNT(1)也会计算表中的行数,并返回该值。但是,它实际上是在计算一个固定值1的行数,而不是计算所有行的数量。

case  when : CASE函数用于执行条件逻辑,它根据给定的条件表达式返回不同的结果。

SELECT name, age,   
    CASE   
        WHEN age < 18 THEN 'Child'  
        WHEN age >= 18 AND age < 60 THEN 'Adult'  
        ELSE 'Senior'  
    END AS age_group  
FROM users;

sum 与case when结合使用

select
ispname,
ispid,
sum(case when requestmode = 1 and processnode >=1 then 1 else 0 end) as a ,
sum(case when requestmode = 1 and processnode >=2 then 1  else 0 end) as b,
sum(case when requestmode = 1 and processnode =3 then 1 else 0 end) as c,
sum (case when adplatformproviderid>=100000 and iseffective = 1 and isbilling=1 and isbid=1 and adorderid !=0 then 1 else 0 end) cyjjs,
sum (case when adplatformproviderid>=100000 and iseffective = 1 and isbilling=1 and iswin =1  then 1 else 0  end) jjcgs,
sum(case when requestmode =2 and iseffective =1 then 1 else 0 end )as zss,
sum(case when requestmode =3 and iseffective =1 then 1 else 0 end )as djs,
sum(case when requestmode =2 and iseffective =1 and isbilling = 1 then 1 else 0 end )as mjzss,
sum(case when requestmode =3 and iseffective =1 and isbilling = 1 then 1 else 0 end )as mjdjs,
sum(case when iseffective =1 and isbilling = 1 and iswin =1  then (winprice*1.0)/1000 else 0 end )as xiaofei,
sum(case when iseffective =1 and isbilling = 1 and iswin =1  then (adpayment*1.0)/1000 else 0 end )as chengben
from log
group by
ispid, ispname

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值