大数据开发(Hive面试真题-卷三)

大数据开发(Hive面试真题)

  • 1、Hive的文件存储格式都有哪些?
  • 2、Hive的count的用法?
  • 3、Hive得union和unionall的区别?
  • 4、Hive的join操作原理,left join、right join、inner join、outer join的异同?
  • 5、Hive的mapjoin?
  • 6、Hive Shuffle的具体过程?
  • 7、UDF是怎么在Hive里执行的?
  • 8、Hive HQL:行转列、列转行?

1、Hive的文件存储格式都有哪些?

  1. 文本文件格式(TextFile)以文本形式存储数据,每一行都是一个记录,字段之间使用分隔符进行分割
  2. 序列文件格式(SequenceFile)一种二进制文件格式,数据以键值对的形式存储,适用于大数据量的存储和读取
  3. 列式存储格式(Columnar formats)例如Parquet和ORC等,以列为单位存储数据,提供更高的压缩比和查询性能
  4. Avro格式一种数据序列化系统,支持动态类型,适用于复杂数据结构的存储
  5. RCFile格式(Record Columnar File)一种列式存储格式,将每个列的数据存储在单独的文件中,提供高效的读取和查询性能
  6. JSON格式(JsonFile)以JSON格式存储数据,适用于半结构化数据的存储
  7. CSV格式以逗号分割的文本文件格式,适用于简单的表格数据存储

2、Hive的count的用法?

  1. Hive中的count函数用于计算指定列或整个表中的行数。它的用法如下:
SELECT COUNT(*) FROM table_name;
  1. 计算指定列的非空值的个数
SELECT COUNT(column_name) FROM table_name;
  1. 计算指定列的唯一值的个数
SELECT COUNT(DISTINCT column_name) FROM table_name;

3、Hive得union和unionall的区别?

Hive中的UNION和UNION ALL都是用于合并多个查询结果集的操作,但它们之间有一些区别。

  1. UNION会删除重复的行,而UNION ALL会保留所有行,包括重复的行。
  2. UNION操作符会对两个查询结果的列进行匹配,要求它们的数据类型和顺序完全一致,而UNION ALL不会进行列匹配。
  3. UNION操作符会对结果进行排序,以消除重复行,而UNION ALL不会进行排序,因此性能上可能会更快一些。
  4. UNION操作符默认会去除NULL值,而UNION ALL会保留NULL值。
    因此,如果你需要合并多个结果集并消除重复行,你可以使用UNION操作符。而如果你想保留所有行,包括重复的行,可以使用UNION ALL操作符

4、Hive的join操作原理,left join、right join、inner join、outer join的异同?

  1. Inner Join(内连接):它返回两个表中满足连接条件的记录。只有在两个表中都有匹配的记录时,才会返回结果。
  2. Left Join(左连接):它返回左表中所有记录以及与右边匹配的记录。如果右表中没有匹配的记录,则返回NULL。
  3. Right Join(右连接):它返回右表中所有记录以及与左表匹配的记录。如果左表中没有匹配的记录,则返回NULL。
  4. Outer Join(外连接):它返回左表和右表中的所有记录。如果两个表中没有匹配的记录,则返回NULL。

5、Hive的mapjoin?

Hive的mapjoin是一种优化技术,用于加快Hive查询的速度。它通过将小表加载到内存中,然后在Map阶段将大表的数据与小表的数据进行连接,从而减少了磁盘读写操作和网络传输开销
具体来说,Hive的mapjoin分为两种类型:

  1. Map端的mapjoin(Map-side Join)当一个表的数据量足够小,可以将其全部加载到内存中时,Hive会将这个表的数据复制到所有的Map任务中,然后在Map任务中直接进行连接操作。这样可以避免Shuffle阶段的数据传输和磁盘I/O,大大提高了查询速度。
  2. Bucket Map端的mapjoin:当两个表都被分桶时,Hive可以使用Bucket Map端的mapjoin。它将两个表的桶按照相同的桶号分发到同一个Map任务中,然后再Map任务中进行连接操作。这样可以减少Shuffle阶段的数据传输和磁盘I/O,提高查询效率。
    需要注意的是,使用mapjoin的前提是小表可以完全加载到内存中,否则可能会导致内存不足的问题。此外,mapjoin也只适用于等值连接(Equi-Join),不支持其它类型的连接操作。

6、Hive Shuffle的具体过程?

Hive的Shuffle过程是在Hive执行MapReduce任务时发生的数据重分区和排序过程。它是为了将具有相同键的数据项聚集再同一个Reducer任务中,以便进行数据的合并和计算。
具体的Hive Shuffle过程如下:

  1. Map阶段在Map阶段,输入数据会根据指定的分区键进行哈希分区,即根据分区键的哈希值将数据分配到对应的Reducer任务中。同时,Map阶段会对每个分区键进行局部排序,保证每个分区内的数据按照分区键的顺序排列
  2. Combiner阶段如果在Hive查询中定义了Combiner函数,那么在Map阶段的输出结果会经过Combiner函数的合并操作。Combiner函数可以对相同分区键的数据进行合并,以减少数据传输量和提高性能。
  3. Partitioner阶段在Map阶段结束后,Hive会调用Partitioner函数对Map输出结果进行再次分区。Partitioner函数决定了数据项如何分布到不同的Reducer任务中。通常情况下,Partitioner函数会根据分区键的哈希值将数据项均匀地分配到不同的Reducer任务中。
  4. Sort阶段在Partitioner阶段之后,Hive会对每个Reducer任务的输入数据进行全局排序。这个排序操作保证了每个Reducer任务的输入数据按照分区键的顺序进行处理。
  5. Reduce阶段在Reduce阶段,每个Reducer任务会接收到属于自己分区的数据块,并进行最终的聚合和计算操作。Reducer任务会对输入数据进行迭代处理,输出最终的结果。

7、UDF是怎么在Hive里执行的?

UDF是在Hive中执行的一种自定义函数。当在Hive中定义一个UDF后,它可以在Hive查询中使用,以对数据进行转换、计算或其它操作。

执行过程如下:

  1. 首先,开发人员需要使用Java或其它编程语言编写UDF的代码。UDF代码需要实现Hive UDF接口,并定义输入和输出参数的类型。
  2. 然后,将编写的UDF代码编译成可执行的JAR文件
  3. 接下来,将JAR文件上传到Hive的集群环境中,并将其添加到Hive的类路径中
  4. 在Hive中创建一个函数,将该数据与上传的JAR文件中的UDF代码关联起来。这可以通过使用Hive的CREATE FUNCTION语句来完成
  5. 一旦函数创建完毕,就可以在Hive查询中调用该函数,并将其应用于数据
  6. 当Hive查询中调用UDF时,Hive会根据函数的定义和输入参数类型,调用上传的JAR文件中的对应UDF代码
  7. UDF代码将执行相应的计算或转换操作,并返回结果给Hive查询

8、Hive HQL:行转列、列转行?

Hive HQL中可以使用Pivot操作实现行转列和列转行的功能。
行转列(行数据转为列):
在 Hive 中,可以使用 Pivot 操作将行数据转为列。Pivot 操作需要使用聚合函数和 CASE WHEN 语句来实现。
例如,假设我们有一个表格包含以下数据:

+----+------+-------+
| ID | Name | Value |
+----+------+-------+
| 1  | A    | 10    |
| 1  | B    | 20    |
| 2  | A    | 30    |
| 2  | B    | 40    |
+----+------+-------+

我们可以使用 Pivot 操作将上述数据按 ID 列进行行转列:

SELECT ID,
MAX(CASE WHEN Name = 'A' THEN Value END) AS Value_A,
MAX(CASE WHEN Name = 'B' THEN Value END) AS Value_B
FROM table_name
GROUP BY ID;

执行上述查询后,可以得到如下结果:

+----+---------+---------+
| ID | Value_A | Value_B |
+----+---------+---------+
| 1  | 10      | 20      |
| 2  | 30      | 40      |
+----+---------+---------+

列转行(列数据转为行):
Hive 中可以使用 UNION ALL 操作将列数据转为行数据。
假设我们有一个表格包含以下数据:

+----+------+-------+
| ID | Name | Value |
+----+------+-------+
| 1  | A    | 10    |
| 1  | B    | 20    |
| 2  | A    | 30    |
| 2  | B    | 40    |
+----+------+-------+

我们可以使用 UNION ALL 操作将上述数据按 Name 列进行列转行:

SELECT ID, 'A' AS Name, Value FROM table_name WHERE Name = 'A'
UNION ALL
SELECT ID, 'B' AS Name, Value FROM table_name WHERE Name = 'B';

执行上述查询后,可以得到如下结果:

+----+------+-------+
| ID | Name | Value |
+----+------+-------+
| 1  | A    | 10    |
| 2  | A    | 30    |
| 1  | B    | 20    |
| 2  | B    | 40    |
+----+------+-------+

这样我们就可以将列数据转为行数据。.

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

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

相关文章

专升本 C语言笔记-01 printf 占位符 转义符

目录 一.printf()函数简介 1.1作用 将格式化后的字符串输出(打印东西) 1.2函数原型 1.3返回值 二.常见占位符 2.1.占位符的使用 2.2.格式修饰符 2.3.输出格式说明 三.转义字符 一.printf()函数简介 1.1作用 将格式化后的字符串输出(打印东西) printf…

Python数值方法在工程和科学问题解决中的应用

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 随着计算机技术的不断发展,Python作…

sqlserver语句中差集、并集、交集的用法

1、并集UNIONUNION 将两个查询的结果合并为一个结果集,并去除重复的行。 SELECT column1, column2 FROM Table1 UNION SELECT column1, column2 FROM Table2;2、交集INTERSECTINTERSECT 返回两个查询的结果中相同的行。 SELECT column1, column2 FROM Table1 IN…

C++之std::move

std::move 是C标准库中的一个函数模板,用于将其参数转换为右值引用。这通常用于移动语义,用于在避免不必要的复制的情况下,将资源(例如内存、文件句柄等)从一个对象转移到另一个对象。std::move 是C11引入的特性。 用…

【Python】新手入门学习:详细介绍开放封闭原则(OCP)及其作用、代码示例

【Python】新手入门学习:详细介绍开放封闭原则(OCP)及其作用、代码示例 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyT…

在Java中,Cloneable接口的作用,抛出CloneNotSupportedException的原因

文章目录 一、Cloneable接口的作用二、Cloneable接口的用法三、Cloneable的标记作用实现原理 一、Cloneable接口的作用 继承Cloneable接口并调用super.clone()是为了确保对象的克隆行为符合Java的规范。尽管Cloneable是一个空接口,没有定义任何方法,但如…

MQTT Topic通配符

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…

如何不依赖Unity直接解压unitypackage的内容

使用场景 我们都知道unity的资源导出是导出成.unitypackage文件,如果要里面的内容,得打开Unity,将unitypackage导入进去才能看到里面的内容。 但是很多时候我们下了几十个unitypackage资源包,又不清楚好不好用,而且导入之后编译特别慢,unity又不提供批量解压的功能,所…

雷达图相关

1.中间显示数字 title: {text: 88,x: center,y: center,textStyle: {color: #333,fontWeight: bolder,fontSize: 64,} } 2.提示信息 tooltip: {trigger: item, // 当鼠标悬浮在某个数据项上时触发}, 3.修改中间颜色 默认: splitArea: {areaStyle: {color: [rgba(…

三分钟搞定普通函数和箭头函数的this指向问题

记住两个口诀: 普通函数的this是:谁调用这个函数,函数的this就指向谁 箭头函数的this是:箭头函数定义时的执行上下文的this是谁,箭头函数的this就指向谁 实例代码: var name222var b {name:111,fn:()>{…

网康科技 NS-ASG 应用安全网关 SQL注入漏洞复现(CVE-2024-2330)

0x01 产品简介 网康科技的NS-ASG应用安全网关是一款软硬件一体化的产品,集成了SSL和IPSec,旨在保障业务访问的安全性,适配所有移动终端,提供多种链路均衡和选择技术,支持多种认证方式灵活组合,以及内置短信认证、LDAP令牌、USB KEY等多达13种认证方式。 0x02 漏洞概述 …

OPENCV(0-1之0.1)

OPENCV-0.1 学习安排计算机视觉简介是什么?应用领域基础概念 OpenCV简介历史背景和主要贡献者支持的语言和平台主要模块和功能 安装(windows_python)pip安装验证安装(记得安装jupyter) 第一个OpenCV程序实践练习 官方文档 学习安排 计算机视…

数据同步方案

目录 1 需求概述 1)时间戳 2)触发器 3)差异更新 4)日志解析 2 产品实施 1)数据同步 2)同步日志 3)流量统计 4)数据比对 1 需求概述 数据同步用于将不同数据库系统产生的数…

欧盟商标的申请流程

欧盟商标的申请流程 1、商标检索:在申请之前,我们建议您进行商标检索,以确定您的商标是否与已有商标存在冲突。 2、申请途径选择:您可以选择通过欧盟商标局的在线系统,或者通过邮寄纸质申请材料的方式进行申请。 3、…

讲讲分布式和集群那点事

本专栏简单讲讲那些特别散乱杂的知识,欢迎各位朋友订阅专栏 感谢一路相伴的朋友们 浅淡计算机系列第5篇 目录 前言 集群 啥是集群? 集群可以应用在哪里? 集群的好处和坏处 举个例子 分布式 啥是分布式?

java 操作JSON对象查找、删除、增加和修改等操作

对JSON的查找 格式: JSONObject.getString("value") 示例: info.getString("name") 删除JSON对象中的某个数据 格式: JSONObject.remove("value") 示例:info.remove("name") 增加和修改J…

2024腾讯云轻量应用服务器地域有什么区别?哪个好?

腾讯云轻量应用服务器地域如何选择?地域就近选择,北方选北京地域、南方选广州地域,华东地区选上海地域。广州上海北京地域有什么区别?哪个好?区别就是城市地理位置不同,其他的差不多,不区分好坏…

亲测有效,职场焦虑迷茫的测试人都需要的3大良方!

Hi,大家好,我是小马哥。日常大家聊天时经常提及一个关键词——大环境不好,这种感受像一股暗流,由此带来了很多变化。 有人在这股潮流中感到迷失,选择了躺平;而有的人则积极寻找应对方法,努力在…

Linux常用指令大全

一、基本命令 1、立即关机并重启动,执行如下命令: shutdown -r now 或者reboot 2、立即关机,执行如下命令: shutdown -h now 或者poweroff 3、等待2分钟关机并重启动,执行如下命令: shutdown -r…

深入理解Apache Commons Pool2池化技术

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 在现代软件开发中,为了提高性能和资源利用率,开发者们经常使用池化技术来管理那些创建和销毁代价较高的对…