大数据之Hive(二)

一、Hive的查询DQL

1. 查询的语法

关键字作用
distinct如果有多个字段,根据组合进行去重
all默认情况就是查询所有,可以省略
select 1 from table相当于给表增加了一列
where分组前过滤
having分组后过滤
order by全局有序,按照关键字去重分组,reduce置为1
distribute by结合sort by使用,指明按照什么进行分区
sort by底层根据reduce个数随机分成对应个有序小组
cluster bydistribute by 和sort by 关键字一样时可以用它代替,没啥用,鸡肋
join左右相连
union上下相连
limit n offset m限制查询个数, 从第m个开始数

2. 执行顺序

from > join on > where > group by > having > select > distinct > union > order by > limit
知道执行顺序的非常重要,建议书写SQL时也可以按照这个顺序来书写。不过select 建议在group by后即可书写了,因为必须先确定字段后才能进行分组后的排序。

3. 语法细节

  1. 比较null是否等于null
    • null <=> null
    • null is null
  2. limit n, m: 从n+1个元素开始数,数m个
  3. 使用rlike代替like来进行字符串匹配,上限比较高,可以使用正则表达式。

4. 聚合函数

  1. 所有聚合函数都是忽略null值的,count(1)来统计元素的个数时会统计null值
  2. 聚合函数不能和普通列一起查询,需要普通列和聚合函数一起查询需要将普通列放在group by中

5. group by关键字

当select查询的字段和group by后的字段一样时,本质上就是去重。如果不想缺失数据时,建议不要使用group by 关键字来进行分组。

6. join关键字

如果不写on条件,join操作就是两个表进行逐行拼接,即笛卡尔积。join可以使用等值连接或者非等值连接。join默认是内连接,只会取符合on条件的交集。

满外连接: select * from emp e full join dept d on e.deptno = d.deptno;

7. union和union all的区别

union all 是上下两表连接不去重,union会默认去重。

8. join多表联查的底层原理

优化前:先启动一个MR将a表和b表进行连接,之后将将连接结果再用一个MR和c表进行连接。
优化后:默认是开启优化的,会使用map join,将b表和c表都作为小表读入内存后,直接一个map过程完成连接操作。

9.四个排序关键字

order by deptno, salary 基本上等价于distribute by deptno sort by salary ,不过distribute by + sort by 效率更高,并且设置多个reduce时可以将数据分到不同的文件中。

二、函数

  1. 查询函数功能
    • show functions;
    • desc function 函数名
    • desc function extended 函数名
  2. 单行函数
    • 单行函数指每行数据处理一次,一进一出。
    • 数值函数
      • round(,2):四舍五入,保留2位小数
      • ceil: 数轴右边那个数
      • floor:数轴左边那个数
    • 字符串函数
      • substring(“atguigu”, -2):倒数后面2个都要
      • replace(): 一般用于日期格式替换
      • regexp_replace(str, regx, rep): 正则替换
      • nvl(A, B): 如果A为null, 则赋值为B
      • regexp() : 正则匹配
      • get_json_object():
        • $.属性名
        • $.[0].属性名
    • 日期函数:
      • unix_timestamp(): 转出时间戳
      • from_unixtime():转成日期
      • current_date(): 打印当前时间
      • current_timestamp(): 打印时间,精确到毫秒
      • datediff(date1, date2) : 计算日期的差值
      • date_add(): 日期的加减
      • date_format():日期格式转换, 一般用于日期的截取
    • 流程控制函数
      • case语句
      • if语句 if(a,b,c),如果a为真,则执行b,否则执行c
casewhen sal >= 2500 then '小康'when sal >=1500 and sal <2500 then '温饱'when sal < 1500 then '贫穷'
end 
  1. 聚合函数
    • 多行函数指多行数据处理一次,多进一出
    • collect_list(job): 收集分组后多行数据,合并成一个数组, 结果不去重
    • collect_set(job): 收集分组后的去重数据集
    • array_contains(arr, num): 判断数组中是否包含num元素
  2. 炸裂函数
    • 炸裂函数指一行数据返回多个结果,一进多出。
    • 适用于两个表都是多对多关系时,将数组分割为多行数据
    • udtf([a,b,c]) : 炸裂函数
      • explode(arr): 使用频率最高,用来炸数组
      • posexplode() : 带了的下标的炸裂函数
      • inline(): 用来炸裂结构体
    • Lateral View侧写: 一般搭配炸裂函数使用
select *
from movie 
lateral view explode(movies) temp as movie;
  1. 窗口函数
  • 概念:窗口函数是高阶函数,mysql8.0才有。窗口函数的执行时间在group by之后,having之前。
  • 分类
    • 窗口: lead, lag, first_value,last_value
    • 聚合:count,sum,min,max,avg
    • 分析:rank,row_number,dense_rank,ntile
  • 语法和含义
    • 函数()over([partition by][order by ][窗口子句])
    • 窗口就是你当前查询结果的所有数据,并且默认窗口最大从第一行到最后一行
    • 函数表示计算逻辑
    • over表示开窗,控制函数的计算范围
      (1) 窗口子句rows between表示 : 显示限定范围,默认是上无边界,下无边界
      • unbounded preceding 上无边界
      • current row 当前行
      • unbounded following下无边界
      • 1 preceding 上一行
      • 1 following 下一行
      • 默认情况,如果没有order by,窗口子句默认是上无边界,下无边界;如果有order by, 窗口子句默认是上无边界到当前行。
select user_name,order_date,order_amount,count(*)over(rows between unbounded preceding and unbounded following) cnt
from order

(2) partition by 属性名…, 开窗后再划分子窗口,每行再单独计算。可以有多个属性名来通过组合来划分的更细。
(3) order by 属性名…, 对细分子窗口进行排序。

select user_name,order_date,order_amount,sum(order_amount)over(partition by user_name order by order_date)from order_info;
  1. 常用窗口函数

6.1 跨行取数据

函数名作用
lag(字段名, 偏移量, 默认值)从当前位置向上偏移几行后取值,默认偏移量是1,默认值默认是null
lead(字段名, 偏移量, 默认值)从当前位置向下偏移几行取值, 默认偏移量是1,默认值是默认是null

6.2 取第一个和最后一个数据

函数名作用
first_value(字段名, false)取第一个数据,第二个参数表示是否忽略null
last_value(字段名, false)取最后一个数据,一般第二个参数均为false

6.3 排名函数

函数名作用
rank排名相同时会重复,有重复时下一个名次会消失,最后一个排名等于元素个数
dense_rank排名相同时会重复,有重复时下一个名次不会消失
row_number行号

6.4 分组分析

函数名作用
ntile(组的个数)将数据打上组名,可以通过组名取出对应组的数据
select user_name,order_date,order_amount,ntile(5)over(order by order_date) ntfrom order_info;

注意:

①如果你需要结果有序,那一定要排序,否则会正进反出(MR的环形缓冲区的反向溢写导致的)
② 如果在累加求和时,排序有重复值,累加的不是一行,而是一段

三、子查询

子查询分类

  1. 标量子查询,一个常量,单列值
  2. 列子查询,一个竖列
  3. 行子查询,一个子表

子查询出现的位置

位置子查询类别
select标量子查询
where标量子查询,列子查询
from行子查询, 列子查询

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

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

相关文章

二、VXLAN BGP EVPN基本原理

VXLAN BGP EVPN基本原理 1、BGP EVPN2、BGP EVPN路由2.1、Type2路由——MAC/IP路由2.2、Type3路由——Inclusive Multicast路由2.3、Type5路由——Inclusive Multicast路由 ————————————————————————————————————————————————…

Js使用ffmpeg进行视频剪辑和画面截取

ffmpeg 使用场景是需要在web端进行视频的裁剪&#xff0c;包括使用 在线视频url 或 本地视频文件 的裁剪&#xff0c;以及对视频内容的截取等功能。 前端进行视频操作可能会导致性能下降&#xff0c;最好通过后端使用java&#xff0c;c进行处理&#xff0c;本文的案例是备选方…

聚焦云原生安全|如何为5G边缘云和工业互联网应用筑牢安全防线

9月22日&#xff0c;2023年中国信息通信业发展高层论坛5G工业互联网分论坛在北京顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗受邀出席此次活动。 据悉&#xff0c;中国信息通信业发展高层论坛是致力于研究信息通信业发展新问题、新趋势&#xff0c;推动信息通信…

uniapp项目实践总结(二十三)网页和小程序应用打包教程

导语&#xff1a;当你的应用程序开发完成后&#xff0c;在发布到互联网之前&#xff0c;需要进行打包操作&#xff0c;包括网页端、小程序端的打包。 目录 准备工作网页打包小程序打包 准备工作 在打包之前&#xff0c;请保证你的 uniapp 应用程序编译到网页、小程序是可以正…

myabtis的缓存级别

文章目录 MyBatis缓存的区别是什么作用范围方面有哪些差异生命周期数据进行了存储缓存的优缺点 MyBatis缓存的区别是什么 MyBatis 提供了一级缓存和二级缓存&#xff0c;这两者的主要区别在于其作用范围和生命周期。 一级缓存&#xff1a;一级缓存是 SqlSession 级别的缓存。…

docker freeswitch mysql驱动相关

1. docker环境 的freeswitch要连mysql数据库 2. centos版本&#xff1a;7.9 3. mysql版本&#xff1a;mysql8.0 4. odbc版本&#xff1a;适用以下命令查询 rpm -qa | grep -E "unixODBC|mysql-connector-odbc" mysql-connector-odbc-5.2.5-8.el7.x86_64 unixODB…

标准化、逻辑回归、随机梯度参数估计

机器学习入门 数据预处理&#xff1a; 将&#xff1f;替换为缺失值 data data.replace(to_replace"?",valuenp.nan)丢掉缺失值 data.dropna(how"any) #howall删除全是缺失值的行和列 #haowany删除有缺失值的行和列将数据集划分成测试集和训练集 data[colu…

tensor数学运算

运算函数加add减sub乘mul除div矩阵相乘matmul次方pow平方根及其倒数sqrt 和 rsqrt向下/向上取整floor / ceil分离出整数/小数trunc / frac近似解四舍五入round裁剪clamp 1、矩阵元素的加减乘除 注意是矩阵间对应位置元素进行加减乘除 add 和 a torch.rand(3,4) b torch.…

ceph分布式存储部署

一、概述 是一个统一的分布式存储系统&#xff0c;设计初衷是提供较好的性能、可靠性和可扩展性。 特点 1、统一存储 虽然 ceph 底层是一个分布式文件系统&#xff0c;但由于在上层开发了支持对象和块的接口。所以在开源存储软件中&#xff0c;能够一统江湖。至于能不能千秋万…

面试打底稿④ 专业技能的第四部分

简历原文 抽查部分 了解Python的使用&#xff08;第一篇关于Python升级版本bug解决的文章斩获6W阅读&#xff09;&#xff0c;用python实现了几篇图像信息隐藏领 域论文的复现&#xff08;博客中有提及&#xff09;&#xff1b; 了解Django基本框架&#xff0c;写过Django框架的…

【深度学习实验】卷积神经网络(二):自定义简单的二维卷积神经网络

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 二维互相关运算&#xff08;corr2d&#xff09; 2. 二维卷积层类&#xff08;Conv2D&#xff09; a. __init__&#xff08;初始化&#xff09; b. forward(前向传…

Linux日期和时间管理指南:日期、时间、时区、定时任务和时间同步

文章目录 Linux日期和时间管理指南1. 简介1.1 Linux 日期和时间的重要性1.2 日期管理的需求 2. 查看当前日期和时间2.1 date 命令2.2 cal 命令2.3 查看硬件时钟 3. 设置系统日期和时间3.1 设置日期3.2 设置时间3.3 设置硬件时钟 4. 时区管理4.1 查看当前时区4.2 修改系统时区4.…

第十四届蓝桥杯大赛软件赛决赛 C/C++ 大学 B 组 试题 B: 双子数

[蓝桥杯 2023 国 B] 双子数 试题 B: 双子数 【问题描述】 若一个正整数 x x x 可以被表示为 p 2 q 2 p^2 \times q^2 p2q2&#xff0c;其中 p p p、 q q q 为质数且 p ≠ q p \neq q pq&#xff0c;则 x x x 是 一个 “双子数”。请计算区间 [ 2333 , 233333333333…

Java常见的两种加密方式

Java常见加密解密方式 本文主要介绍一种对称加密和一种单向加密 AES > 对称加密 MD5 > 非对称加密 AES * 对称加密* AES&#xff08;AdvancedEncryption Standard&#xff0c;高级数据加密标准&#xff09;* 算法支持128位、192位和256位的秘钥长度&#xff0c;加密速度比…

千兆光模块和万兆光模块的差别是什么?

千兆光模块和万兆光模块是目前使用最广泛的光模块之一&#xff0c;它们之间有什么差别呢&#xff1f;下面从传输速率、光纤类型、距离等多个方面详细分析千兆光模块和万兆光模块的差别。 一、传输速率 千兆光模块的传输速率为1.25Gbps&#xff0c;而万兆光模块的传输速率为10…

记录一下 malloc 是如何分配内存的

系统深入学习笔记-malloc 以 32 位系统为例&#xff0c;&#xff0c;通过这张图你可以看到&#xff0c;用户空间内存从低到高分别是 6 种不同的内存段&#xff1a; 代码段&#xff0c;包括二进制可执行代码&#xff1b;数据段&#xff0c;包括已初始化的静态常量和全局变量B…

燃气安全如何保障?万宾燃气管网监测系统时刻感知管网运行态势

近年来随着我国城镇化建设的加快&#xff0c;燃气已经成为每个家庭的必需品。然而&#xff0c;每年夏季频繁发生的燃气爆炸事故&#xff0c;已经严重危害人民生命财产安全危害社会公共安全和公共利益。为了保障燃气安全运行&#xff0c;近日&#xff0c;许多城市都在大力推进燃…

深入浅出Java的多线程编程——第二篇

目录 前情回顾 1. 中断一个线程 1.1 中断的API 1.2 小结 2. 等待一个线程 2.1 等待的API 3. 线程的状态 3.1 贯彻线程的所有状态 3.2 线程状态和状态转移的意义 4. 多线程带来的的风险-线程安全 (重点) 4.1 观察线程不安全 4.2 线程安全的概念 4.3 线程不安全的原因…

代码随想录算法训练营第23期day7| 454.四数相加II 、383. 赎金信 、15. 三数之和、18. 四数之和

目录 一、&#xff08;leetode 454&#xff09;四数相加II 二、&#xff08;leetcode 383&#xff09;赎金信 暴力解法 哈希法 三、&#xff08;leetcode 15&#xff09;三数之和 四、&#xff08;leetcode 18&#xff09;四数之和 一、&#xff08;leetode 454&#xf…

电涌保护器外部专用脱离器(SCB)后备保护器产品说明

为了更好的满足不同应用场景的市场需求&#xff0c;地凯科技经过两年多不断的研发与试验&#xff0c;对电涌保护器外部专用脱离器 SCB 后备保护器产品&#xff08;以下简称 SCB&#xff09;进行了技术升级&#xff0c;升级后的SCB 产品在电气性能、外观尺寸、智能化和可靠性等方…