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