Hive09_函数

news2024/9/25 9:37:43

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;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

理解 RPC 与 Protobuf:完整指南

一、Protobuf 数据格式简析 Protobuf 是什么? 在数据密集型应用领域,Google 开发的 Protobuf 作为一种高效数据编码方式而广受欢迎。它胜任于 JSON 及 XML 对比,不仅在体积和速度上表现出色,而且其结构化方式优化了网络传输中的…

组织权限收集表

在组织角色收集过程中,主要分为两个重要环节:用户信息的收集和角色定义。其中,用户信息的收集相对简单,而角色定义则更为复杂。 在我们的项目中,权限涉及页面权限、按钮权限和数据权。为了确保每个角色具备适当的权限…

数字信号处理期末复习——计算小题(二)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

SQL 在已有表中修改列名的方法

文章目录 1. MySQL2. SQL Server3. Oracle / PostgreSQL Question: 假设有一张表 StudentInfo,表中有一个列名是 Student_Name ,想要把这个列名改成 StudentName 应该如何操作? 建表语句如下: --建表 if object_id(S…

零知识证明(zk-SNARK)- groth16(一)

全称为 Zero-Knowledge Succinct Non-Interactive Argument of Knowledge,简洁非交互式零知识证明,简洁性使得运行该协议时,即便 statement 非常大,它的 proof 大小也仅有几百个bytes,并且验证一个 proof 的时间可以达…

算法28:力扣64题,最小路径和------------样本模型

题目: 给定一个二维数组matrix,一个人必须从左上角出发,最后到达右下角 。沿途只可以向下或者向右走,沿途的数字都累加就是距离累加和 * 返回累加和最小值 思路: 1. 既然是给定二维数组matrix,那么二维数…

LDD学习笔记 -- Linux内核模块

LDD学习笔记 -- 内核模块 简介LKM类型Static Linux Kernel ModuleDynamic Linux Kernel ModuleLKM编写语法 syntax详细描述内核头文件用户空间头文件Module Initialization FunctionModule Cleanup FunctionKeyword & Tag宏 __init __exitLKM入口注册Module Metadate&#…

使用Matplotlib模拟绘制北京上海气温变化折线图

02 模拟北京上海气温变化折线图 通过本练习,可以掌握如何在一个坐标系中展示多个折线图,以及如何修改折线图的颜色和样式,以及如何设置和显示图例。 在一个坐标系中绘制两条折线 要在一个坐标系中绘制两条这些,我们只需要进行两…

Python open函数详解:打开指定文件与 readline和readlines函数:按行读取文件

Python open函数详解:打开指定文件 掌握了各种操作目录字符串或目录的函数之后,接下来可以准备读写文件了。在进行文件读写之前,首先要打开文件。 Python 提供了一个内置的 open() 函数,该函数用于打开指定文件。 open() 函数的…

Matplotlib基础

目录: 一、绘制函数图像:二、创建图形对象:三、绘制多子图: 一、绘制函数图像: from matplotlib import pyplot as plt import numpy as np #生成(-50,50)的数组 x np.arange(-50,50) #计算因…

口罩佩戴监测识别摄像机

口罩佩戴监测识别摄像机是一种应用于公共场所的智能监控设备,旨在监测人们是否正确佩戴口罩。这种摄像机使用先进的图像识别技术,能够准确辨识出人们的面部,并判断是否佩戴口罩。该技术可以用于各种场所,如火车站、机场、商场、学…

IDEA 修改 jdk 版本

三步: 一 、file--setting 二、 file--Project Structure 三 、file--Project Structure

【JUC的四大同步辅助类】

文章目录 一、CountDownLatch二、CyclicBarrier三、Semaphore四、Phaser 提示:以下是本篇文章正文内容,下面案例可供参考 一、CountDownLatch CountDownLatch如同火箭发射,计数只能不断减减,当到达0时即发射 场景示例&#xff1…

gitee创建仓库

描述 本文章记录了怎么在gitee上创建项目,以及使用vscode提代码到远程呢个仓库,如何创建一个新分支,并将新分支提交到远程仓库。 1、创建远程仓库 在创建远程仓库之前要先进行ssh密钥的设置 (1)打开黑窗口&#xff…

NSSCTF 简单包含

开启环境: 使用POST传flag&#xff0c;flag目录/var/www/html/flag.php 先使用post来尝试读取该flag.php 没反应: 查看一下源码index.php&#xff0c;看有什么条件 base64解密: <?php$path $_POST["flag"];if (strlen(file_get_contents(php://input)) <…

SSH

简介 SSH&#xff1a;Secure Shell Protocol&#xff0c;安全的远程登录&#xff0c;实现加密通信&#xff0c;替代传统telnet协议。 端口&#xff1a;22/tcp 软件实现&#xff1a; OpenSSH&#xff1a;ssh协议的开源实现&#xff0c;CentOS默认安装Dropbear&#xff1a;另…

Socket closed 异常解决方案:如何解决 JMeter 压测中的问题

问题描述 JMeter 压测时会报 java.net.SocketException: Socket closed java.net.SocketException: Socket closed at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.ne…

CMake入门教程【核心篇】宏模板(macro)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 定义宏1.1 基本语…

红日靶场-3

目录 前言 外网渗透 外网渗透打点 1、arp 2、nmap 3、nikto 4、whatweb 5、gobuster 6、dirsearch CMS 1、主页内容 2、/configuration.php~ 目录 3、/administrator 目录 4、Joomla!_version探测 5、joomlascan python脚本 6、joomscan perl脚本 MySQL 1、远…

bootstrap5实现通用果蔬网站 FoodMart页面模板

一、需求分析 通用果蔬网站是指专门提供各类果蔬产品展示和销售的在线平台。它将不同种类的新鲜水果、蔬菜、干果、坚果等聚集在一起&#xff0c;为消费者提供方便、快捷的购物渠道。通用果蔬网站的作用主要包括以下几个方面&#xff1a; 商品展示和销售&#xff1a;通用果蔬网…