2023.11.14-hive的类SQL表操作之,4个by区别

目录

1.表操作之4个by,分别是

2.Order by:全局排序

3.Cluster by

4.Distribute by :分区

5. Sort by :每个Reduce内部排序

6.操作练习

步骤一.创建表

步骤二.加载数据

 步骤三.验证数据


1.表操作之4个by,分别是

order by 排序字段名 

cluster by 分桶并排序字段名

distribute by字段名sort by字段名 

2.Order by:全局排序

order by排序永远都是全局排序,不受reduces数量影响,每次只用1个reduces

当你使用order by时,默认只走一个reduce,和你设多少个reduce个数无关;

select * from 表名 order by 表内字段名;

缺点:当数据量非常大时,耗时太长,效率低下,适用于数据量较小的场景;
优点:数据全局排序;

 

3.Cluster by

cluster by 字段名:  分桶且正序排序  

弊端: 分桶和排序是同一个字段,相对不灵活

注意: 需要你预先设置reduce个数,结果各个reduce文件内部有序,全局无序;

包含了分桶与排序,但排序默认是升序,无法与SORT BY,ASC或者DESC一起使用

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量
set mapreduce.job.reduces = ; --修改为所需的数量

select * from 表名 cluster by 表内字段名;

4.Distribute by :分区

distribute by 字段名 sort by 字段名,distribute by负责分,sort by负责排序, 相对比较灵活

控制特定的key到指定的reducer,方便后续的聚集操作,类似MR中partition(自定义分区),一般结合sort by使用;

注意: 需要你预先设置reduce个数,结果各个reduce文件内部有序,全局无序;

1. distribute by的分区规则是根据分区字段的hash码与reduce的个数进行模除后,余数相同的分到一个区。
2. Hive要求distribute by语句要写在sort by语句之前;

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量
set mapreduce.job.reduces = ; --修改为所需的数量

select * from 表名 distribute by 字段名 sort by 字段名 asc|desc ;

5. Sort by :每个Reduce内部排序

distribute by 字段名 sort by 字段名,distribute by负责分,sort by负责排序, 相对比较灵活

对于大规模的数据集 order by 的效率非常低。在很多情况下,并不需要全局排序,此时可以使用 sort by

Sort by 为每个 reducer 产生一个排序文件。每个 Reducer 内部进行排序,对全局结果集来说不是排序。

适用于数据量较大,但对排序要求不严格的场合,可以大幅度提升执行效率;

注意: 需要你预先设置reduce个数,结果各个reduce文件内部有序,全局无序;

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量
set mapreduce.job.reduces= ; --修改为所需的数量

select * from 表名 distribute by 字段名 sort by 字段名 asc|desc ;

6.操作练习

现有学生表

需求:按照性别进行分类,再按照年龄进行降序排序

步骤一.创建表

-- 创建表
create  table stu(
    id int,
    name string,
    gender string,
    age int,
    cls string
)row format delimited fields terminated by ',';

步骤二.加载数据

学生表txt文件

 

上传文件到hdfs中,并加载到表

load data inpath '/input/students.txt' into table stu;

 步骤三.验证数据

select * from stu;

进行分桶排序查询

--查询reduces的数量
set mapreduce.job.reduces;  --默认-1个

--修改reduces数量为2
set mapreduce.job.reduces=2; --修改后为2

select * from stu  distribute by gender sort by age desc ;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang实现一个一维结构体,根据某个字段排序

package mainimport ("fmt""sort" )type Person struct {Name stringAge int }func main() {// 创建一个一维结构体切片people : []Person{{"Alice", 25},{"Bob", 30},{"Charlie", 20},{"David", 35},{"Eve…

Spring-boot Mybatis-plus 实战应用

文章目录 前言一、springBoot 集成mybatis-plus1.1 maven 引入依赖:1.2 配置数据源:: 二、使用:2.1 mysql 打印执行的sql 设置:2.2 分页查询:2.3 条件构造器:2.3.1 QueryWrapper 查询:2.3.2 Upd…

Linux软硬链接

文章目录 🐋1. 建立软硬链接现象🐠2. 软硬链接🪸2.1 软链接🪸2.2 硬链接 🐦3. 应用场景🪹3.1 软链接应用场景🪹3.2 硬链接应用场景 🐋1. 建立软硬链接现象 我们这里给file.txt建立软…

手机-电脑互传软件:在 Windows 上安装和使用 Localsend 的完整指南

引言: Localsend 是一个简单而强大的本地文件传输工具,它可以让您在本地网络中快速、安全地共享文件和文件夹。本文将介绍如何在 Windows 上安装和使用 Localsend,以便您可以轻松地在本地网络中共享文件。 电脑端安装: 下载&…

基于单片机的电子万年历(论文+源码)

1.系统设计 本次基于proteus仿真的电子万年历的设计,对功能设计如下: 整个系统可以实现显示年、月、日、吋、分、秒的信息显示。带有温度检测功能,检测范围为0-100℃。具有闹钟功能,可以通过按键设定闹钟时间;可以通…

【python】—— 控制语句和组合数据类型(其一)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

全方位移动机器人 Stanley 轨迹跟踪 Gazebo 仿真

全方位移动机器人 Stanley 轨迹跟踪 Gazebo 仿真 本来打算今天出去跑一下 GPS,但是下雨,作罢 添加参考轨迹信息 以下三个功能包不需要修改: mrobot:在 Rviz 和 Gazebo 中仿真机器人cmd_to_mrobot:运动学解算&#…

冯诺依曼体系和操作系统简单介绍

冯诺依曼体系和操作系统简单介绍 冯诺依曼体系 输入设备:键盘,话筒,摄像头,usb,鼠标,磁盘/ssd,网卡等等输出设备:显示器,喇叭,打印机,磁盘&#…

Path Aggregation Network for Instance Segmentation(2018.9)

文章目录 Abstract1. IntroductionOur FindingsOur Contributions 3. Framework3.1. Bottom-up Path AugmentationMotivationAugmented Bottom-up Structure 3.2. Adaptive Feature PoolingMotivationAdaptive Feature Pooling Structure 3.3. Fully-connected FusionMask Pred…

如何从 iCloud 恢复永久删除的照片?答案在这里!

在数字时代,丢失珍贵的照片可能会令人痛苦。然而,了解如何从 iCloud 恢复永久删除的照片可以带来一线希望。无论是意外删除还是技术故障,本指南都提供了 2023 年的最新方法来找回您的珍贵记忆。发现分步解决方案并轻松重新访问您的照片库。不…

Linux Ubuntu系统中添加磁盘

在学习与训练linux系统的磁盘概念、文件系统等,需要增加磁盘、扩展现有磁盘容量等,对于如何添加新的磁盘,我们在“Linux centos系统中添加磁盘”中对centos7/8版本中如何添加、查看、删除等,作了介绍,而对Ubuntu版本中…

css技巧分享(优惠券缺角样式实现)

主要知识点:radial-gradient radial-gradient() CSS 函数创建一个图像,该图像由从原点辐射的两种或多种颜色之间的渐进过渡组成。它的形状可以是圆形或椭圆形。函数的结果是 数据类型的对象。这是一种特别的 。 .coupon{width: 190rpx;height: 194rpx;b…

腾讯滑块验证

不在同一起跑线,力所能及尽力就好。 之前的文章里介绍腾讯系列点选类型的验证,然后的话也是有时间去看了无感验证跟这个滑块验证,就放在一起来说说吧,之前的文章在这:TX验证码_逆向学习之旅的博客-CSDN博客 这个tdc_pa…

《使用EasyExcel在Excel中增加序号列的方法》

《使用EasyExcel在Excel中增加序号列的方法》 1、简介2、正文3、核心代码4、使用方法5、效果 1、简介 在处理Excel文件时,有时候需要为表格增加序号列。本文介绍了如何使用Java代码实现在Excel中增加序号列的功能,并提供了一个示例代码。 2、正文 在处理…

ping: www.baidu.com: Name or service not known解决办法

解决服务器无法ping通外网问题 1、问题描述: 配置了网卡信息,发现还是无法访问外网,并报ping: www.baidu.com: Name or service not known信息 2、问题原因: 这就是外网没开通好 3、解决方法: 修改网卡文件&#xff…

在qt的设计师界面没有QVTKOpenGLWidget这个类,只有QOpenGLWidget,那么我们如何得到QVTKOpenGLWidget呢?

文章目录 前言不过,时过境迁,QVTKOpenGLWidget用的越来越少,官方推荐使用qvtkopengnativewidget代替QVTKOpenGLWidget 前言 在qt的设计师界面没有QVTKOpenGLWidget这个类,只有QOpenGLWidget,我们要使用QVTKOpenGLWidget,那么我们如何得到QVTKOpenGLWidget呢? 不过,时过境迁,Q…

Vue中的watch的使用

先看下Vue运行机制图 那么我们思考一件事,vue是通过watcher监听数据的变化然后给发布-订阅,这样实现了dom的渲染,那么我们思考一件事,我们往往需要知道一个数据的变化然后给页面相应的渲染,那么我们工作中在组件中的数…

【nlp】2.3 LSTM模型

LSTM模型 1 LSTM介绍2 LSTM的内部结构图2.1 LSTM结构分析2.2 Bi-LSTM介绍2.3 使用Pytorch构建LSTM模型2.4 LSTM优缺点1 LSTM介绍 LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体,与经典RNN相比能够有效捕捉长序列之间的语义关联,缓解梯度消失或爆炸…

Windows10下Docker安装Mysql5.7

文章目录 Windows10下Docker安装Mysql5.7环境说明打开命令工具搜索镜像拉取镜像查看所有镜像启动镜像查看容器查看所有容器查看运行中容器 进入容器进入容器命令输入账号命令输入密码 添加mysql的远程账号创建一个数据库 Windows10下Docker安装Mysql5.7 环境说明 docker&…

几款数据备份软件调研与使用

目的 为确保企业数据安全、避免被非法入侵、数据勒索、破坏业务连续性、及时对重要数据、业务数据、程序、进行备份做到有备无患。遇到突发事件可使用备份数据快速恢复。保障系统正常运行 Filezilla工具介绍: FileZilla是一个免费开源的FTP软件,分为客户…