当前位置:   article > 正文

Hive常用函数_hive取整数函数

hive取整数函数

1.书写顺序

  1. -select
  2. -from
  3. -join
  4. -on
  5. -where
  6. -group by
  7. -having
  8. -order by
  9. -limit

2.执行顺序

  1. - from
  2. - where
  3. - join
  4. - on
  5. - group by
  6. - select
  7. - having
  8. - distinct
  9. - order by
  10. - limit
  11. - union / union on

3.Hive关系运算符[常用]

!=不等于
<> 不等于
==等等于
=等于
+
-
*
/
>=大于等于
<=小于等于

4.数学函数[常用]

4.1 取整函数: round

  1. select round(11.214563);
  2. 返回 11
  3. --四舍五入取整数部分
  4. 2. 指定精度取整函数: round
  5. round(double a, int b)
  6. 示例:
  7. select round(11.256,2); -- 11.26

4.2 向下取整函数: floor

  1. SELECT floor(10.954) ;
  2. 返回 10

4.3 向上取整 ceil / ceiling

  1. select ceil(12.006); / select ceiling(12.006);
  2. 返回 13

4.4 取随机数函数: rand

  1. 语法: rand(),rand(int seed)
  2. 返回值: double
  3. 说明:返回一个double01范围内的随机数。如果指定种子seed,则会等到一个稳定的随机数序列
  4. select rand();
  5. 返回: 0.7400880291262728
  6. -- 指定种子 返回的结果一样
  7. select rand(50);
  8. 0.7297136425657874
  9. select rand(50);
  10. 0.7297136425657874

4.5 幂运算函数: pow

  1. 语法: pow(double a, double p), power(double a, double p)
  2. 返回值: double
  3. 说明:返回a的p次方
  4. select pow(2,5);
  5. 返回 32.0

4.6 开平方函数: sqrt

  1. 语法: sqrt(double x)
  2. 返回值: double
  3. 说明:返回x的平方根
  4. select sqrt(4);
  5. 返回 2.0

4.7  二进制函数: bin

  1. 语法: bin(BIGINT x)
  2. 返回值: string
  3. 说明:返回x的二进制字符串
  4. select bin(4);
  5. 返回 100

4.8 绝对值函数: abs

  1. 语法: abs(double x),abs(int x)
  2. 返回值: double OR int
  3. 说明:返回数值x的绝对值
  4. select abs(-2.0);
  5. 返回 2

4.9 判断正负函数:sign

  1. 语法: sign(double a)
  2. 返回值: double
  3. 说明:如果a是正数则返回1.0,是负数则返回-1.0,否则返回0.0
  4. select sign(10);
  5. 返回 1.0
  6. select sign(-10.0);
  7. 返回 -1.0
  8. select sign(0);
  9. 返回 0.0

 4.10 相反数函数negative

  1. 语法: negative(int x), negative(double x)
  2. 返回值: int or double
  3. 说明:返回-x or x的相反数
  4. select negative(-5);
  5. 返回 5
  6. select negative(5);
  7. 返回 -5

4.11 数学pi函数:pi

  1. 语法: pi()
  2. 返回值: double
  3. 说明:数学常数π
  4. select pi();
  5. 返回 3.141592653589793

4.12 求N个数最大值函数:greatest

  1. 语法:greatest(T v1, T v2, …) N个数的最大值
  2. 返回值:T
  3. 说明:求最大值
  4. select greatest(1,2,3);
  5. 返回 3

4.13 求N个数最小值函数:least

  1. 语法:least(T v1, T v2, …)
  2. 返回值:T
  3. 说明:求最小值
  4. select least(1,2,3);
  5. 返回 1

4.14 银行家舍入法函数:bround

  1. 语法:bround(double a)
  2. 返回值:double
  3. 说明:银行家舍入法 四舍六入五成双
  4. select bround(5.5)
  5. 返回 6
  6. select bround(4.5)
  7. 返回 4

五.日期函数

5.1  UNIX时间戳转日期函数:from_unixtime

  1. 语法: from_unixtime(bigint unixtime, [string format])
  2. 返回值: string
  3. 说明: format格式可以是 “yyyy-MM-dd hh:mm:ss”,“yyyy-MM-dd hh”,“yyyy-MM-dd hh:mm”等
  4. select from_unixtime(1634000000,'yyyy-MM-dd');
  5. 返回 2021-10-12
  6. select from_unixtime(1634000000,'yyyy-MM-dd HH:mm:ss')
  7. 返回 2021-10-12 00:53:20

5.2  获取当前UNIX时间戳函数:unix_timestamp

  1. 语法: unix_timestamp()
  2. 返回值: bigint
  3. 说明:获得当前时区的UNIX时间戳
  4. select unix_timestamp();
  5. 返回 1633679199
  6. SELECT from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:dd');
  7. 返回 2021-10-08 15:48:10

5.3  日期转UNIX时间戳函数:unix_timestamp

  1. 语法: unix_timestamp(string date)
  2. 返回值: bigint
  3. 说明:只能将格式为'yyyy-MM-dd HH:mm:ss'的时间字符串转换成时间戳。如果转化失败,则返回0
  4. SELECT unix_timestamp('2021-10-08 15:50:00');
  5. 返回 1633708200
  6. SELECT unix_timestamp('2021-10-08');
  7. 返回 0


5.4  指定日期格式 转UNIX时间戳函数:unix_timestamp

  1. 语法: unix_timestamp(string date, string pattern)
  2. 返回值: bigint
  3. 说明:将指定时间字符串格式字符串转换成Unix时间戳。如果转化失败,则返回0
  4. select unix_timestamp('2021-10-08','yyyy-MM-dd');
  5. 返回 1633651200


5.5  日期时间转日期函数:to_date

  1. 语法: to_date(string timestamp)
  2. 返回值: string
  3. 说明:返回日期时间字段中的日期部分
  4. select to_date('2021-10-08 15:00:00');
  5. 返回 2021-10-08

5.6  日期转年函数: year

  1. 语法: year(string date)
  2. 返回值: int
  3. 说明:返回日期时间字段中的年
  4. select year('2021-10-08 15:00:00');
  5. select year('2021-10-08');
  6. 返回 2021

5.7  日期转月函数: month

  1. 语法: month(string date)
  2. 返回值: int
  3. 说明:返回日期时间字段中的月份
  4. select month('2021-10-08 15:00:00');
  5. select month('2021-10-08');
  6. 返回 10

5.8  日期转天函数: day

  1. 语法: day(string date)
  2. 返回值: int
  3. 说明:返回日期时间字段中的日期
  4. select day('2021-10-08 15:00:00');
  5. select day('2021-10-08');
  6. 返回 8

5.9  日期转小时函数: hour

  1. 语法: hour(string date)
  2. 返回值: int
  3. 说明:返回日期时间字段中的日期,注意格式错误则返回0
  4. select hour('2021-10-08 15:00:00');
  5. 返回 15
  6. select hour('2021-10-08');
  7. 返回 0

5.10 日期转分钟函数: minute

  1. 10. 日期转分钟函数: minute
  2. 语法: minute (string date)
  3. 返回值: int
  4. 说明:返回日期中的分钟。
  5. select minute('2021-10-08 15:10:00');
  6. 返回 10

5.11 日期转秒函数: second

  1. 语法: second (string date)
  2. 返回值: int
  3. 说明:返回日期中的秒。
  4. select second(‘2011-12-08 10:03:01’);
  5. 返回 1

5.12 日期转周函数:weekofyear

  1. 语法: weekofyear (string date)
  2. 返回值: int
  3. 说明:返回时间字符串位于一年中的第几个周
  4. select weekofyear('2021-10-08 15:00:00');
  5. 返回 40

5.13 日期比较函数: datediff

  1. 语法: datediff(string enddate, string startdate)
  2. 返回值: int
  3. 说明:返回结束日期减去开始日期的天数。
  4. select datediff('2021-10-08','2021-10-01');
  5. 返回 7

5.14 日期增加函数: date_add

  1. 语法: date_add(string startdate, int days)
  2. 返回值: string
  3. 说明:返回开始日期startdate增加days天后的日期。
  4. select date_add(2021-10-01,7);
  5. 返回 2021-10-08

5.15 日期减少函数: date_sub

  1. 语法: date_sub(string startdate, int days)
  2. 返回值: string
  3. 说明: 返回开始日期startdate减少days天后的日期。
  4. select date_sub('2021-10-08',8);
  5. 返回 2021-10-01

5.16 当前时间日期函数:current_date

  1. 语法:current_date()
  2. 返回值:date
  3. 说明:返回当前时间日期
  4. select current_date();
  5. 返回 2021-10-08

5.17 当前时间日期函数:current_timestamp

  1. 语法:current_timestamp()
  2. 返回值:timestamp
  3. 说明:返回当前时间戳
  4. select current_timestamp();
  5. select last_day(current_timestamp());
  6. 返回 2021-10-08 12:25:22.339

5.18 月份增加函数:add_months

  1. 语法:add_months(string start_date, int num_months)
  2. 返回值:string
  3. 说明:返回当前时间下再增加num_months个月的日期
  4. select add_months(‘2021-10-08’,2);
  5. 2021-12-08

5.19 最后一天的日期函数:last_day

  1. 语法:last_day(string date)
  2. 返回值:string
  3. 说明:返回这个月的最后一天的日期,忽略时分秒部分(HH:mm:ss)
  4. select last_day(current_date());
  5. select last_day(current_timestamp()); -- 忽略时分秒部分(HH:mm:ss)
  6. 返回 2021-10-31

5.20 下一个星期X所对应的日期函数:next_day

  1. 语法:next_day(string start_date, string day_of_week)
  2. 返回值:string
  3. 说明:返回当前时间的下一个星期X所对应的日期 如:next_day(‘2015-01-14’, ‘TU’)
  4. = 2015-01-202015-01-14为开始时间,其下一个星期二所对应的日期为2015-01-20
  5. select next_day(current_date(),'su');
  6. 2021-10-10

5.21 指定格式返回时间函数:date_format

  1. 语法:date_format(date/timestamp/string ts, string fmt)
  2. 返回值:string
  3. 说明:按指定格式返回时间date 如:date_format(“2016-06-22”,“MM-dd”)=06-22
  4. select date_format(current_date(),'MM-dd');
  5. 返回 10-08

5.22 当前星期函数:dayofweek

  1. 语法:dayofweek(date)
  2. 返回值:int
  3. 说明:返回日期那天的周几
  4. select dayofweek(current_date());
  5. 返回 6

 六、条件函数

6.1 If函数: if

  1. 语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
  2. 返回值: T
  3. 说明: 当条件testCondition为TRUE时,返回valueTrue;
  4. 否则返回valueFalseOrNull(valueTrue,valueFalseOrNull为泛型)
  5. 类似于三元表达式
  6. select if(10>5,1,0);
  7. 返回 1
  8. select if(10<5,1,0);
  9. 返回 0

6.2 空查找函数: nvl

  1. 语法: nvl(T value, T default_value)
  2. 返回值: T
  3. 说明:如果value值为NULL就返回default_value,否则返回value
  4. select nvl(null,1);
  5. 返回 1
  6. select nvl(2,1);
  7. 返回 2
  8. 注意: select nvl('',1); 返回 ''

6.3 非空查找函数: COALESCE

  1. 语法: COALESCE(T v1, T v2,…)
  2. 返回值: T
  3. 说明: 返回参数中的第一个非空值;如果所有值都为NULL,那么返回NULL
  4. select coalesce(1,2,null,...);
  5. 返回 1
  6. select coalesce(null,null,2,...);
  7. 返回 2
  8. select coalesce(null,null,null,...);
  9. 返回 null

6.4 条件判断函数:CASE

  1. 语法: CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END
  2. 返回值: T
  3. 说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f
  4. select CASE 4 WHEN 5 THEN 5 WHEN 4 THEN 4 ELSE 3 END;
  5. 返回 4

6.5 条件判断函数:CASE

  1. 语法: CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END
  2. 返回值: T
  3. 说明:如果a为TRUE,则返回b;如果c为TRUE,则返回d;否则返回e
  4. select
  5. case
  6. when a > 10 and a < 20 then '10-19岁'
  7. when a >= 20 and a < 30 then '20-30岁'
  8. else '30岁以上'
  9. end as '年龄段'

6.6 空值判断函数:isnull

  1. 语法: isnull( a )
  2. 返回值:boolean
  3. 说明:如果a为null就返回true,否则返回false
  4. select isnull(5);
  5. 返回 false
  6. select isnull(null);
  7. 返回 true
  8. select * from ads_class
  9. where classid is null;
  10. 返回满足条件的结果

6.7 非空值判断函数:isnotnull

  1. 语法: isnotnull ( a )
  2. 返回值:boolean
  3. 说明:如果a为非null就返回true,否则返回false
  4. select isnotnull(5);
  5. 返回 true
  6. select * from ads_class
  7. where classid is not null;
  8. 返回满足条件的结果

七、聚合函数 [一般会和分组函数或开窗函数使用]

不统计null值
7.1  个数统计函数: count

  1. 语法:count(*), count(expr), count(DISTINCT expr[, expr…])
  2. 返回值: BIGINT
  3. 说明: count(*)统计检索出的行的个数,包括NULL值的行;
  4. count(expr)返回指定字段的非空值的个数;
  5. count(DISTINCTexpr[, expr_.])统计提供非NULL且去重后的expr表达式值的行数
  6. select count(1) from tb_class;
  7. 通常和分组函数一起使用

7.2  总和统计函数: sum

  1. 2. 总和统计函数: sum
  2. 语法: sum(col), sum(DISTINCT col)
  3. 返回值: double
  4. 说明: sum(col)统计结果集中col的相加的结果;sum(DISTINCT col)统计结果中col不同值相加的结果
  5. select sum(money) from order

 7.3  平均值统计函数: avg

  1. 语法: avg(col), avg(DISTINCT col)
  2. 返回值: double
  3. 说明: avg(col)统计结果集中col的平均值;avg(DISTINCT col)统计结果中col不同值相加的平均值


7.4  最小值统计函数: min

  1. 语法: min(col)
  2. 返回值: double
  3. 说明:统计结果集中col字段的最小值


7.5  最大值统计函数: max

  1. 语法: maxcol)
  2. 返回值: double
  3. 说明:统计结果集中col字段的最大值


 

 八、分组函数

classnameageevent_daygongzi
1张三152021-05-01100
2李四142021-05-03200
3王五132021-05-05100
1赵六152021-04-30200
2张三172021-06-01300
  1. group by的意思是根据by对数据按照哪个字段进行分组,或者是哪几个字段进行分组。
  2. 语法: group by 后边跟分组字段,多个字段可以用逗号隔开
  3. select 字段 from 表名 where 条件 group by 字段
  4. 或者
  5. select 字段 from 表名 group by 字段 having 过滤条件
  6. 注意:对于过滤条件,可以先用where,再用group by或者是先用group by,再用having
  7. group by 后不能出现where函数,因为 where 先制行

 8.1 举例:

  1. 单个字段进行分组
  2. select class, count(1) as cnt
  3. from tb_class
  4. group by class -- 注意select 后不能出现没有参与分组的字段
  5. 多个字段分组[每个班级相同人名的人数]
  6. select class,name,count(1) as cnt
  7. from tb_class
  8. group by class,name

8.2 常和聚合函数一起使用 count() , sum() , avg() , max() , min()

  1. 1. count() --每个班级的人数
  2. select class,count(1) as cnt from tb_class group by class;
  3. 注意: 如果count(distinct 字段) 效率较低,如果数据量很大时,不建议使用
  4. [因为使用count(distinct)语法聚合时reduce会变成一个来完成聚合]
  5. 可以使用 group by 加 count 来代替完成
  6. 2.sum() -- 每个班级的工资总和
  7. select class,sum(gongzi) as total_gongzi from tb_class group by class;
  8. 3.avg() --每个班级的平均年龄
  9. select class, avg(age) from tb_class group by class;
  10. 4.max() --每个班级年龄的最大值
  11. select class, max(age) from tb_class group by class;
  12. 5.min() --每个班级年龄的最小值
  13. select class, min(age) from tb_class group by class;
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号