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 |
+---------------------+
相关推荐
soso196828 分钟前
DataWorks快速入门
大数据·数据仓库·信息可视化
The_Ticker34 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
java1234_小锋39 分钟前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客40 分钟前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生40 分钟前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
企鹅侠客44 分钟前
ETCD调优
数据库·etcd
Json_181790144801 小时前
电商拍立淘按图搜索API接口系列,文档说明参考
前端·数据库
大数据编程之光1 小时前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
B站计算机毕业设计超人1 小时前
计算机毕业设计SparkStreaming+Kafka旅游推荐系统 旅游景点客流量预测 旅游可视化 旅游大数据 Hive数据仓库 机器学习 深度学习
大数据·数据仓库·hadoop·python·kafka·课程设计·数据可视化
煎饼小狗1 小时前
Redis五大基本类型——Zset有序集合命令详解(命令用法详解+思维导图详解)
数据库·redis·缓存