Hive数仓操作(十一)

一、Hive 日期函数

在日常的数据处理工作中,日期和时间的处理是非常常见的操作。Hive 提供了丰富的日期函数,能够帮助我们方便地进行日期和时间的计算。本文将详细介绍 Hive 中常用的日期函数,并通过具体的示例展示其用法和结果。

1. 获取当前时间

获取包含毫秒的当前时间

sql 复制代码
SELECT current_timestamp();

示例结果

2024-10-01 12:34:56.789

获取当前日期

sql 复制代码
SELECT current_date();

示例结果

2024-10-01

2. Unix 时间戳处理

获取当前 Unix 时间戳

sql 复制代码
SELECT unix_timestamp();

示例结果

1727801696

解释:Unix 时间戳是自1970年1月1日(UTC)以来的秒数

将 Unix 时间戳转换为日期时间

sql 复制代码
SELECT from_unixtime(1727801696);

示例结果

2024-10-01 12:34:56

3. 日期计算

日期加减天数

在指定的日期上增加或减少天数。

sql 复制代码
SELECT date_add(current_date(), 2);

示例结果

2024-10-03

日期加减月份

在指定的日期上增加或减少月份。

sql 复制代码
SELECT add_months(current_date(), 1);

示例结果

2024-11-01

4. 获取指定日期的特殊日期

获取指定日期所在月份的最后一天

sql 复制代码
SELECT last_day(current_date());

示例结果

2024-10-31

获取指定日期的下一个星期几

第二个参数决定了返回的星期几,例如 'MO' 表示星期一。

sql 复制代码
SELECT next_day(current_date(), 'MO');

示例结果

2024-10-07

5. 日期差计算

计算两个日期之间相差的天数

sql 复制代码
SELECT datediff(current_date(), to_date('2020-10-08'));

示例结果

1454

计算两个日期之间相差的月数

sql 复制代码
SELECT months_between(current_timestamp(), to_date('2022-10-08'));

示例结果

24.97

6. 日期格式转换

将字符串类型的日期转换为时间戳

sql 复制代码
SELECT unix_timestamp('2008-08-08', 'yyyy-MM-dd');

示例结果

1218144000

7. 提取日期中的年、月、日

获取日期中的年、月、日

sql 复制代码
SELECT year(current_date()), month(current_date()), day(current_date());

示例结果

2024    10    1

二、Hive 条件函数

1. IF 函数

if(判断条件, x, y):当判断条件成立时,返回 x,否则返回 y。

sql 复制代码
SELECT ename, sal, if(sal > 2500, 'great than 2500', 'less equers 2500') FROM emp;

示例结果

+-------+------+-------------------+
| ename | sal  |      result       |
+-------+------+-------------------+
| John  | 3000 | great than 2500   |
| Jane  | 2000 | less equers 2500  |
+-------+------+-------------------+

2. CASE WHEN 函数

CASE WHEN 函数用来根据条件进行分支判断,打标签,并结合聚合函数进行统计,然后以列的方式显示结果。

sql 复制代码
SELECT ename, sal,
CASE 
  WHEN sal <= 1000 THEN 'A 级'
  WHEN sal <= 2000 THEN 'B 级'
  WHEN sal <= 3000 THEN 'C 级'
  WHEN sal <= 4000 THEN 'D 级'
  ELSE 'E 级'
END as grade
FROM emp;

示例结果

+-------+------+-------+
| ename | sal  | grade |
+-------+------+-------+
| John  | 3000 | C 级  |
| Jane  | 2000 | B 级  |
+-------+------+-------+

三、Hive 空值处理函数

1. COALESCE 函数

coalesce(a, b, c, ...) 返回参数里第一个不为空的值。

sql 复制代码
SELECT ename, coalesce(comm, 0) as comm FROM emp;

示例结果( Jane的comm为空值 )

+-------+------+
| ename | comm |
+-------+------+
| John  |  500 |
| Jane  |    0 |
+-------+------+

2. NVL 函数

NVL(x, y) 如果 x 不为 NULL,就返回 x,否则返回 y。

sql 复制代码
SELECT ename, nvl(comm, 0) as comm FROM emp;

示例结果( Jane的comm为空值 )

+-------+------+
| ename | comm |
+-------+------+
| John  |  500 |
| Jane  |    0 |
+-------+------+

四、聚合函数

常用的聚合函数有 MAX、SUM、COUNT、MIN、AVG 以及 GROUP BY 和 HAVING 的用法和 Mysql、Oracle 是一样的。

sql 复制代码
SELECT COUNT(1), MAX(sal), MIN(sal), AVG(sal), SUM(sal) FROM emp;

示例结果

+---------+----------+----------+----------+----------+
| count(1)| max(sal) | min(sal) | avg(sal) | sum(sal) |
+---------+----------+----------+----------+----------+
|       2 |     3000 |     2000 |    2500  |     5000 |
+---------+----------+----------+----------+----------+

五、类型转换函数

1. array 数组类型转换函数

将不同的元素拼接成一个数组。

sql 复制代码
SELECT array(1, 2, 3) as num_array, array('a', 'b', 'c') as char_array;

示例结果

+-----------+-------------+
| num_array | char_array  |
+-----------+-------------+
| [1,2,3]   | ['a','b','c']|
+-----------+-------------+

2. str_to_map map类型转换函数

将字符串参数转换成一个 map 类型。

sql 复制代码
SELECT str_to_map('name:zhangsan,age:20', ',', ':') as info_map;

示例结果

+-------------------------------+
|           info_map            |
+-------------------------------+
| {"name":"zhangsan","age":"20"}|
+-------------------------------+
语法:
sql 复制代码
str_to_map(text, x, y)
  • text:包含键值对信息的字符串。
  • x:键值对之间的分隔符。
  • y:键和值之间的分隔符。

3. CAST 强制类型转换函数

CAST(x AS 类型) 强制类型转换。

sql 复制代码
SELECT from_unixtime(CAST('1652271247' AS bigint)) as datetime;

示例结果

+---------------------+
|      datetime       |
+---------------------+
| 2022-05-11 03:34:07 |
+---------------------+
相关推荐
woshilys21 分钟前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi22 分钟前
SQL注入的那些面试题总结
数据库·sql
建投数据1 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi2 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀2 小时前
Redis梳理
数据库·redis·缓存
独行soc2 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天3 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺3 小时前
分布式系统架构:服务容错
数据库·架构
Data跳动3 小时前
Spark内存都消耗在哪里了?
大数据·分布式·spark
独行soc4 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘