hive常用SQL函数及案例

1 函数简介

Hive会将常用的逻辑封装成函数给用户进行使用,类似于Java中的函数。
好处:避免用户反复写逻辑,可以直接拿来使用。
重点:用户需要知道函数叫什么,能做什么。
Hive提供了大量的内置函数,按照其特点可大致分为如下几类:单行函数、聚合函数、炸裂函数、窗口函数。
以下命令可用于查询所有内置函数的相关信息。

(1)查看系统内置函数

show functions;

(2)查看内置函数用法

 desc function upper;

(3)查看内置函数详细信息

 desc function extended upper;

2 单行函数

单行函数的特点是一进一出,即输入一行,输出一行。
单行函数按照功能可分为如下几类: 日期函数、字符串函数、集合函数、数学函数、流程控制函数等。

(1)算术运算函数

在这里插入图片描述

案例实操:查询出所有员工的薪水后加1显示

select sal + 1 from emp;

在这里插入图片描述

3 数值函数

(1)round:四舍五入

select round(3.3);

在这里插入图片描述

(2)ceil:向上取整

select ceil(3.1) ;

在这里插入图片描述

(3)floor:向下取整

select floor(4.8);

在这里插入图片描述

4 字符串函数

(1) substring:截取字符串

语法一:substring(string A, int start)
返回值:string
说明:返回字符串A从start位置到结尾的字符串
语法二:substring(string A, int start, int len)
返回值:string
说明:返回字符串A从start位置开始,长度为len的字符串
说明:获取第二个字符以后的所有字符:
在这里插入图片描述
说明:获取倒数第三个字符以后的所有字符

 select substring("atguigu",-3);

在这里插入图片描述
说明:从第3个字符开始,向后获取2个字符

select substring("atguigu",3,2);

在这里插入图片描述

(2) replace :替换

语法:replace(string A, string B, string C)
返回值:string
说明:将字符串A中的子字符串B替换为C

select replace('atguigu', 'a', 'A')

在这里插入图片描述

(3)regexp_replace:正则替换

语法:regexp_replace(string A, string B, string C)
返回值:string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符。

select regexp_replace('100-200', '(\\d+)', 'num') 

在这里插入图片描述

(4)regexp:正则匹配

语法:字符串 regexp 正则表达式
返回值:boolean
说明:若字符串符合正则表达式,则返回true,否则返回false。
说明:正则匹配成功,输出true

select 'dfsaaaa' regexp 'dfsa+'

在这里插入图片描述
说明:正则匹配失败,输出false

select 'dfsaaaa' regexp 'dfsb+';

在这里插入图片描述

(5)repeat:重复字符串

语法:repeat(string A, int n)
返回值:string
说明:将字符串A重复n遍。

select repeat('123', 3);

在这里插入图片描述

(6)split :字符串切割

语法:split(string str, string pat)
返回值:array
说明:按照正则表达式pat匹配到的内容分割str,分割后的字符串,以数组的形式返回。
在这里插入图片描述

(7)nvl :替换null值

语法:nvl(A,B)
说明:若A的值不为null,则返回A,否则返回B。

select nvl(null,1); 

在这里插入图片描述

(8)concat :拼接字符串

语法:concat(string A, string B, string C, ……)
返回:string
说明:将A,B,C……等字符拼接为一个字符串

select concat('beijing','-','shanghai','-','shenzhen');

在这里插入图片描述

(9)concat_ws:以指定分隔符拼接字符串或者字符串数组

语法:concat_ws(string A, string…| array(string))
返回值:string
说明:使用分隔符A拼接多个字符串,或者一个数组的所有元素。
在这里插入图片描述
在这里插入图片描述

(10)get_json_object:解析json字符串

语法:get_json_object(string json_string, string path)
返回值:string
说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。

获取json数组里面的json具体数据

select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0].name');

在这里插入图片描述
获取json数组里面的数据

select get_json_object('[{"name":"大海海","sex":"男","age":"25"},{"name":"小宋宋","sex":"男","age":"47"}]','$.[0]');

在这里插入图片描述

5 日期函数

(1)unix_timestamp:返回当前或指定时间的时间戳

语法:unix_timestamp()
返回值:bigint
说明:-前面是日期后面是指,日期传进来的具体格式

select unix_timestamp('2022/08/08 08-08-08','yyyy/MM/dd HH-mm-ss');

在这里插入图片描述

(2)from_unixtime:转化UNIX时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式

语法:from_unixtime(bigint unixtime[, string format])
返回值:string

select from_unixtime(1659946088);

在这里插入图片描述

(3)current_date:当前日期

select current_date;

在这里插入图片描述

(4)current_timestamp:当前的日期加时间,并且精确的毫秒

select current_timestamp;

在这里插入图片描述

(5)month:获取日期中的月

语法:month (string date)
返回值:int

 select month('2022-08-08 08:08:08');

在这里插入图片描述

(6)day:获取日期中的日

语法:day (string date)
返回值:int

select day('2022-08-08 08:08:08')    

在这里插入图片描述

(7)hour:获取日期中的小时

语法:hour (string date)
返回值:int

 select hour('2022-08-08 08:08:08');   

在这里插入图片描述

(8)datediff:两个日期相差的天数(结束日期减去开始日期的天数)

语法:datediff(string enddate, string startdate)
返回值:int

 select datediff('2021-08-08','2022-10-09');    

在这里插入图片描述

(9)date_add:日期加天数

语法:date_add(string startdate, int days)
返回值:string
说明:返回开始日期 startdate 增加 days 天后的日期

 select date_add('2022-08-08',2);   

在这里插入图片描述

(10)date_sub:日期减天数

语法:date_sub (string startdate, int days)
返回值:string
说明:返回开始日期startdate减少days天后的日期。

 select date_sub('2022-08-08',2);    

在这里插入图片描述

(11)date_format:将标准日期解析成指定格式字符串

 select date_format('2022-08-08','yyyy年-MM月-dd日')   

在这里插入图片描述

6 流程控制函数

(1)case when:条件判断函数

语法一:case when a then b [when c then d]* [else e] end
返回值:T
说明:如果a为true,则返回b;如果c为true,则返回d;否则返回 e

select case when 1=2 then 'tom' when 2=2 then 'mary' else 'tim' end from location; 

在这里插入图片描述
语法二: case a when b then c [when d then e]* [else f] end
返回值: T
说明:如果a等于b,那么返回c;如果a等于d,那么返回e;否则返回f

select case 100 when 50 then 'tom' when 100 then 'mary' else 'tim' end from location; 

在这里插入图片描述

(2)if: 条件判断,类似于Java中三元运算符

语法:if(boolean testCondition, T valueTrue, T valueFalseOrNull)
返回值:T
说明:当条件testCondition为true时,返回valueTrue;否则返回valueFalseOrNull
条件满足,输出正确

select if(10 > 5,'正确','错误'); 

在这里插入图片描述
条件满足,输出错误

 select if(10 < 5,'正确','错误');

在这里插入图片描述

7 集合函数

(1)size:集合中元素的个数

 select size(array('beijing','shenzhen','shanghai')) from location;

在这里插入图片描述

(2)map:创建map集合

语法:map (key1, value1, key2, value2, …)
说明:根据输入的key和value对构建map类型

 select map('xiaohai',1,'dahai',2);  

在这里插入图片描述

(3)map_keys: 返回map中的key

select map_keys(map('xiaohai',1,'dahai',2));

在这里插入图片描述

(4)map_values: 返回map中的value

select map_values(map('xiaohai',1,'dahai',2));

在这里插入图片描述

(5)array 声明array集合

语法:array(val1, val2, …)
说明:根据输入的参数构建数组array类

 select array('1','2','3','4');

在这里插入图片描述

(6)array_contains: 判断array中是否包含某个元素

 select array_contains(array('a','b','c','d'),'a');

在这里插入图片描述

(7)sort_array:将array中的元素排序

select sort_array(array('a','d','c'));

在这里插入图片描述

(8)struct声明struct中的各属性

语法:struct(val1, val2, val3, …)
说明:根据输入的参数构建结构体struct类

select struct('name','age','weight');

在这里插入图片描述

(9)named_struct声明struct的属性和值

select named_struct('name','xiaosong','age',18,'weight',80);

在这里插入图片描述

8 高级聚合函数

(1)collect_list 收集并形成list集合,结果不去重

在这里插入图片描述

select 
  sex,
  collect_list(job)
from
  employee
group by 
  sex

在这里插入图片描述

(2) collect_set 收集并形成set集合,结果去重

select 
  sex,
  collect_set(job)
from
  employee
group by 
  sex

在这里插入图片描述

9 常用窗口函数

参考以下文章:

开窗函数的使用详解(聚合函数图文详解)

原文链接:https://blog.csdn.net/m0_52606060/article/details/129150481

开窗函数的使用详解(窗口范围ROWS与RANGE图文详解)

原文链接:https://blog.csdn.net/m0_52606060/article/details/129132985

10 自定义函数

参考以下文章:

hive自定义函数及案例

原文链接:https://blog.csdn.net/m0_52606060/article/details/134826464

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/246228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测评中心 ▏科技项目验收测试流程和注意事项简析

科技项目验收测试是指对已开发完成的科技项目进行测试和评估&#xff0c;以确认其达到预期的功能和性能要求&#xff0c;保证项目的质量和可靠性。 一、科技项目验收测试的流程一般包括以下几个阶段&#xff1a;   1、需求分析和测试计划&#xff1a;在开始测试前&#xff0…

RK3568平台(网络篇) 有线网络基本概念及测试手法

一.什么是交换机&#xff1f; 交换机是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层&#xff0c;即数据链路层。交换机拥有一条高带宽的背部总线和内部交换…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion 模特假人换服装、换背景、换真人

给固定人物换背景或者换服装,需要用到一个Stable Diffusion扩展插件,就是sd-webui-segment-anything。 sd-webui-segment-anything 不仅可以做到抠图的效果,也能实现之多蒙版的效果。 什么是蒙版 图片蒙版是一种用于调节图像修改程度以及进行局部调整的工具。它通常分为四种…

LED恒流调节器FP7125,应用LED街道照明、调光电源、汽车大灯、T5T8日光灯

目录 一、FP7125概述 二、FP7125功能 三、应用领域 近年来&#xff0c;随着人们环保意识的不断增强&#xff0c;LED照明产品逐渐成为照明行业的主流。而作为LED照明产品中的重要配件&#xff0c;LED恒流调节器FP7125的出现为LED照明带来了全新的发展机遇。 一、FP7125概述 FP…

HarmonyOS(十三)——详解自定义组件的生命周期

前言 自定义组件的生命周期回调函数用于通知用户该自定义组件的生命周期&#xff0c;这些回调函数是私有的&#xff0c;在运行时由开发框架在特定的时间进行调用&#xff0c;不能从应用程序中手动调用这些回调函数。 下图展示的是被Entry装饰的组件生命周期&#xff1a; 今…

mysql 与mssql 命令有那些区别

use databasename 进入指定数据库名 命令一致 select databse() 查询当前进入数据库的名 mssql无法使用&#xff0c;mysql正常 mssql 暂无 C知道介绍 以下是MySQL和MSSQL命令的一些区别&#xff1a; 1. 连接数据库的命令不同&#xff1a; - MySQL&#xff1a;…

【Linux】free命令使用

free命令 ​free是指查看当前系统内存的使用情况&#xff0c;它显示系统中剩余及已用的物理内存和交换内存&#xff0c;以及共享内存和被核心使用的缓冲区。 作者 作者&#xff1a;Brian Edmonds。 语法 free [参数] free 命令 -Linux手册页 命令选项及作用 执行令 &am…

HI3559AV100和FPGA 7K690T的PCIE接口调试记录-续

上文https://blog.csdn.net/fzktongyong/article/details/134963814?spm1001.2014.3001.5501 上一篇文中PCIE实测速度和理论计算有较大偏差&#xff0c;经过尝试后有所提升。 1、提升效果 1&#xff09;、RC写操作&#xff0c;实测速度817MB/s&#xff08;410407&…

实验:华为静态路由配置

1.实验目的&#xff1a; 掌握华为路由器和交换机的基本配置方法理解静态路由的原理和作用学习使用vlan和trunk技术划分和连接不同网段能够通过ping命令测试网络连通性和故障排除 2.实验内容&#xff1a; 使用ARI200路由器和S5735交换机搭建如下图所示的网络拓扑在路由器上配…

Elasitcsearch--解决CPU使用率飙升

原文网址&#xff1a;Elasitcsearch--解决CPU使用率飙升_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决ES导致的CPU使用率飙升的问题。 问题描述 线上环境 Elasticsearch CPU 使用率飙升常见问题如下&#xff1a; Elasticsearch 使用线程池来管理并发操作的 CPU 资源。…

【深度学习目标检测】三、基于深度学习的人物摔倒检测(python,yolov8)

深度学习目标检测方法则是利用深度神经网络模型进行目标检测&#xff0c;主要有以下几种&#xff1a; R-CNN系列&#xff1a;包括R-CNN、Fast R-CNN、Faster R-CNN等&#xff0c;通过候选区域法生成候选目标区域&#xff0c;然后使用卷积神经网络提取特征&#xff0c;并通过分类…

商业智能BI和数据可视化的区别

现在市场上有非常多的商业智能BI产品&#xff0c;几乎都在着重宣传其数据可视化功能的强大&#xff0c;给人造成一种商业智能BI就是数据可视化的印象。事实上商业智能BI并不等于数据可视化。要探究商业智能BI和数据可视化的区别&#xff0c;我们先要分别弄清楚这两个概念。 1、…

【华为数据之道学习笔记】5-1支撑非数字原生企业数字化转型的数据底座建设框架

华为通过建设数据底座&#xff0c;将公司内外部的数据汇聚在一起&#xff0c;对数据进行重新组织和联接&#xff0c;让数据有清晰的定义和统一的结构&#xff0c;并在尊重数据安全与隐私的前提下&#xff0c;让数据更易获取&#xff0c;最终打破数据孤岛和垄断。通过数据底座&a…

20231214使用WPS将英文SRT字幕的全大写字符转换为首字母大写的小写字幕

20231214使用WPS将英文SRT字幕的全大写字符转换为首字母大写的小写字幕 2023/12/14 13:16 看英文纪录片&#xff0c;发现英文字母是全部大写。 所以需要整理成为小写的字幕【句子的首字符大小&#xff01;】 https://re.talking.1080p.hdtv.x265.aac.mvgroup.org/index.php?t…

【动态规划】【广度优先搜索】LeetCode:2617 网格图中最少访问的格子数

本文涉及的基础知识点 二分查找算法合集 动态规划 题目 给你一个下标从 0 开始的 m x n 整数矩阵 grid 。你一开始的位置在 左上角 格子 (0, 0) 。 当你在格子 (i, j) 的时候&#xff0c;你可以移动到以下格子之一&#xff1a; 满足 j < k < grid[i][j] j 的格子 (i,…

双向无线功率传输系统MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介&#xff1a; 初级侧转换器通过双向 AC/DC 转换器从电网获取电力&#xff0c;并由直流线电压 Vin 供电&#xff0c;而拾波侧被视为连接到 EV&#xff0c;并由连接到任一存储的单独直流源 Vout 表示或…

ES日志分析在Win系统上的安装和使用

Es日志分析三件套ElasticSearch、Kibana、logstash。 ElasticSearch 下载 官方下载地址 选择自己想要的版本下载即可。这个地方有可能下载会比较慢。可以结合迅雷做下载。 分词器下载 官方分词器下载 如果GIthub加载不出来。可以看看我的这个文章GitHub上不去怎么办&…

[渗透测试学习] Sau - HackTheBox

首先是信息搜集&#xff0c;nmap扫一下 nmap -sV -sC -p- -v 10.10.11.224 发现存在两个端口&#xff0c;55555端口有http服务&#xff0c;访问一下 获得线索request-baskets版本为1.2.1&#xff0c;搜索发现存在漏洞 那么我们试试构造ssrf&#xff0c;create的时候bp抓包 构…

4.11 构建onnx结构模型-Clip

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以 Clip 结点进行分析 方式 方法一…

HarmonyOS(ArkTS)基础组件参数 媒体类型讲解

我们这里做了一个空的容器 然后 我们可以这样写 Entry Component struct Index {build() {Row() {Column() {Text("你好")Divider()Button("点击")}.width(100%)}.height(100%)} }这里 我们分别使用了三个组件 Text文本组件 Divider分割线组件 Button按钮…