Hive09_函数

HIVE函数

系统内置函数

1)查看系统自带的函数

hive> show functions;

2)显示自带的函数的用法

hive> desc function upper;

3)详细显示自带的函数的用法

hive> desc function extended upper;

hive函数分类

1、UDF:用户定义(普通)函数,只对单行数值产生作用;(一进一出)

2、UDAF:User- Defined Aggregation Funcation;用户定义聚合函数,可对多行数据产生作用;等同与SQL中常用的SUM(),AVG(),也是聚合函数;(多进一出)

3.UDTF:User-Defined Table-Generating Functions,用户定义表生成函数,用来解决输入一行输出多行(炸裂函数,一进多出);

常用内置函数

1 空字段赋值 NVL

1)函数说明
NVL:给值为 NULL 的数据赋值,它的格式是 NVL( value,default_value)。它的功能是如
果 value 为 NULL,则 NVL 函数返回 default_value 的值,否则返回 value 的值,如果两个参数
都为 NULL ,则返回 NULL。

2)数据准备:

采用员工表

3)查询:

如果员工的 comm 为 NULL,则用-1 代替

hive (default)> select comm,nvl(comm, -1) from emp;

OK
comm _c1
NULL -1.0
300.0 300.0
500.0 500.0
NULL -1.0
1400.0 1400.0
NULL -1.0
NULL -1.0
NULL -1.0
NULL -1.0
0.0 0.0
NULL -1.0
NULL -1.0
NULL -1.0
NULL -1.0

4)查询:

如果员工的 comm 为 NULL,则用领导 id 代替

hive (default)> select comm, nvl(comm,mgr) from emp;
OK
comm _c1
NULL 7902.0
300.0 300.0
500.0 500.0
NULL 7839.0
1400.0 1400.0
NULL 7839.0
NULL 7839.0
NULL 7566.0
NULL NULL
0.0 0.0
NULL 7788.0
NULL 7698.0
NULL 7566.0
NULL 7782.0

2 CASE WHEN THEN ELSE END

1) 数据准备

在这里插入图片描述

2)需求求出不同部门男女各多少人。

结果如下:

dept_Id 男孩 女孩

A 2 1

B 1 2

select 
	dept_id,
	sum(case sex when '男'  then 1 else 0 end) as "男孩"sum(case sex when '女' then 1 else 0 end) as "女孩"
from 
	emp_sex 
group by 
	dept_id;

3)创建本地 emp_sex.txt,导入数据

[root@localhost datas]$ vi emp_sex.txt
悟空	A	男
大海	A	男
宋宋	B	男
凤姐	A	女
婷姐	B	女
婷婷	B	女

4)创建 hive 表并导入数据

create table emp_sex(
name string, 
dept_id string, 
sex string) 
row format delimited fields terminated by "\t";

load data local inpath '/usr/soft/datas/emp_sex.txt' into table emp_sex;

5)按需求查询数据

select
 dept_id,
 sum(case sex when '男' then 1 else 0 end) male_count,
 sum(case sex when '女' then 1 else 0 end) female_count
from emp_sex
group by dept_id;

3 行转列

1)相关函数说明

CONCAT(string A/col, string B/col…):
返回输入字符串连接后的结果,支持任意个输入字符串;

CONCAT_WS(separator, str1, str2,…):

它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接的字符串之间;
注意: CONCAT_WS must be "string or array

COLLECT_SET(col):

函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 Array 类型字段。

2)数据准备

在这里插入图片描述

3)需求
把星座和血型一样的人归类到一起。结果如下:

射手座,A 大海|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋|紫霞
select 
	t.cb,
	concat_ws('|',collect_set(t.name))
from
	(select name ,concat_ws(',',constellation,blood_type)cb from person_info) t
group by
	t.cb;
	
	

name		cb
孙悟空		白羊座,A
大海		射手座,A
宋宋		白羊座,B
猪八戒		白羊座,A
凤姐		射手座,A
紫霞		白羊座,B

4)创建本地 constellation.txt,导入数据

[root@localhost datas]$ vim person_info.txt
孙悟空  白羊座  A
大海    射手座  A
宋宋    白羊座  B
猪八戒  白羊座  A
凤姐    射手座  A
紫霞    白羊座  B

5)创建 hive 表并导入数据

create table person_info(
name string, 
constellation string, 
blood_type string) 
row format delimited fields terminated by "\t";

load data local inpath "/usr/soft/datas/person_info.txt" into table person_info;

6)按需求查询数据

SELECT
	t1.c_b,
	CONCAT_WS("|",collect_set(t1.name))
FROM (
    SELECT
    	NAME,
    	CONCAT_WS(',',constellation,blood_type) c_b
    FROM person_info
    )t1
	GROUP BY t1.c_b

4 列转行

1)函数说明

EXPLODE(col):将 hive 一列中复杂的 Array 或者 Map 结构拆分成多行。

LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

String s =“hello,world”;

s.split(“,”); =====> [ “悬疑” , “动作” ,“科幻”]

2)数据准备

在这里插入图片描述

split( “category” , “,”) -----> [ “悬疑” , “动作”, “科幻”, “剧情” ] array

explode (array) -----> 悬疑 动作 科幻 剧情

LATERAL VIEW

3)需求

将电影分类中的数组数据展开。结果如下:

《疑犯追踪》 悬疑
《疑犯追踪》 动作
《疑犯追踪》 科幻
《疑犯追踪》 剧情
《Lie to me》 悬疑
《Lie to me》 警匪
《Lie to me》 动作
《Lie to me》 心理
《Lie to me》 剧情
《战狼 2》 战争
《战狼 2》 动作
《战狼 2》 灾难
select 
	movie,cates
from
	movie_info
lateral view 
	explode(split(category,",")) cate as cates;
	
	
	
	
	
select   lateral view( explode(  split(category,",")  ) ) from movie_info;
4)创建本地 movie.txt,导入数据
[root@localhost datas]$ vi movie_info.txt

《疑犯追踪》 悬疑,动作,科幻,剧情
《Lie to me》悬疑,警匪,动作,心理,剧情
《战狼 2》 战争,动作,灾难
5)创建 hive 表并导入数据
create table movie_info(
 	movie string,
 	category string)
row format delimited fields terminated by "\t";

load data local inpath "/usr/soft/datas/movie_info.txt" into table movie_info;
6)按需求查询数据
SELECT
	movie,
	category_name
FROM
	movie_info
lateral VIEW
	explode(split(category,",")) movie_info_tmp AS category_name;
5)创建 hive 表并导入数据
create table movie_info(
 	movie string,
 	category string)
row format delimited fields terminated by "\t";

load data local inpath "/usr/soft/datas/movie_info.txt" into table movie_info;
6)按需求查询数据
SELECT
	movie,
	category_name
FROM
	movie_info
lateral VIEW
	explode(split(category,",")) movie_info_tmp AS category_name;

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

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

相关文章

贪心算法part05 435无重叠区间

435无重叠区间 763 划分字母区间 56合并区间

nginx访问路径匹配方法

目录 一:匹配方法 二:location使用: 三:rewrite使用 一:匹配方法 location和rewrite是两个用于处理请求的重要模块,它们都可以根据请求的路径进行匹配和处理。 二:location使用: 1:简单匹配…

打造专业开发者指南:针对ShardingProxy分库分表解决策略的深度剖析 – 详解部署、使用、服务治理与优化技巧

一、 ShardingProxy快速使用 ShardingProxy的功能同样是分库分表,但是他是一个独立部署的服务端,提供 统一的数据库代理服务。注意,ShardingProxy目前只支持MySQL和PostgreSQL。并且,客户端连接ShardingProxy时,最好使…

主流桌面浏览器Chrome,FireFox和Edge等如何禁用弹出式窗口阻止程序,这里有详细步骤

为什么你想知道如何禁用浏览器中的弹出式窗口阻止程序?毕竟,弹出式窗口是网络的祸害:显示烦人的广告、虚假的安全消息和其他刺激,会分散你的浏览注意力,甚至可能包含恶意代码。 所有主要的桌面浏览器现在都默认阻止弹出式窗口,那么你到底为什么要取消阻止这些害虫呢?事…

人机协同的关键

逻辑和实验是现代科学研究的两个支柱,这是因为科学研究需要不断地进行理论和实践的相互验证和修正,而逻辑和实验则分别代表了这两个方面的重要性和必要性。只有将逻辑和实验有效结合起来,它们相辅相成,互相促进,共同推…

【论文阅读】AADiff: Audio-Aligned Video Synthesis with Text-to-Image Diffusion

AADiff:基于文本到图像扩散的音频对齐视频合成。 code:没开源 paper:[2305.04001] AADiff: Audio-Aligned Video Synthesis with Text-to-Image Diffusion (arxiv.org) 一种新的T2V框架,额外使用音频信号来控制时间动态,使现成的…

快速入门ESP32——点亮你的第一个LCD屏幕

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 快速入门ESP32—— platformIO添加开源库和自己的开发库 快速入门ESP32—— 解决platformIO添加开源库下载失败的问题 快速入门ESP32——点亮你的第一个LCD屏幕 前言一、移植T…

Python 流程控制结构(1)

# 在Python主要分为3大流程结构:顺序结构、分支结构、循环结构 Python顺序结构:从头到尾依次执行每一条 , 不需要判断 Python分支结构:程序会拐弯,有选择性的执行代码 ,到某个节点后,会根据一次判断结果来决定之后走哪…

【损失函数】Cross Entropy Loss 交叉熵损失

1、介绍 主页介绍的几种损失函数都是适用于回归问题损失函数,对于分类问题,最常用的损失函数是交叉熵损失函数 Cross Entropy Loss。它用于测量两个概率分布之间的差异,通常用于评估分类模型的性能。 2、公式 对于二分类问题,交…

DolphinScheduler实际应用

前言 最近公司新启动了一个项目,然后领导想用一下新技术,并且为公司提供多个大数据调度解决方案,我呢就根据领导要求调研了下当前的开源调度工具,最终决定采用DolphinScheduler, 因此研究了一下DolphinScheduler &…

基于头脑风暴算法优化的Elman神经网络数据预测 - 附代码

基于头脑风暴算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于头脑风暴算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于头脑风暴优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&…

QProgressDialog用法及结合QThread用法,四种线程使用

1 QProgressDialog概述 QProgressDialog类提供耗时操作的进度条。 进度对话框用于向用户指示操作将花费多长时间,并演示应用程序没有冻结。此外,QPorgressDialog还可以给用户一个中止操作的机会。 进度对话框的一个常见问题是很难知道何时使用它们;操作…

ASP.NET Core基础之图片文件(一)-WebApi访问静态图片

阅读本文你的收获: 学会在WebApi项目中访问静态图片了解静态文件中间件UseStaticFiles的用法 系统中免不了要去处理图片文件,比如上传商品的图片、显示商品的图片,访问系统中的图片等等,根据微软官网描述: 静态文件&a…

阿里巴巴开源异构数据源离线/全量/增量同步工具 - DataX

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

android——自定义TextView

效果展示&#xff1a; 代码解析&#xff1a; 1、首先设置自定义属性&#xff08;res/values下新建一个attrs.xml文件&#xff09; <?xml version"1.0" encoding"utf-8"?> <resources><!-- name 自定义view的名字 CustomTextView--&…

假期归来必看!2023年9月份,爆款论文总结,了解最新学术进展!

以下文章来源于AINLPer &#xff0c;作者ShuYini 十一假期结束了&#xff0c;十月基本上算是过了一半了&#xff0c;小伙伴们收收心准备开始学习工作吧。按照惯例&#xff0c;月初继续带到家盘一下上个月(九月份)的热点论文。本月论文主要分为大模型微调、大模型发布、大模型应…

jmeter线程组

特点&#xff1a;模拟用户&#xff0c;支持多用户操作&#xff1b;可以串行也可以并行 分类&#xff1a; setup线程组&#xff1a;初始化 类似于 unittest中的setupclass 普通线程组&#xff1a;字面意思 teardown线程组&#xff1a;环境恢复&#xff0c;后置处理

泰国Cafe Racer卖到日本去了还限量150台?

GPX推出日本限定 GTM250R Cafe Racer&#xff0c;复古小车卖到日本去了&#xff0c;限量150台&#xff0c;不得不说这台小车还是挺有味道的。现代的复古风格摩托车也是永远都不会落伍&#xff0c;即使没有什么品牌背书&#xff0c;喜欢这种车型的人&#xff0c;对于配置动力都不…

Uniapp使用wx.getFuzzyLocation()方法,没有超过日调用次数,报错:“此key每日调用已达到上限”

前言&#xff1a; 最近在进行一个小程序项目开发的时候&#xff0c;使用wx.getFuzzyLocation()方法&#xff0c;没有超过日调用次数&#xff0c;但是却出现了报错&#xff1a;“此key每日调用已达到上限”。 解决方案&#xff1a; 打开腾讯位置服务 - 立足生态&#xff0c;连…

学习Go语言Web框架Gee总结--http.Handler(一)

学习Go语言Web框架Gee总结--http.Handler http-base/go.modhttp-base/main.gohttp-base/gee/gee.gohttp-base/gee/go.mod 网站学习来源&#xff1a;Gee 代码目录结构&#xff1a; http-base/go.mod //指定当前模块的名称为 "example" module example//指定当前模…