4.HIVE函数

news2024/11/19 21:53:30

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, --部门id
    sex 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_id
        count(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_id
       count(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 ,age

from test lateral view  explode(children) tbl as child, age

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

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

相关文章

【操作系统】总结

依旧是小林coding 的内容 存储架构 现代 CPU 都是多核心的,线程可能在不同 CPU 核心来回切换执行,这对 CPU Cache 不是有利的,虽然 L3 Cache 是多核心之间共享的,但是 L1 和 L2 Cache 都是每个核心独有的,如果一个线…

VMWare安装windows7虚拟机提示Operating System not found

前提:下载windows7 Gost并创建虚拟机,启动报错:Operating System not found 解决办法 用微PE工具制作iso系统,对虚拟机进行分区 下载地址:https://www.wepe.com.cn/ 制作方法,双击安装程序,选…

最困难的也是最简单的,做好这两点不盈利天理难容

投资者应该时刻记住,在外汇交易中复杂的方法并不总是最好的。Forexclub发现交易中最困难的是正确识别进场点和出场点。 从技术上来说,进入交易是非常容易的,你只需要点击一个按钮,你就在那里交易。但是你会从中获利吗?没人能回答…

【Linux Network】网络编程套接字(代码练习)—UDP

目录 1. 常用接口 2. C/S 回声模拟 3. C/S myshell 的制作 Linux网络编程✨ 1. 常用接口 socket:创建套接字: // 创建 socket 文件描述符 int socket(int domain, int type, int protocol); 返回值: 套接字创建成功返回一个文件描述符 &…

GAMMA电源维修直流高压电源模块RR300-1P

美国GAMMA高压电源维修参数(RR分离式): 输入:220VAC 或 380VAC(视型号而定) 输出电压:550KV,功率:0-10KW或定制 纹波率0.01 ;稳定度0.01/1H 控制部分19英…

(只需两步)让ChatGPT帮你制作出漂亮的PPT

目录 第一步:生成 PPT 代码 第二步:将代码转化为 PPT 还在为制作PPT而烦恼吗? 让ChatGPT来帮您! 本篇文章介绍如何利用ChatGPT一键生成PPT文字和样式,省时省力又专业! (真的只需两步&#xf…

案例实践|云智慧ITSM产品在利星行汽车的运维实践

ITSM(信息技术服务管理)是一种以客户为中心的方法,旨在提高信息技术的效率和效果。在传统零售行业,ITSM可以帮助连锁零售企业提升客户服务水平,通过IT服务台提供快速响应和解决客户的问题和需求。同时, ITS…

PSP - 配置 AlphaFold2 的高效运行环境

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130560538 AlphaFold2 是由 DeepMind 开发,可以根据蛋白质的氨基酸序列预测其三维结构,准确度经常可以与实验相媲美。DeepMind 和 EMBL 的欧洲生物信息学研…

最新的Ubuntu20安装配置Nagios教程

首先声明,盗帖可耻,我发现有人把我文章复制到百度文库,并设置vip下载,直接照搬别人的还牟利,恶心!!! 目录 一、简介 二、安装配置 1、安装Nagios以及相关插件 a、安装Nagios核心…

Blender渲染动画太慢怎么办?用云渲染啊!

1995 年,荷兰开发者 Ton Roosendaal 开发了三维制作软件 Blender ,这是一款功能强大的 3D 创建工具,用于创建 3D 图形、交互式 3D 应用程序、视频游戏、虚拟现实视频和动画。它自 2002 年以来一直作为开源软件提供,可在 macOS、Li…

嵌入式基础测试手册——基于NXP iMX6ULL开发板(3)

前 言 本文档适用开发环境: Windows开发环境:Windows 7 64bit、Windows 10 64bit 虚拟机:VMware15.1.0 Linux开发环境:Ubuntu18.04.4 64bit U-Boot:U-Boot-2020.04 Kernel:Linux-5.4.70 Linux SDK:5.4.70_2.3.0 基于测试板卡:创龙科技TLIMX6U-EVM是一款基于NXP…

Gradio的web界面演示与交互机器学习模型,主要特征《2》

上一篇文章是介绍了安装与使用,Gradio的web界面演示与交互机器学习模型,安装和使用《1》 了解到这个gradio,真是个贴心的产品,接下来更多的关注一些重要的细节特征,让我们去更完善和熟练的使用它。 1、简单计算器的示…

Netty基础(三)

1.Netty模型 1.1.工作原理示意图1-简单版 Netty主要基于主从Reactors多线程模型(如图)做了一定的改进,其中主从Reactor多线程模型有多个Reactor; 说明: ①.BossGroup线程池中的线程维护了Selector,只关注Accecpt事件; ②.当接收到Accept事件,获取到连接对应的SocketChannel…

数据结构入门--栈和队列

栈 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除的一段为栈顶,另一端为栈底。栈中元素遵循后进先出LIFO(Last In First Out)原则。 压栈:栈的插…

玄子Share - 2023.1 IDEA 部署Web项目

玄子Share - 2023.1 IDEA 部署Web项目 创建项目 IDEA 2023 创建Jakarta EE项目 模板:选择使用 Web 应用程序 应用程序服务器:选择安装的 Tomcat 第一次创建项目可能识别不到 Tomcat 需要手动添加 Tomcat 服务器 设置 Tomcat 主目录为 Tomcat 的安装路径…

给httprunnermanager接口自动化测试平台加点功能(二)

文章目录 一、背景1.1、新增字段1.2、简化流程1.3、举一反三 二、总结 一、背景 继续前面的功能改造,这回又是什么需求呢?在编写测试用例的时候,咱们有看到列表有作者名称,也就是说,可以在用例列表就可以知道这条用例是…

网络数据包丢失监控

什么是网络数据包 数据包或网络数据包是通过网络传输的小数据单元。顾名思义,这些是小的、离散的数据单元。单独来看,这些单位不一定有多大意义。它们只是正在传输的整体消息的一部分,这些消息已被组装成多个层。但是,当组合在一…

人工智能前景

人工智能AI的未来非常广阔和光明。随着科技的不断发展和普及,人工智能已经开始逐渐融入我们生活的方方面面,比如智能家居、智能医疗、无人驾驶等等。未来,随着更多的应用场景被开拓和挖掘,人工智能的应用范围将会越来越广泛&#…

Word控件Spire.Doc 【打印】教程(3):如何在自定义纸张尺寸上打印 Word—C#/VB.NET

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

B、B+、红黑树、AVL树的对比

主要来自 小林coding https://mp.weixin.qq.com/s/AoPq8poENF9T4mVS1fDFPw# 怎样的索引的数据结构是好的? MySQL 的数据是持久化的,意味着数据(索引记录)是保存到磁盘上的,因为这样即使设备断电了,数据也…