大数据学习10之Hive高级

1.Hive高级

        将大的文件按照某一列属性进行GROUP BY 就是分区,只是默认开窗存储;

        分区是按行,如一百行数据,按十位上的数字分区,则有十个分区,每个分区里有十行;

        分桶是根据某个字段哈希对桶数取余,相同值的放同一个桶里。

        分桶里的数据不是某个字段都相同,分区是;

1.1分区

1.1.1静态分区

        即手动将一个大数据量的文件,即表文件,按某个字段分成多个文件,多个表,默认最大是一百个分区

        建表时使用 PARTITION BY(part int)指定分区字段,并且分区的字段不包含在建表字段中,但表创建后会包括分区字段,建表后根据分区路径载入手动分区后的表文件。

1.1.2动态分区

由MapReduce执行操作时根据数据内容的特点量级进行数据的分区

1.1.2.1严格分区

通过 hive.mapred.mode=(strict/nostrict)设置严格模式和非严格模式

严格模式:

因为分区后不带分区指定参数去查询全表数据,效率比直接查询全表数据更低,为了防止这种查询,严格模式就禁止了创建了分区的表进行不带分区参数的全表查询

1.1.2.2载入数据
-- 从本地载入
LOAD DATA LOCAL INPATH '/root/teacher.txt' INTO TABLE t_teacher_d;
-- 从 HDFS 载入
LOAD DATA INPATH '/teacher.txt' INTO TABLE t_teacher_d;
-- 通过查询载入
INSERT INTO OVERWRITE TABLE t_teacher_d PARTITION (grade, clazz) SELECT * FROM t_teacher;

1.1.3外部分区表

与内部分区表的分区操作相同,只是外部分区表在删除时只会删除元数据映射,而不会真的删除表的数据。

1.2分桶

1.2.1原理

        如,分10桶,对id列计算hash值 然后 hash(id)%10 ,相同结果的放同一个桶里

        计算公式: bucket num = hash_function(bucketing_column) mod num_buckets 。

1.2.2分桶优势

        方便抽样

        提高连表查询效率

1.2.3分桶实践

        开启分桶功能:
        SET hive.enforce.bucketing=true; 默认false;

        设置 Reduce 的个数,默认是 -1,-1 时会通过计算得到 Reduce 个数,一般 Reduce 的数量与表中的 BUCKETS 数量一致,有些时候环境无法满足时,通常设置为接近可用主机的数量即可

        SET mapred.reduce.tasks=-1;

        语法:

CREATE TABLE 表名(字段1 类型1,字段2,类型2 )
CLUSTERED BY (表内字段)
SORTED BY (表内字段)
INTO 分桶数 BUCKETS

        载入数据:

        用外表全表查询走MapReduce覆盖插入至分桶表;

        直接载入也可以。

1.3数据抽样(了解)

1.3.1块抽样

截取表数据,速度慢,不随机;

1.3.2分桶抽样

截取桶数据,速度快,不随机;

1.3.3随机抽样

随机查询,速度慢,真随机;

1.4事务(了解)

# 开启 hive 并发
SET hive.support.concurrency=true;
# 配置事务管理类
SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;

  完整事务需要创建事务表

1.5索引(了解)

注:3.x.y版本被移除

出于以下原因,Hive 3.0.0 移除了索引功能:
        由于 Hive 是针对海量数据存储的,创建索引需要占用大量的空间,最主要的是 Hive 索引无法自动进行刷新,也就是当新的数据加入时候,无法为这些数据自动加入索引;
        Hive 索引使用过程繁杂,且性能一般;
        在可以预见到分区数据非常庞大的情况下,分桶和索引常常是优于分区的。而分桶由于 SMB Join 对关联键要求严格,所以并不是总能生效;
        Hive 的索引与关系型数据库中的索引并不相同,比如,Hive 不支持主键或者外键;
        很多时候会优先考虑使用物化视图和列式存储文件格式来加快查询速度,大表则分区分桶,使用 SMB Join。

1.6视图/物化视图

        视图 view是虚表,可以比作封装查询语句,类似子查询;

        物化视图 Materialized View是实际存在的表,由查询语句查询出结果后将结果储存;

        物化视图会自动刷新查询结果,并且拥有查询重写机制,即物化视图结果包含当前查询内容的化,就会走物化视图查询,避免走MapReduce。

1.7高级查询*

1.7.1行转列

explode ()展开函数

EXPLODE() 可以将 Hive 一行中复杂的 Array 或者 Map 结构拆分成多行,那如何将某个列的数据转为数组呢?可以配置 SPLIT 函数一起使用。

1.7.2列转行

 collection_list/set 集合函数 

COLLECT_SET() 和 COLLECT_LIST() 可以将多行数据转成一行数据,区别就是 LIST 的元素可重复而 SET 的元素是去重的。

1.7.3URL解析

侧视图 LATERAL VIEW 配合 PARSE_URL_TUPLE 函数可以实现 URL 字段的一列变多列。

1.7.4JSNO解析

需要配置JSNO序列化器,Hive自带jsnoSerDe,但不推荐使用,推荐使用第三方序列化器。

1.7.5窗口函数(重点****)

OVER()  不是Hive独有。

分区PARTITION BY 写在OVER 里 表示按某字段分组

排序ORDER BY 写在OVER里 表示按某字段排序

与 GROUP BY 的区别:
        结果数据形式:
                窗口函数可以在保留原表中的全部数据
                GROUP BY 只能保留与分组字段聚合的结果
        排序范围不同
                窗口函数中的 ORDER BY 只是决定着窗口里的数据的排序方式
                普通的 ORDER BY 决定查询出的数据以什么样的方式整体排序
        SQL 顺序
                GROUP BY 先进行计算
                窗口函数在 GROUP BY 后进行计算

移动窗口:

移动方向:CURRENT ROW:当前行

PRECEDING:向当前行之前移动

FOLLOWING :向当前行之后移动

UNBOUNDED :起点或终点(一般结合 PRECEDING,FOLLOWING 使用)

        UNBOUNDED PRECEDING :表示该窗口第一行(起点)

        UNBOUNDED FOLLOWING :表示该窗口最后一行(终点)

移动范围:

ROWS 定义窗口从哪里开始,与BETWEEN AND 搭配

OVER(ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)表示当前行与当前行的前一行,以表行数判定

OVER(RANGE BETWEEN 1 PRECEDING AND CURRENT ROW)表示当前行与当前行的前一行,以某字段连续整形数字判定

聚合行窗口函数:

SUM() :求和
MAX() :最大值
MIN() :最小值
AVG() :平均值
COUNT() :计算总数

分析型窗口函数:

RANK() :间断,相同值同序号,例如 1、2、2、2、5。
DENSE_RANK() :不间断,相同值同序号,例如 1、2、2、2、3。
ROW_NUMBER() :不间断,序号不重复,例如 1、2、3、4、5(2、3 可能是相同的值)。

取值型窗口函数:

LAG(COL, N, DEFAULT_VAL) :往前第 N 行数据,没有数据的话用 DEFAULT_VAL 代替。
LEAD(COL, N, DEFAULT_VAL) :往后第 N 行数据,没有数据的话用 DEFAULT_VAL 代替。
FIRST_VALUE(EXPR) :分组内第一个值,但是不是真正意义上的第一个,而是截至到当前行的第一个。
LAST_VALUE(EXPR) :分组内最后一个值,但是不是真正意义上的最后一个,而是截至到当前行的最后一个。

1.8自定义函数

过程:

创建Maven项目,

导入依赖,

创建方法类,并继承相应自定义方法类

实现自定义方法类的方法

生成jar包

Hive导入自定义函数jar包

重新加载函数

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

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

相关文章

Java基于SpringBoot+Vue框架的宠物寄养系统(V2.0),附源码,文档

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

定义宏将整数的二进制的奇数位和偶数位互换位置

假设这个数为n00000000 00000000 00000000 00001101——13 1.思路 1.1 奇数位:00000000 00000000 00000000 00000101 但是怎么获得奇数位呢?——进行按位与运算 不懂如何运算的可以看我主页的详解操作符-CSDN博客,该章详细写了各个操作符如何…

基于 RNN 的语言模型

基于 RNN 的语言模型 循环神经网络(Recurrent Neural Network, RNN)是一类网络连接中包含环路的 神经网络的总称。 给定一个序列,RNN 的环路用于将历史状态叠加到当前状态上。沿着时间维度,历史状态被循环累积,并作为…

html的week控件 获取周(星期)的第一天(周一)和最后一天(周日)

html的week控件 获取周(星期)的第一天(周一)和最后一天(周日) <input type"week" id"week" class"my-css" value"ViewBag.DefaultWeek" /><script> function PageList() { var dateStrin…

C/C++--11--Vxworks6.8 + workbench3.2-一文看懂安装及工程导入说明

1、安装包截图如下&#xff1a; 2、安装流程如下&#xff1a; 安装系统&#xff1a;Win10-64位&#xff08;会出现以下报错-待解决&#xff09; 安装系统&#xff1a;Win7-64位&#xff0c;安装成功&#xff0c;路径如下&#xff1a; http://www.windriver.com/ 1、安装完成后…

MLMs之OmniGen:OmniGen(统一图像生成模型)的简介、安装和使用方法、案例应用之详细攻略

MLMs之OmniGen&#xff1a;OmniGen(统一图像生成模型)的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇论文介绍了OmniGen&#xff0c;一个用于统一图像生成的扩散模型。论文的核心要点可以总结如下&#xff1a; >> 背景痛点&#xff1a; ● 图像生成领…

QT中 update()函数无法实时调用 paintEvent

QT中 update()函数无法实时调用 paintEvent&#xff01; 在QT中&#xff0c;update()函数用于标记一个窗口区域为“需要重绘”。当调用update()后&#xff0c;QT会在合适的时候调用paintEvent()来重绘这个区域。然而&#xff0c;update()不会立即调用paintEvent()&#xff0c;…

OpenCV视觉分析之目标跟踪(12)找到局部的最大值函数meanShift()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在反向投影图像上找到一个对象。 meanShift 是一种用于图像处理和计算机视觉领域的算法&#xff0c;特别适用于目标跟踪、图像分割等任务。该算…

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上&#xff0c;给定无人车起始点和目标点后&#xff0c;按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率&#xff0c;减少交…

杂谈:业务说的场景金融是什么?

引言&#xff1a;市场格局的转变 在供应短缺的年代&#xff0c;是典型的卖方市场。为了保证稳定供货&#xff0c;买方会提前一段时间下单&#xff0c;也几乎没什么议价能力。卖方只需等着接单就行。 现在很多领域的供应商数量越来越多&#xff0c;而且随着互联网的普及&#…

Chrome扩展是程序员做独立开发的绝佳入场机会

一、开发成本低&#xff0c;难度低 简便灵活&#xff1a;相比开发移动应用&#xff0c;浏览器扩展的开发过程更加简便灵活&#xff0c;更适合初学者。省时省力&#xff1a;通过扩展&#xff0c;你可以修改现有网站的功能&#xff0c;无需从零开始搭建应用&#xff0c;大大节省…

Aop+自定义注解实现数据字典映射

数据字典 Web项目开发中&#xff0c;字典表的一般都会存在&#xff0c;主要用来给整个系统提供基础服务。 比如男女性别的类型可以使用0和1来进行表示&#xff0c;在存储数据和查询数据的时候&#xff0c;就可以使用字典表中的数据进行翻译处理。 再比如之前做的一个项目中宠物…

【C#】选课程序增加、删除统计学时

文章目录 【例6-2】编写选课程序。利用利用列表框和组合框增加和删除相关课程&#xff0c;并统计学时数1. 表6-2 属性设置2. 设计窗体及页面3. 代码实现4. 运行效果 【例6-2】编写选课程序。利用利用列表框和组合框增加和删除相关课程&#xff0c;并统计学时数 分析&#xff1…

星期-时间范围选择器 滑动选择时间 最小粒度 vue3

星期-时间范围选择器 功能介绍属性说明事件说明实现代码使用范例根据业务需要,实现了一个可选择时间范围的周视图。用户可以通过鼠标拖动来选择时间段,并且可以通过快速选择组件来快速选择特定的时间范围。 功能介绍 时间范围选择:用户可以通过鼠标拖动来选择时间段。快速选…

Swift从0开始学习 简单值 day1

1.0简单值的初始化: Swift声明值可以使用let 来声明常量&#xff0c;使用 var 来声明变量。let声明是不可修改的且只能赋值一次&#xff0c;var声明是可修改的。两者都不需要显式的指定类型&#xff0c;当你通过一个值来声明变量和常量时&#xff0c;编译器会自动推断其类型。 …

技术领导者的道与术:从领导者到领导力

目录标题 领导者现实看起来是这样技术领导者不应该和个人坐在一起技术领导力仍然是必须的从技术领导到技术领导力小结领导者 你可能想成为或者已经是一位技术领导者,估计你现在心里想成为超级英雄的想法正在爆棚。 你是Java、JavaScript、Angular等技术的专家,公司的项目代…

FPGA视频GTH 8b/10b编解码转PCIE3.0传输,基于XDMA中断架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我已有的 GT 高速接口解决方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图输入Sensor之-->芯片解码的HDMI视频数据组包基于GTH高速接口的视频传输架构GTH IP 简介GTH 基本结构GTH 发送和接收处理…

【实战篇P2-5】手把手实现STM32+ESP8266+原子云服务器+手机APP应用——第五节-编写Android手机APP程序实现接入原子云服务器

使用的开发软件是Android studio Android SDK(运行环境 :最低版本 21(Android 5.0) 最高版本 29 (Android 9.0) Gradle 版本 :4.6 根据源码,可自定义修改界面,修改名称,根据需求自定义数据展示界面等,修改app图标及名称等。 目录 Android程序设计 Android…

华为私有接口类型hybrid

华为私有接口类型hybrid Tip&#xff1a;hybrid类型&#xff0c;简称混合型接口。 本次实验模拟2层网络下 vlan10 vlan20 不能互访&#xff0c;vlan10 vlan20 同时可以访问vlan100 sw1配置如下&#xff1a; <Huawei>sy [Huawei]sys sw1 [sw1]vl ba 10 20 100 [sw1]int…

在 .NET 6.0 中创建用于 CRUD 操作的 Web API

快速概述&#xff1a; 在动态的技术世界中&#xff0c;创建强大的 Web API 已成为开发人员不可或缺的关键技能。这些 API 是促进不同应用程序之间顺畅通信的重要链接&#xff0c;可实现无缝数据检索和操作。本文的重点是在 .NET 6 中为 CRUD 操作创建 Web API。 为了实现这一点…