Hive的基本操作(查询)

1、基础查询

基本语法

select 字段列表|表达式|子查询
from(子查询|视图|临时表|普通表)
where [not] 条件A and|or 条件B				--先:面向原始行进行筛选
group by 字段A[,字段B,...]					=> 分组【去重处理】
having 聚合条件(非原始字段条件)				--再:针对聚合后的字段进行二次筛选
order|sort|cluster by 字段A[,字段B,...]		--后:全局排序(非limit的最后一句)	走mapreduce
limit N(前N条记录) | M(行号偏移量),N(记录数)

1.where子句的条件格式

一:关系运算符
关系运算符:> , >= , < , <= , =【等值判断】 , <>【不等于】
  • 延伸:between (>=)SMALL_VALUE and (<=)BIG_VALUE; 【面向于 数值或日期】
二:逻辑运算符
逻辑运算符:not【非】 , and【与】 , or【或】
  • 延伸
--if函数:
if(BOOLEN_EXPR,VALUE_IF_TRUE,VALUE_IF_FALSE_OR_NULL)案例:select user_id,`if`(order_amount < 1000,'low','high') as consumptionfrom test1wwhere user_gender = '女'limit 100;结果展示:user_id	consumption652,high376,high537,high280,high23,high--空值判断:
1.nvl(VALUE_A,VALUE_B)	=>	VALUE_A为空值(null),则返回VALUE_B。否则返回VALUE_A
2.isnull(VAL)		=>	如果 VAL 为 null,则返回 1 。否则返回 0--case when函数:
case EXPR when V1 then VAL1 when V2 then VAL2 ... else VALN end <=> switch ... case
case when 条件1 then VAL1 when 条件2 then VAL2 ... else VALN end <=> if ... else if ...案例:select user_id,case when order_amount<1000 then '低消费人群' when order_amount<5000 then '中等消费人群' else '高消费人群' end as levelfrom test1wwhere user_gender = '女'limit 100;结果展示:user_id	level652,高消费人群376,高消费人群537,低消费人群280,中等消费人群...
三:通配符

模糊查询

基本语法:like '% | _'	【模糊匹配】讲解:% => 任意个任意符号_ => 一个任意符号案例:select "张无极" like '张%';		=> trueselect "张无极" like '张_';		=> false

正则匹配

基本语法:rlike '正则表达式'如:'^//d+$'案例:select "like" rlike '^[a-zA-Z]{2,4}$';	  =>true

2.排序

1order by 表达式[field|func|case...when...]    		---【全局排序】:性能差优化:在order by B 之前,可以先对数据进行 distribute by A 与 sort by B=> 先部分排序,后全局排序2、sort by FIELD_N 								  --在【每一个reducer端】排序解释:当reducer 的数量为1时,等同于 order byFIELD_N 必须是select字段列表中的一员一般和 distribute by 配合使用3、cluster by 		--cluster by 字段A = distribute by 字段A + sort by 字段A

3.分组

1group by 表达式(field|func|case...when) 	--为了聚合而分组,否则类似去重(代替distinct)目的:按照某些条件对数据进行分组并进行聚合操作,使用 group by多分组:1.group by A,B,C 		grouping sets(B,(A,C),(B,C))--指定多个【分组】为:B,(A,C),(B,C)2.group by cube(A,B,C) 		--排列组合后的所有分组:A,B,C,(A,B),(A,C),(B,C),(A,B,C)3.group by rollup(A,B,C)	--最左原则的所有分组:A,(A,B),(A,B,C)2、distribute by 表达式(field|func|case...when)目的:为了将数据分区,仅仅将数据分发到多个节点上并行处理,使用 distribute by解释:1.不改变原始行数2.类似于 hadoop job 中的 Partitioner。 【默认是采用hash算法】3.指定按哪个字段的hashcode分区,配合【预先设置reducer数量】注意:distribute by【决定进哪个reducer】与sort by【在reducer中排序】一般搭配使用的distribute by通常使用在SORT BY语句之前

小型案例

with product_total as ( select order_item_product_id product_id,sum(order_item_subtotal) totalfrom cb_order_itemsgroup by order_item_product_id
)
select product_id,total
from product_total
distribute by product_id
sort by total desc;
多分组案例
1.grouping sets 案例:✔create temporary table tmp_cb_order_ymbsc_sets asselect year,month,dept_id,cate_id,prod_idgrouping__id,sum(quantity) as quantity,round(sum(amount)) as amountfrom tmp_cb_order_ymbscgroup by year,month,dept_id,cate_id,prod_idgrouping sets(prod_id,(dept_id,cate_id),(year,month),(year,month,prod_id))order by grouping__id;-------------------------------------寻找哪几组【去重】:select grouping__idfrom tmp_cb_order_ymbsc_setsgroup by grouping__id;--------------------------------------- grouping__id:6 :	year,month,prod_id7 :	year,month25 : dept_id,cate_id 	30 : prod_id2.cube 案例:【不常用】selectyear(order_date) as year,month(order_date) as month,day(order_date) as day,count(*) as count,grouping__idfrom cb_ordersgroup by cube (year(order_date),month(order_date),day(order_date))order by grouping__id;3.rollup 案例:【不常用】selectyear(order_date) as year,month(order_date) as month,day(order_date) as day,count(*) as count,grouping__idfrom cb_ordersgroup by rollup (year(order_date),month(order_date),day(order_date))order by grouping__id;

2、子查询

基本语法

select 			可以出现子查询(查某个字段值,与主查询存在逻辑主外键关系)
from 			可以出现子查询(数据表的子集 select F1,...,FN from T where ... group by ...)
where 			可以出现子查询(FIELD in|=|>= (select ONLY_ONE_FIELD_IN ...))
group by FIELD|substr(FIELD,0,4),...
having 			可以出现子查询(FIELD in|=|>= (select ONLY_ONE_FIELD_IN ...))
order by FIELD|substr(FIELD,0,4),...

常用语法【from子查询】

select 字段列表|表达式|子查询
from(select 字段列表|表达式|子查询					 ---先进行内部的查询from TABLEwhere [not] 条件A and|or 条件B...
)												---后进行外部的查询
where [not] 条件A and|or 条件B						--后=>先:面向原始行进行筛选
group by 字段A[,字段B,...]	
order by 字段A[,字段B,...]							--后=>再:针对聚合后的字段进行二次筛选
limit N(前N条记录) | M(行号偏移量),N(记录数)		--后=>后:全局排序(非limit的最后一句)

3、CTE

基本语法

with 
SUB_ALIA as(...),
SUB_ALTER as(select...from SUB_ALIA...)
select...

小型案例

withtotal_amount as(select sum(order_amount) totalfrom hive_internal_par_regex_test1wwhere year>=2016group by user_gender, user_idhaving total>=20000),level_amount as(select round(total/10000) as levelfrom total_amount)
select level,count(*) as level_count
from level_amount
group by level;结果展示:level level_count2,1623,1254,265,5

4、联合查询

数据准备

Class表:
+-------+---------+
|classId|className|
+-------+---------+
|      1|  yb12211|
|      2|  yb12309|
|      3|  yb12401|
+-------+---------+Student表:
+-----+-------+
| name|classId|
+-----+-------+
|henry|      1|
|ariel|      2|
| jack|      1|
| rose|      4|
|jerry|      2|
| mary|      1|
+-----+-------+

三种主要形式

一:内连接【inner join】

两集合取交集

select A.内容,....,B.内容,...                              =>字段别名:提高筛选的性能
from TABLE_A as A												
inner join TABLE_B as B
on A.主键=B.外键 (and A.fa = VALUE...)  多表√ 两表√        	=>表进行合并时进行【连接条件】
where A.fa = VALUE;                     两表√             =>合并后进行【条件筛选】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
inner join Class C
on S.classId = C.classId结果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211||ariel|      2|      2|  yb12309|| jack|      1|      1|  yb12211||jerry|      2|      2|  yb12309|| mary|      1|      1|  yb12211|+-----+-------+-------+---------+
二:外连接
左外连接【left join】

两个集合取左全集,右交集

select A.内容,....,B.内容,...                              	     =>字段别名:提高筛选的性能
from TABLE_A as A                 									【A为主表】
left [outer] join TABLE_B as B		    							【B为从表】
on A.主键|外键=B.外键|主键 (and A.fa = VALUE...)    多表√ 两表√     =>表进行合并时进行【连接条件】
where A.fa = VALUE;                                 两表√        =>合并后进行【条件筛选】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
left join Class C
on S.classId = C.classId结果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211||ariel|      2|      2|  yb12309|| jack|      1|      1|  yb12211|| rose|      4|   null|     null||jerry|      2|      2|  yb12309|| mary|      1|      1|  yb12211|+-----+-------+-------+---------+
右外连接【right join】

两集合取右全集,左交集

select A.内容,....,B.内容,...                              		=>字段别名:提高筛选的性能
from TABLE_A as A                 										【A为主表】
right [outer] join TABLE_B as B		    								【B为从表】
on A.主键|外键=B.外键|主键 (and A.fa = VALUE;)    多表√ 两表√      =>表进行合并时进行【连接条件】
where A.fa = VALUE;                               两表√         =>合并后进行【条件筛选】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
right join Class C
on S.classId = C.classId结果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+| mary|      1|      1|  yb12211|| jack|      1|      1|  yb12211||henry|      1|      1|  yb12211||jerry|      2|      2|  yb12309||ariel|      2|      2|  yb12309|| null|   null|      3|  yb12401|+-----+-------+-------+---------+
全外连接【full join】

两集合取左右全集

select A.内容,....,B.内容,...                              		 =>字段别名:提高筛选的性能
from TABLE_A as A                 										【A为主表】
full [outer] join TABLE_B as B		    								【B为从表】
on A.主键|外键=B.外键|主键 (and A.fa = VALUE;)    多表√ 两表√       =>表进行合并时进行【连接条件】
where A.fa = VALUE;                               两表√          =>合并后进行【条件筛选】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
full join Class C
on S.classId = C.classId结果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211|| jack|      1|      1|  yb12211|| mary|      1|      1|  yb12211|| null|   null|      3|  yb12401|| rose|      4|   null|     null||ariel|      2|      2|  yb12309||jerry|      2|      2|  yb12309|+-----+-------+-------+---------+
三:交叉连接【cross join】

两集合取笛卡尔积

select A.内容,....,B.内容,...                              		 =>字段别名:提高筛选的性能
from TABLE_A as A                 										【A为主表】
cross join TABLE_B as B		    										【B为从表】
on A.主键|外键=B.外键|主键 (and A.fa = VALUE;)    多表√ 两表√       =>表进行合并时进行【连接条件】
where A.fa = VALUE;                               两表√          =>合并后进行【条件筛选】
group by ...
having ...
order by ...
limit ...

小型案例

select * from Student S
cross join Class C
on S.classId = C.classId结果展示:+-----+-------+-------+---------+| name|classId|classId|className|+-----+-------+-------+---------+|henry|      1|      1|  yb12211||henry|      1|      2|  yb12309||henry|      1|      3|  yb12401||ariel|      2|      1|  yb12211||ariel|      2|      2|  yb12309||ariel|      2|      3|  yb12401|| jack|      1|      1|  yb12211|| jack|      1|      2|  yb12309|| jack|      1|      3|  yb12401|| rose|      4|      1|  yb12211|| rose|      4|      2|  yb12309|| rose|      4|      3|  yb12401||jerry|      2|      1|  yb12211||jerry|      2|      2|  yb12309||jerry|      2|      3|  yb12401|| mary|      1|      1|  yb12211|| mary|      1|      2|  yb12309|| mary|      1|      3|  yb12401|+-----+-------+-------+---------+

5、联合查询

何为联合查询?

  • 纵向拼接表,高变大

  • 查询字段的【数量】与【类型】必须相同,字段名是以【第一张表为准】。

union与union all的区分

  • union:合并后删除重复项(去重)

  • union all:合并后保留重复项 ✔

小型案例

数据准备

语句

select age,job from bank_client_info_3
union all
select age,job from bank_client_info_3;

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

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

相关文章

JMeter案例分享:通过数据验证的错误,说说CSV数据文件设置中的线程共享模式

前言 用过JMeter参数化的小伙伴&#xff0c;想必对CSV Data Set Config非常熟悉。大家平时更关注变量名称&#xff0c;是否忽略首行等参数&#xff0c;其余的一般都使用默认值。然而我最近遇到一个未按照我的预想读取数据的案例&#xff0c;原因就出在最后一个参数“线程共享模…

深度学习中激活函数的演变与应用:一个综述

摘要 本文全面回顾了深度学习中激活函数的发展历程,从早期的Sigmoid和Tanh函数,到广泛应用的ReLU系列,再到近期提出的Swish、Mish和GeLU等新型激活函数。深入分析了各类激活函数的数学表达、特点优势、局限性以及在典型模型中的应用情况。通过系统的对比分析,本文探讨了激…

树莓派配置vsftpd主动模式

sudo apt-get install vsftpd /etc/vsftpd.conf anonymous_enableNO # 禁用匿名用户 local_enableYES # 允许本地用户登录 write_enableYES # 允许修改权限 #chroot_local_userYES # 将用户限制在其主目录 systemctl restart vsftpd sudo adduser ftpuser sudo pa…

详解MySQL中的递归查询

MySQL中的递归查询主要通过WITH RECURSIVE语句来实现&#xff0c;这在处理具有层级关系或树形结构的数据时非常有用。下面将通过一个具体的例子来详细解释如何在MySQL中使用递归查询。 示例场景 假设我们有一个部门表&#xff08;departments&#xff09;&#xff0c;其中包含…

昇思训练营打卡第二十五天(RNN实现情感分类)

RNN&#xff0c;即循环神经网络&#xff08;Recurrent Neural Network&#xff09;&#xff0c;是一种深度学习模型&#xff0c;特别适用于处理序列数据。以下是对RNN的简要介绍&#xff1a; RNN的特点&#xff1a; 记忆性&#xff1a;与传统的前馈神经网络不同&#xff0c;R…

老板新招的牛人,竟然用1天搭建了一套完整的仓库管理系统!

仓储管理系统是什么&#xff1f; 仓储管理系统&#xff08;WMS&#xff09;是一个全面的软件解决方案&#xff0c;旨在帮助企业优化仓库管理流程、管理和控制日常仓库运营。通过数学模型和信息手段&#xff0c;对仓库管理的各个环节进行优化和调控&#xff0c;涵盖了从货物入库…

使用网关和Spring Security进行认证和授权

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

jquery发送jsonp请求

使用 jQuery 发送 JSONP 请求相对来说比较简单&#xff0c;以下是示例代码&#xff1a; $.ajax({url: "http://example.com/data",dataType: "jsonp",jsonp: "callback",jsonpCallback: "myCallback" }).done(function(response) {//…

Linux命令更新-sort 和 uniq 命令

简介 sort 和 uniq 都是 Linux 系统中常用的文本处理命令。 sort 命令用于对文件内容进行排序。 uniq 命令用于去除文件中重复出现的行。 1. sort 命令 命令格式 sort [选项] [文件]选项&#xff1a; -n: 按照数字进行排序 -r: 反向排序 -c: 统计每个元素出现的次数 -…

怎么录制视频?电脑录制,试试这3种方法

在数字化快速发展的时代&#xff0c;视频已经成为我们传递信息、分享生活、表达情感的重要载体。每一个人都希望自己能够掌握视频录制技巧&#xff0c;轻松驾驭影像的力量&#xff0c;创造出属于自己的视觉盛宴。 那么&#xff0c;怎么录制视频呢&#xff1f;首先选择一款好用…

vue脚手架配置代理请求

在 Vue 脚手架中&#xff0c;可以通过配置vue.config.js文件来设置代理请求&#xff0c;以解决跨域问题或实现其他代理需求。以下是两种常见的配置方式&#xff1a; 方法一&#xff1a; 在vue.config.js中添加如下配置&#xff1a; module.exports {devServer: {proxy: http…

《信息与电脑(理论版)》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《信息与电脑(理论版)》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《信息与电脑(理论版)》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;北京电子控股有限责任公司 主办…

AI安全入门-人工智能数据与模型安全

参考 人工智能数据与模型安全 from 复旦大学视觉与学习实验室 文章目录 0. 计算机安全学术知名公众号1. 概述数据安全模型安全 3. 人工智能安全基础3.1 基本概念攻击者攻击方法受害者受害数据受害模型防御者防御方法威胁模型目标数据替代数据替代模型 3.2 威胁模型3.2.1 白盒威…

实践致知第16享:设置Word中某一页横着的效果及操作

一、背景需求 小姑电话说&#xff1a;现在有个word文档,里面有个表格太长&#xff08;如下图所示&#xff09;&#xff0c;希望这一个设置成横的&#xff0c;其余页还是保持竖的&#xff01; 二、解决方案 1、将鼠标放置在该页的最前面闪烁&#xff0c;然后选择“页面”》“↘…

Python面经

文章目录 Python基本概念1. Python是**解释型**语言还是**编译型**语言2. Python是**面向对象**语言还是面向过程语言3. Python基本数据类型4.append和 extend区别5.del、pop和remove区别6. sort和sorted区别介绍一下Python 中的字符串编码is 和 的区别*arg 和**kwarg作用浅拷…

Electron 进程间通信

文章目录 渲染进程到主进程&#xff08;单向&#xff09;渲染进程到主进程&#xff08;双向&#xff09;主进程到渲染进程 &#xff08;单向&#xff0c;可模拟双向&#xff09; 渲染进程到主进程&#xff08;单向&#xff09; send &#xff08;render 发送&#xff09;on &a…

【Stable Diffusion】(基础篇三)—— 图生图基础

图生图基础 本系列笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲解如何使用S…

客户端与服务端之间的通信连接

目录 那什么是Socket? 什么是ServerSocket? 代码展示&#xff1a; 代码解析&#xff1a; 补充&#xff1a; 输入流&#xff08;InputStream&#xff09;&#xff1a; 输出流&#xff08;OutputStream&#xff09;&#xff1a; BufferedReader 是如何提高读取效率的&a…

K8s集群初始化遇到的问题

kubectl describe pod coredns-545d6fc579-s9g5s -n kube-system 找到原因1&#xff1a;CoreDNS Pod 处于 Pending 状态的原因是集群中的节点都带有 node.kubernetes.io/not-ready 污点 journalctl -u kubelet -f 14:57:59.178592 3553 remote_image.go:114] "PullIma…

《简历宝典》12 - 简历中“项目经历”,内功学习 - 下篇

这一小节呢&#xff0c;我们继续说简历中 “项目经历” 的一些内功心法。因为项目经历比较核心&#xff0c;所以说完了&#xff0c;内功呢&#xff0c;我们会着重说一下 实战部分。 目录 1 所用技术的考虑 2 自我成长的突出 3 综合使用STAR法则 4 小节 1 所用技术的考虑 …