4.HIVE函数

news/2024/10/18 10:13:57/

1.hive函数

1.1 空值替换

两个输入nvl(col,default_num) : 如果colum不为null,返回col.否则返回default_num

多个输入:coalesce(col1, col2, col3, ....) :从左到右找第一个不为null的值

例如:求所有员工的平均薪水

select avg(nvl(salary, 0 ))from emp;

 因为avg()会自动忽略null,这样可以保证null也参与了运算 

又例如:

select ename, job, sal, coalesce(job, sal, '啥也没有') from emp;

解释:如果有job, 就输出job;如果有sal,就输出sal,什么都没有就输出“啥都没有”

1.2 分支控制

数据准备:

create table emp_sex(name string,     --姓名dept_id string, --部门idsex string       --性别
) 
row format delimited fields terminated by "\t";
load data local inpath '/opt/module/hive/datas/emp_sex.txt' 
into table emp_sex;

 1.2.1 if函数:

if (boolean, result1, result2) 如果boolean为真,返回result1,否则返回result2

例如:

 统计emp_sex表各部门男女的人数 

select  dpt_idcount(if(sex="男"),name,null)  male,count(if(sex="女"),name,null)  female
from emp_sex
group by dpt_id;

1.2.2 case函数: 

-- case col 
--   when value1 then result1 
--   when value2 then result2 
--   else result3 
--   end
-- 如果col值为value1,返回result1;如果值为value2,返回result2;否则返回result3
-- case when
--   boolean1 then result1
--   boolean2 then result2
--   else result3
--   end
-- 如果boolean1为真,返回result1;如果boolean1为假,boolean2为真,返回result2;否则返回result3

 例如:

统计emp_sex表各部门男女的人数

SELECT dept_idcount(case sex when '男' then name else null end) male,count(case when sex='女' then name else null end) female
from emp_sex
group by dept_id;

1.3 行列转换

1.3.1 行转列

聚合函数colect_set(col)set会去重
聚合函数colect_list(col)list不会去重
字符串拼接concat(V1,V2,V3)字符串拼接

举例:

-- 数据准备
create table person_info(name string,            -- 姓名constellation string, -- 星座blood_type string      -- 血缘
) 
row format delimited fields terminated by "\t";
load data local inpath "/opt/module/hive/datas/constellation.txt" 
into table person_info;

 要求:把星座和血型一样的人归类到一起,结果如下:

ps.行转列:大海和凤姐以前是同一列的人,现在变成同一行了

初始思路:

select constellation, blood_type,collect_list(name) names
from person_info
group by constellation, blood_type;

 进一步引申为:

select concat(constellation, ',', blood_type) xzxx,  //字符串拼接concat_ws('|', collect_list(name)) names     //concat_WithSeperater
from person_info
group by constellation, blood_type;

1.3.2 列转行

数据准备:

 需求:将电影分类中的数组数据展开

                  

explode(array或map) :将一行输入变成多行多列,如果是array,就是一列,是map,就是多列

split(str, 分隔符) :将str按照指定分隔符分成字符串数组

使用格式:from 原表格 lateral view  UDTF函数 

select m.movie,tbl.category_id
from movie_info m
lateral view explode(split(category, ',')) tbl as category_id;
// explode后的表格命名为tbl,其中只有一列,命名为categroy_id

将上述表转化成category_id,movies:

ps.在原来的表上套一个子查询:

练习:根据下表,查一下结果name,child,age.

select name ,child ,agefrom test lateral view  explode(children) tbl as child, age

2.练习题

准备数据集:

返回不同国家11月份的天气状况:

天气根据weather_state决定,avg(weather_state)<=15为寒冷,<25为温暖,>=25为炎热

通过子查询的方式来写:

先写子语句:

select country_id,avg(weather_state) avg_w
from weather  
where substring(day,1,7) ='2017-04'
group by country_id;

然后写主语句:

select  country_namecase  when avg_w<=15 then '寒冷'when  avg_w>15 and avg_w<=25 then '温暖'else '炎热‘ end
from countries c
join (
select country_id,avg(weather_state) avg_w
from weather  
where substring(day,1,7) ='2019-11'
group by country_id;
) t1 
on c.country_id = t1.country_id

http://www.ppmy.cn/news/64582.html

相关文章

MySQL基础(十)创建和管理表

1. 基础知识 1.1 一条数据存储的过程 存储数据是处理数据的第一步。只有正确地把数据存储起来&#xff0c;我们才能进行有效的处理和分析。否则&#xff0c;只能是一团乱麻&#xff0c;无从下手。 那么&#xff0c;怎样才能把用户各种经营相关的、纷繁复杂的数据&#xff0c…

【LLM】LangChain基础使用(构建LLM应用)

note LangChain应用开发框架&#xff0c;支持python和typescript语言&#xff1b;可以帮助生成prompt模板&#xff0c;并通过代理充当其他组件&#xff08;如提示模板、其他大语言模型、外部数据和其他工具&#xff09;的中央接口。LangChain可以直接与 OpenAI 的 text-davinc…

unity航点寻径

一、游戏框架&#xff1a;设置了六个路标&#xff0c;角色会在这六个路标之间一次移动&#xff0c;当移动到第六个路标后又会返回第一个路标&#xff0c;继续依次移动。 road&#xff1a; 道路&#xff0c;由五个立方体组成 sign&#xff1a;路标&#xff0c;由六个胶囊组成 …

SFP+高速线缆VS 10G SFP+电口模块VS SFP+光模块区别比较

在之前的推文中我们有介绍到千兆和万兆电口模块&#xff0c;其中有小伙伴留言说想了解高速线缆、电口模块和光模块之间的区别&#xff0c;今天易天光通信将从连接方式、使用场景、特点和优势等方面为大家展开详细介绍。 一、连接方式区别 1、SFP高速线缆连接方式&#xff1a; …

技术控,看这里,一款支持断点调试的数据科学工具

数据科学是一门利用统计学、机器学习、数据挖掘、数据可视化等技术和方法&#xff0c;从数据中提取知识和信息的交叉学科。自上世纪60年代&#xff0c;统计学家John W.Tukey首次提出“数据分析”&#xff08;Data Analysis&#xff09;的概念起&#xff0c;数据科学已历经了几十…

【网络】4万字细品TCP协议

文章目录 TCP协议关于UDP和TCP的优缺点 TCP协议格式4位首部长度可靠性的理解确认应答的工作方式序号和确认序号如何保证报文的顺序呢确认序号的特点:为什么有两套序号总结:序列号的原理 16位窗口大小TCP的缓冲区为什么TCP叫做传输控制协议缓冲区存在的意义 窗口大小 6个标记位为…

powershell定义文本,用户交互,正则表达式

定义文本 PS C:\Users\Administrator> $site"yuan" PS C:\Users\Administrator> $text"$site $(get-date) $env:windir" PS C:\Users\Administrator> $text yuan 09/16/2022 14:12:26 C:\Windows#使用单引号闭合字符串输出双引号 The site of my…

http简述

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在Web上传输数据的协议。它是Web的基础&#xff0c;使得我们能够在互联网上访问和共享信息。本文将介绍HTTP的基本概念、工作原理、请求和响应、状态码、安全性和未来发展等方面。 一、HTTP的基本概念 HTT…