大数据学习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包

重新加载函数

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

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

相关文章

Me-LLaMA——用于医疗领域的新型开源大规模语言模型

摘要 大规模语言模型的出现是提高病人护理质量和临床操作效率的一个重大突破。大规模语言模型拥有数百亿个参数,通过海量文本数据训练而成,能够生成类似人类的反应并执行复杂的任务。这在改进临床文档、提高诊断准确性和管理病人护理方面显示出巨大的潜…

练习LabVIEW第四十四题

学习目标: 计算学生三门课(语文,数学,英语)的平均分,并根据平均分划分成绩等级。要求输出等级A,B,C,D,E。90分以上为A,80~89为B,70~79为C,60~69为D&#xff…

重建大师7.0 | 全新倾斜高斯泼溅OPGS技术,实景三维大规模城市三维场景的更逼真化表达

在刚刚结束的“AI智算、国产信创”2024秋季新品发布会上,大势智慧隆重发布了重建大师7.0、重建农场信创版、低空三维AI智算平台等覆盖实景三维数据生产体系全流程、推进实景三维国产化建设与低空应用的全新系列产品。 今天,重点为大家介绍一下重建大师7.…

【MySQL 保姆级教学】深层理解索引及特性(重点)--下(12)

索引(重点) 1. 索引的作用2. 索引操作2.1 主键索引2.1.1 主键索引的特点2.1.2 创建主键索引 2.2 唯一键索引2.2.1 唯一键索引的特点2.2.2 唯一索引的创建 2.3 普通索引2.3.1 普通索引的特点2.3.2 普通索引的创建 2.4 全文索引2.4.1 全文索引的作用2.4.2 …

力扣: 144 二叉树 -- 先序遍历

二叉树 – 先序遍历 描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例: 先序遍历:根左右 何解? 1、递归 : 无需多言一看就懂 2、遍历法 中序查找时,最先出入的节点是左子树中的最左侧二叉…

【K8S系列】K8S 集群 CPU 爆满导致 Pod Pending 状态的分析与解决方案

在 Kubernetes 集群中,CPU 突然爆满可能导致 Pod 状态变为 Pending,影响应用的可用性。本文将深入分析其原因,并附上相关命令及其执行结果,帮助你更好地理解和解决此问题。 1. 问题描述 在 Kubernetes 集群中,当 CPU …

Linux awk命令详解-参数-选项-内置变量-内置函数-脚本(多图、多示例)

文章目录 awk基础结构说明与示例参数与内置变量常用参数内置变量其他参数内置变量 简单示例理解option简单参数NR与FNR-v ARGC ARGV参数 执行脚本if elsefor循环关联数组指定匹配pattern 使用正则指定分隔符理解pattern正则与逻辑算术 printfif else for whileBEGIN ENDnext(跳…

【Android】组件化开发入门

文章目录 引入组件是什么?为什么使用组件化开发?什么是模块化,组件化,插件化?常见实现 组件分层创建module 组件单独调试配置组件工程类型配置组件ApplicationId和AndroidManifest文件 引入 组件是什么? 组件(Component&#…

MySQL数据库基础(一) MySQL安装及数据类型

目录 一、MySQL数据裤简介 二、MySQL数据的安装 2.1、MySQL安装 2.2、修改MySQL密码登录策略 三、数据库基础管理 3.1、连接方式及数据储存流程 3.2、库管理命令 3.3、表管理命令 3.4、记录管理命令 四、MySQL数据类型 4.1、常见信息种类 4.2、字符型 4.3、数值型 4.4、日期时间…

云原生+AI核心技术&最佳实践

以下内容是我在陕西理工大学2023级人工智能专业和网络专业的演讲内容,分享给大家。 各位老师、同学们,大家好啊!能在这里跟大家一起聊聊咱们计算机专业那些事儿,我真的觉得超级兴奋! 首先,自我介绍一下&am…

Qt QCustomplot 在采集信号领域的应用

文章目录 一、常用的几种开源库:1、QCustomPlot:2、QChart:3、Qwt:QCustomplot 在采集信号领域的应用1、应用实例时域分析频谱分析2.数据筛选和处理其他参考自然界中的物理过程、传感器和传感器网络、电路和电子设备、通信系统等都是模拟信号的来源。通过可视化模拟信号,可以…

C++11的简介

杀马特主页&#xff1a;羑悻的小杀马特.-CSDN博客 ------ ->欢迎阅读 欢迎阅读 欢迎阅读 欢迎阅读 <------- 目录 一列表初始化的变化&#xff1a; 二左右值即各自引用的概念&#xff1a; 2.1左右…

大模型的常用指令格式 --> ShareGPT 和 Alpaca (以 llama-factory 里的设置为例)

ShareGPT 格式 提出背景&#xff1a;ShareGPT 格式起初来自于用户在社交平台上分享与聊天模型的对话记录&#xff0c;这些记录涵盖了丰富的多轮对话内容。研究者们意识到&#xff0c;这类真实的对话数据可以帮助模型更好地学习多轮对话的上下文保持、回应生成等能力。因此&…

5G时代已来:我们该如何迎接超高速网络?

内容概要 随着5G技术的普及&#xff0c;我们的生活似乎变得更加“科幻”了。想象一下&#xff0c;未来的智能家居将不仅仅是能够听你说“开灯”&#xff1b;它们可能会主动询问你今天心情如何&#xff0c;甚至会推荐你一杯“维他命C芒果榨汁”&#xff0c;帮助你抵御夏天的炎热…

Unity SRP学习笔记(二)

Unity SRP学习笔记&#xff08;二&#xff09; 主要参考&#xff1a; https://catlikecoding.com/unity/tutorials/custom-srp/ https://docs.unity.cn/cn/2022.3/ScriptReference/index.html 中文教程部分参考&#xff08;可选&#xff09;&#xff1a; https://tuncle.blog/c…

【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期

目录 1. start() (1) start() 的性质 (2) start() 和 Thread类 的关系 2. 终止一个线程 (1)通过共享的标记结束线程 1. 通过共享的标记结束线程 2. 关于 lamda 表达式的“变量捕获” (2) 调用interrupt()方法 1. isInterrupted() 2. currentThread() …

粤荣学校与亲邻家政达成合作,创造双向人才输送机制

原标题&#xff1a;超过大学生月薪&#xff01;粤荣学校与亲邻家政达成合作&#xff0c;创造双向人才输送机制&#xff0c;解决中年人就业难题&#xff01; 广州市白云区粤荣职业培训学校余智强校长与广州亲邻家政服务有限公司朱利生经理于2024年11月8日下午共同签署了一份重要…

【MacOS实操】如何基于SSH连接远程linux服务器

MacOS上远程连接linux服务器&#xff0c;可以使用ssh命令pem秘钥文件连接。 一、准备pem秘钥文件 如果已经有pem文件&#xff0c;则跳过这一步。如果手上有ppk文件&#xff0c;那么需要先转换为pem文件。 macOS 的默认 SSH 客户端不支持 PPK 格式&#xff0c;你需要将 PPK 文…

parseInt 是一个内置的 JavaScript 函数,用于将字符串转换为整数。

parseInt(options.checkNumber, 10) 中的 10 表示将字符串转换为十进制整数。 解释 parseInt 函数&#xff1a; parseInt 是一个内置的 JavaScript 函数&#xff0c;用于将字符串转换为整数。它有两个参数&#xff1a; 第一个参数是要转换的字符串。第二个参数是转换时使用的基…

鸿蒙ArkTS中的布局容器组件(Scroll、List、Tabs)

1、Scroll组件 Scroll组件是一个可滚动的容器组件&#xff0c;用于在子组件的布局尺寸超过父组件尺寸时提供滚动功能。它允许在其内部容纳超过自身显示区域的内容&#xff0c;并通过滚动机制来查看全部内容。这对于显示大量信息&#xff08;如长列表、长篇文本或大型图像等&…