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 |
+---------------------+
相关推荐
IvorySQL20 分钟前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
深圳市恒星物联科技有限公司27 分钟前
水质流量监测仪:复合指标监测的管网智能感知设备
大数据·网络·人工智能
·云扬·30 分钟前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德33 分钟前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫1 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
是做服装的同学1 小时前
如何选择适合的服装企业ERP系统才能提升业务效率?
大数据·经验分享·其他
不爱缺氧i1 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.1 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn1 小时前
【Redis】渐进式遍历
数据库·redis·缓存