当前位置: 首页 > news >正文

Hive数仓操作(十一)

一、Hive 日期函数

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

1. 获取当前时间

获取包含毫秒的当前时间

SELECT current_timestamp();

示例结果

2024-10-01 12:34:56.789

获取当前日期

SELECT current_date();

示例结果

2024-10-01

2. Unix 时间戳处理

获取当前 Unix 时间戳

SELECT unix_timestamp();

示例结果

1727801696

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

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

SELECT from_unixtime(1727801696);

示例结果

2024-10-01 12:34:56

3. 日期计算

日期加减天数

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

SELECT date_add(current_date(), 2);

示例结果

2024-10-03

日期加减月份

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

SELECT add_months(current_date(), 1);

示例结果

2024-11-01

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

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

SELECT last_day(current_date());

示例结果

2024-10-31

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

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

SELECT next_day(current_date(), 'MO');

示例结果

2024-10-07

5. 日期差计算

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

SELECT datediff(current_date(), to_date('2020-10-08'));

示例结果

1454

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

SELECT months_between(current_timestamp(), to_date('2022-10-08'));

示例结果

24.97

6. 日期格式转换

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

SELECT unix_timestamp('2008-08-08', 'yyyy-MM-dd');

示例结果

1218144000

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

获取日期中的年、月、日

SELECT year(current_date()), month(current_date()), day(current_date());

示例结果

2024    10    1

二、Hive 条件函数

1. IF 函数

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

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 函数用来根据条件进行分支判断,打标签,并结合聚合函数进行统计,然后以列的方式显示结果。

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, ...) 返回参数里第一个不为空的值。

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。

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 是一样的。

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 数组类型转换函数

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

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 类型。

SELECT str_to_map('name:zhangsan,age:20', ',', ':') as info_map;

示例结果

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

3. CAST 强制类型转换函数

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

SELECT from_unixtime(CAST('1652271247' AS bigint)) as datetime;

示例结果

+---------------------+
|      datetime       |
+---------------------+
| 2022-05-11 03:34:07 |
+---------------------+
http://www.lryc.cn/news/455451.html

相关文章:

  • C语言初步介绍(初学者,大学生)【上】
  • 陈文自媒体:现在的房价,已经跌到7年前!
  • 基于STM32的智能水族箱控制系统设计
  • java语言基础案例-cnblog
  • MyBatis-Plus 之 typeHandler 的使用
  • HDLBits中文版,标准参考答案 |2.5 More Verilog Features | 更多Verilog 要点
  • 提升开机速度:有效管理Windows电脑自启动项,打开、关闭自启动项教程分享
  • 数据库简单介绍
  • 运用MinIO技术服务器实现文件上传——利用程序上传图片(二 )
  • C语言 | Leetcode C语言题解之第461题汉明距离
  • Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
  • 软件设计师(软考学习)
  • 第一讲:Go语言开发入门:环境搭建与基础语法
  • Linux CentOS stream9配置本地yum源
  • std::string
  • 【Docker】03-自制镜像
  • Java GC 分类,8和9使用的哪种?
  • 【Docker从入门到进阶】01.介绍 02.基础使用
  • GraphRAG-Local-UI - 基于 GraphRAG 支持本地的聊天UI
  • Java 根据字符生成背景透明的图片
  • 树莓派3b安装ubuntu18.04服务器系统server配置网线连接
  • 【AIGC】2022-NIPS-视频扩散模型
  • 从零开始构建:Python自定义脚本自动化你的日常任务
  • 【python实操】python小程序之对象的属性操作
  • HCIP——网络类型及数据链路层协议
  • 数据结构——栈与队列的实现(全码)
  • MacOS编译和安装Poco库的方法
  • 医院管理新境界:Spring Boot技术突破
  • Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控
  • 渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解