2023.11.15 hive sql之函数标准,字符串,日期,数学函数

news/2024/5/20 1:56:14 标签: hive, sql, hadoop, json, 大数据, 数据仓库, hdfs

目录

一.函数分类标准

二.查看官方函数,与简单演示

三.3种类型函数演示

四.字符串函数

1.常见字符串函数

2.索引函数

 解析函数

五.日期函数 

 1.获取当前时间

 2.获取日期相关

 3.周,季度等计算

4.时间戳 

六.数学函数


一.函数分类标准

目前hive三大标准
UDF:(User-Defined-Function)普通函数:  特点是一进一出(输入一行数据输出一行数据)        举例: split
UDAF:(User-Defined Aggregation Function)聚合函数: 特点是多进一出(输入多行输出一行)   举例: count sum max  min  avg
UDTF:(User-Defined Table-Generating Functions)表生成函数:  特点是一进多出(输入一行输出多行)   举例: explode

二.查看官方函数,与简单演示

sql">-- 创建数据库
create database hive5;

-- 使用库
use hive5;

-- 查看库扩展信息
describe database extended hive5;

-- 查看指定函数基本信息
desc function split;

-- 查看所有hive函数
show functions;
-- 289个


-- 查看函数扩展信息,并演示官方的函数示例
describe function extended split;
SELECT split('oneAtwoBthreeC', '[ABC]'); -- ["one","two","three",""]
describe function extended count;
describe function extended `current_timestamp`;


三.3种类型函数演示

普通函数(一进一出)

sql">-- 演示普通函数示例 (一进一出)
-- 查看指定函数详细扩展信息(有对应示例)
desc function extended split;
select split('one,two,three',',');

聚合函数(多进一出)

sql">-- 聚合函数(多进一出)
--select min|max|sum|count|avg(字段名) from 表名;

炸裂函数(一进多出)

sql">-- 演示炸裂函数示例(一进多出),关键字:explode 炸裂
-- 查看指定函数详细扩展信息(有对应示例)
desc function extended explode;

-- 已知array容器中"苹果","香蕉","西瓜","哈密瓜","火龙果","榴莲"要求炸开
select explode(`array`("苹果","香蕉","西瓜","哈密瓜","火龙果","榴莲"));
select explode(`array`("a","b","c","d","e","f"));
select explode(map('a',1,'b',2,'c',3));

四.字符串函数

1.常见字符串函数

sql">---------------------------------字符串函数---------------------------------------------

-- 演示字符串常见的函数
-- concat: 字符串紧凑拼接到一起生成新字符串
select concat('bbdwj','123','456');   --bbdwj123456

-- concat_ws: 字符串用指定分隔符拼接到一起生成新字符串
select concat_ws('-','bbdwj','123','456');  --bbdwj-123-456

-- length: 获取字符串长度
select length('bbdwj123456');  -- 11

-- lower: 把字符串中的字母全部变成小写
select lower('BAIBAIDEWJ');  --baibaidewj

-- upper: 把字符串中的字母全部变成大写
select upper('baibaidewj'); --BAIBAIDEWJ

-- trim: 把字符串两端的空白去除
select trim('   baibaideweijie  '); --baibaideweijie

-- split :从指定的字符串开始左右切割
select split('baiQbaiQdeQweiQjie','Q'); --["bai","bai","de","wei","jie"]

2.索引函数

sql">---------------------------------索引---------------------------------------------

-- substr(字符串,开始索引,截取长度): 截取字符串
-- 注意: 正索引从1开始正着数  负索引从-1开始负着数
select substr('b12345678cda',1,5);  --从1开始数,步长为5
select substr('b12345678cda',1);  -- 步长不写,默认到结尾
select substr('b12345678cda',-7);  -- 从负索引-7开始,正着往后走到最后

-- 已知'2023-05-21'要求分别截取年月日
select substr('2023-05-21',1,4); --2023
select substr('2023-05-21',6,2); -- 05
select substr('2023-05-21',9,2); -- 21
select substr(`current_date`(),1,7); --获取当前月份 2023-11 

-- replace(大字符串,敏感词,替换后的内容):替换字符串
select replace('我是bbdwj','我是','**'); -- **bbdwj

--正则表达式替换函数:regexp_replace(str, regexp, rep)
select regexp_replace('bbdwj-123','\\d+','您好');  --\d代表digit数字,用正则匹配到字符串然后替换

--正则表达式解析函数:regexp_extract(str, regexp[, idx])
-- 正则中()代表分组,自动从1开始生成编号,提取正则匹配到的指定组内容
select regexp_extract('bbdwj-123-789','(\\d+)-(\\d+)',1);--用正则匹配数字,后面1代表匹配到的第一个数字组是123
select regexp_extract('bbdwj-123-789','(\\d+)-(\\d+)',2);--用正则匹配数字,后面1代表匹配到的第一个数字组是789

 解析函数

sql">--URL解析函数:parse_url 注意要想一次解析出多个 可以使用parse_url_tuple这个UDTF函数
-- URL: 统一资源定位符 也就是咱们常说的网址   组成: 协议 主机地址:端口号 资源路径 查询参数

--快速从网址中获取需要的信息,host , path , query , user , pwd
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'HOST'); --www.itcast.cn
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'PATH'); --/path/binzi.html
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'QUERY');--user=binzi&pwd=123
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'QUERY', 'user');--binzi
select parse_url('http://www.itcast.cn/path/binzi.html?user=binzi&pwd=123', 'QUERY', 'pwd');--123

五.日期函数 

 1.获取当前时间

sql">-------------------------------------时间函数---------------------------------------------
-- 2.日期时间函数
-- 获取当前时间戳(时间原点到现在的秒/毫秒)
select unix_timestamp(); -- 1684639237
select current_timestamp(); -- 转换成现在的时间

-- 获取当前日期
select current_date(); -- 2023-05-21

-- 字符串格式时间戳转日期
select to_date('2023-05-21 11:19:31.222000000');
select to_date(current_timestamp());

 2.获取日期相关

sql">-- 依次获取年月日时分秒
select year(`current_date`()); --2023
select month(`current_date`()); -- 11
select day(`current_date`());  --15

select hour(`current_timestamp`()); --11
select minute(`current_timestamp`()); --4
select second(`current_timestamp`()); --32


-- 计算时间差
select datediff('2024-07-24','2023-07-24'); -- 新的时间在前,旧的在后 366

-- 获取明天的日期
select date_add(current_timestamp(),1); --获取明天的日期
select date_sub(current_timestamp(),-1); --获取明天的日期

-- 获取昨天的日期
select date_sub(current_timestamp(),1);-- 获取昨天的日期
select date_add(current_timestamp(),-1);-- 获取昨天的日期

 3.周,季度等计算

sql">-- 依次获取现在是月中第几天,周中第几天,季度,年中第几周
select dayofmonth(current_timestamp()); -- day of month 获取今天是本月中的第几天
select `dayofweek`(`current_timestamp`());-- day of week 获取今天是本周的第几天,星期天才是一周的开始
select quarter(`current_timestamp`()); -- quarter 获取现在是本年的第几个季度,一年分为四季
select weekofyear(`current_timestamp`()); -- week of year 获取本周是今年的第几周

4.时间戳 

sql">-- 拓展
--获取当前UNIX时间戳函数: unix_timestamp
select unix_timestamp(); -- 1684640319

--字符串日期转UNIX时间戳函数: unix_timestamp
select unix_timestamp("2023-5-21 11:38:56"); -- 1684669136

--指定格式日期转UNIX时间戳函数: unix_timestamp
select unix_timestamp('20230521 11:38:56','yyyyMMdd HH:mm:ss'); --1684669136

--UNIX时间戳转日期函数: from_unixtime
select from_unixtime(1684669136); -- 2023-05-21 11:38:56
-- 获取时间原点日期
select from_unixtime(0); -- 1970-01-01 00:00:00

六.数学函数

sql">-- 随机数
select rand();

--拼接随机数
select concat('我的余额是:',rand());

-- 获取π值
select pi();

-- 四舍五入设置保留位数
select round(pi(),4);

-- 向上取整
select ceil(pi());  --ceil天花板
select ceil(2.14); --3

-- 向下取整
select floor(pi()); --floor 地板
select floor(2.14); --2


http://www.niftyadmin.cn/n/5184545.html

相关文章

CentOS to KeyarchOS 系统迁移体验

1. KOS(KeyarchOS)——云峦操作系统简介 KeyarchOS 即云峦操作系统(简称 KOS)是浪潮信息基于 Linux 内核、龙蜥等开源技术自主研发的一款服务器操作系统,支持x86、ARM 等主流架构处理器,广泛兼容传统 CentOS 生态产品和创新技术产品,可为用户…

postswigger 靶场(CSRF)攻略-- 3.令牌验证

靶场地址: https://portswigger.net/web-security/csrf 令牌(token) 验证取决于令牌(token) 的存在 题目中已告知易受攻击的是电子邮件的更改功能,而目标是利用 csrf 漏洞更改受害者的电子邮件地址,最后给出了登录凭据:wiener:pet…

java--俄罗斯方块

一、先看一下游戏运行时的画面 二、代码部分 1. Cell.java Cell.java: package demo1;import java.awt.image.BufferedImage; import java.util.Objects;/* 编写小方块类属性:行、列、每个小方格的图片方法:左移一格、右移一格、下落一格 …

C语言实现排序介绍

C语言学习都会学到排序算法&#xff0c;下面实现两个排序算法&#xff1a; #include <stdio.h>// 冒泡排序 void bubble_sort(int arr[], int n) {for (int i 0; i < n - 1; i) {for (int j 0; j < n - i - 1; j) {if (arr[j] > arr[j 1]) {int temp arr[j…

React父组件怎么调用子组件的方法

调用方法&#xff1a;1、类组件中的调用可以利用React.createRef()、ref的函数式声明或props自定义onRef属性来实现&#xff1b;2、函数组件、Hook组件中的调用可以利用useImperativeHandle或forwardRef抛出子组件ref来实现。 【程序员必备开发工具推荐】Apifox一款免费API管理…

vue3重使用reactive定义的变量响应式丢失问题(大坑!!!)

前言 在Vue 3中&#xff0c;可以使用reactive函数将普通JavaScript对象转换为响应式对象&#xff0c;这样当对象的属性发生变化时&#xff0c;就会自动更新相应的UI。 但是请注意以下情况可能会丢失数据的响应式&#xff1a; 响应式丢失的情况&#xff1a; 1、对使用reactiv…

LeetCode——链表(Java)

链表 简介[简单] 203. 移除链表元素[中等] 707. 设计链表[简单] 206. 反转链表[中等] 24. 两两交换链表中的节点[中等] 19. 删除链表的倒数第 N 个结点 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录。会附上一些个人的思路&#xff0c;如果有错误&#…

go 语言之 select

在 Go 语言中&#xff0c;select 是一种用于处理多个通道操作的控制结构。它可以用于在多个通道之间进行非阻塞的选择操作&#xff0c;从而实现并发控制和通信。 select 语句的基本语法如下&#xff1a; go select { case <-channel1:// 当 channel1 可读时执行的代码 cas…