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 |
+---------------------+
相关推荐
小小娥子27 分钟前
Redis的基础认识与在ubuntu上的安装教程
java·数据库·redis·缓存
DieSnowK28 分钟前
[Redis][集群][下]详细讲解
数据库·redis·分布式·缓存·集群·高可用·新手向
-XWB-1 小时前
【MySQL】数据目录迁移
数据库·mysql
老华带你飞1 小时前
公寓管理系统|SprinBoot+vue夕阳红公寓管理系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·课程设计
我明天再来学Web渗透1 小时前
【hot100-java】【二叉树的层序遍历】
java·开发语言·数据库·sql·算法·排序算法
BD_Marathon1 小时前
设置hive本地模式
数据仓库·hive·hadoop
吱吱鼠叔2 小时前
MATLAB数据文件读写:2.矩阵数据读取
数据库·matlab·矩阵
掘根2 小时前
【MySQL】Ubuntu环境下MySQL的安装与卸载
数据库·mysql·centos