有些内容后续完善

一、概念

1、Hive是一个Hadoop客户端,用于将HQL(Hive SQL)转化成MapReduce程序。

2、元数据包括:数据库(默认是default)、表名、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等。

3、默认存储在自带的derby数据库中,由于derby数据库只支持单客户端访问,生产环境中为了多人开发,推荐使用MySQL存储Metastore。

4、derby数据库的特点是同一时间只允许一个客户端访问。如果多个Hive客户端同时访问,就会报错。

5、初始化Hive元数据库,修改为采用MySQL存储元数据的命令是:$ bin/schematool -dbType mysql -initSchema -verbose

6、新版本的Hive启动的时候,默认申请的JVM堆内存大小为256M,建议设置更大的堆内存如2048M,避免执行复杂的SQL时经常会报错

7、SERDE是Serializer and Deserializer的简写。Hive使用SERDE序列化和反序列化每行数据。

8、DELIMITED关键字表示对文件中的每个字段按照特定分割符进行分割,其会使用默认的SERDE对每行数据进行序列化和反序列化。

9、SERDE关键字可用于指定其他内置的SERDE或者用户自定义的SERDE。例如JSON SERDE,可用于处理JSON字符串。

10、Create Table As Select(CTAS)建表,该语法允许用户利用select查询语句返回的结果,直接建表,表的结构和查询语句的结构保持一致,且保证包含select查询语句放回的内容。

11、Create Table Like语法:该语法允许用户复刻一张已经存在的表结构,与上述的CTAS语法不同,该语法创建出来的表中不包含数据。

12、Hive中默认创建的表都是的内部表,有时也被称为管理表。对于内部表,Hive会完全管理表的元数据和数据文件。

13、关键字TEMPORARY表示所建表为临时表,该表只在当前会话可见,会话结束,表会被删除。

14、关键字EXTERNAL表示为外部表,意味着Hive只接管元数据,而不完全接管HDFS中的数据。

15、map是一组相同类型的键-值对集合。

16、struct结构体由多个属性组成,每个属性都有自己的属性名和数据类型

17、array数组是一组相同类型的值的集合

18、Group By语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作。

19、where后面不能写分组聚合函数,而having后面可以使用分组聚合函数。

20、having只用于group by分组统计语句。

21、内连接:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来。

22、左外连接:join操作符左边表中符合where子句的所有记录将会被返回。

23、右外连接:join操作符右边表中符合where子句的所有记录将会被返回。

24、满外连接:将会返回所有表中符合where语句条件的所有记录。如果任一表的指定字段
没有符合条件的值的话,那么就使用null值替代。

25 Order By:全局排序,只有一个Reduce。

26 在有些情况下,我们需要控制某个特定行应该到哪个Reducer,通常是为了进行后续的聚集操作。distribute by子句可以做这件事。

27 当distribute by和sort by字段相同时,可以使用cluster by方式。

28 unix_timestamp:返回当前或指定时间的时间戳。

29 窗口函数,能为每一行数据划分一个窗口,然后对窗口范围内的数据进行计算,最后将计算结果返回该行数据。

30 当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

31 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。

32 分区表有助于在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。

33 数据仓库是一个为数据分析而设计的企业级数据管理系统。

34 数据仓库可集中、整合多个信息源的大量数据,借助数据仓库的分析能力,企业可从数据中获得宝贵的信息进而改进决策。

35 第一范式的核心原则是属性不可分。

36 第二范式的核心原则是不能存在部分函数依赖。

37 第三范式的核心原则是不能存在传递函数依赖。

38 ER建模方法的出发点是整合数据,其目的是将整个企业的数据进行组合和合并,并进行规范处理,减少数据冗余性,保证数据的一致性。这种模型并不适合直接用于分析统计。

39 维度模型将复杂的业务通过事实和维度两个概念进行呈现。

40 事实通常对应业务过程,而维度通常对应业务过程发生时所处的环境。

41 业务过程可以概括为一个个不可拆分的行为事件,例如电商交易中的下单,取消订单,付款,退单等,都是业务过程。

42 维度建模以数据分析作为出发点,为数据分析服务,因此它关注的重点的用户如何更快的完成需求分析以及如何实现较好的大规模复杂查询的响应性能。

43 事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计。其包含与该业务过程有关的维度引用(维度表外键)以及该业务过程的度量(通常是可累加的数字类型字段)。

44 设计事务事实表时一般可遵循以下四个步骤:选择业务过程→声明粒度→确认维度→确认事实

45 维度表是维度建模的基础和灵魂。维度表则围绕业务过程所处的环境进行设计。

46 维度表设计步骤:确定维度(表)→确定主维表和相关维表→确定维度属性

47 数据仓库系统的主要目的是用于数据分析和统计,所以是否方便用户进行统计分析决定了模型的优劣。

48 采用雪花模型,用户在统计分析的过程中需要大量的关联操作,使用复杂度高,同时查询性能很差,而采用星型模型,则方便、易用且性能好。所以出于易用性和性能的考虑,维度表一般是很不规范化的。

49 规范化是指使用一系列范式设计数据库的过程,其目的是减少数据冗余,增强数据的一致性。通常情况下,规范化之后,一张表的字段会拆分到多张表。

50 反规范化是指将多张表的数据冗余到一张表,其目的是减少join操作,提高查询性能。

51 保存维度数据的历史状态,通常有以下两种做法,分别是全量快照表和拉链表。

52 全量快照表的优点是简单而有效,开发和维护成本低,且方便理解和使用。

53 全量快照表的缺点是浪费存储空间,尤其是当数据的变化比例比较低时。

54 拉链表的意义就在于能够更加高效的保存维度信息的历史状态。

55 拉链表记录每条信息的生命周期。

57 拉链表适合于数据会发生变化,但是变化频率并不高的维度。

58 数据调研重点要做两项工作,分别是业务调研和需求分析。这两项工作做的是否充分,直接影响着数据仓库的质量。

二、判断题

(感谢ch开源)
59.hive将元数据保存在关系数据库中,大大减少了在查询过程中执行语义检查的时间。

60.hive中包含以下四类数据模型:数据库、表、分区、桶。

61.Hive 中支持对数据的改写和添加(对文本内数据的添加)。×
在 Hive 中,数据的添加是支持的,但是改写(即更新或删除现有的数据)则受到限制。

62.hive的数据库、表、分区在HDFS的表现形式是文件夹。

63.在删除内部表时:内部表的元数据被删除,数据本身不删除。×
相反,对于外部表(External Table),当我们删除表时,Hive 只会删除元数据,而不会删除数据本身。这是因为外部表的数据位置是由用户指定的,Hive 不“拥有”这些数据,因此不会在删除表时删除它们。

64.hive驱动器包括解析器,编译器,反编译器,执行器。×
Hive driver 包括解析器、编译器、优化器和执行器。

65.SQL语言大小写不敏感。

66.分组语句中,where只用于group by分组统计语句。×
在 SQL 和 HiveQL 中,WHERE 子句不仅用于 GROUP BY 分组统计语句,它可以在多种类型的查询中使用,用于过滤数据行。WHERE 子句用于指定数据行必须满足的条件,以将其包含在结果集中。

67.分区表对应一个HDFS文件系统上的独立的文件夹,该文件夹下是所有的数据文件。

68.hive中的窗口函数中lag()函数以当前行做参考,向后取第n行的数据返回,而lead()函数是以以当前行做参考,向前取第n行的数据返回。×
LAG() 函数:返回当前行之前的第 n 行的数据。如果指定了第 n 行,则它将查看当前行之前的 n-1 行。LEAD() 函数:返回当前行之后的第 n 行的数据。如果指定了第 n 行,则它将查看当前行之后的 n-1 行。

69.Hive只能通过mysql或者是derby数据库来存储元数据。×
Hive 可以使用多种数据库来存储元数据,而不仅限于 MySQL 或 Derby

70.Hive能够用来进行海量数据的存储、查询和离线分析。

71.Hive的最大优点是,可以将SQL翻译成 MapReduce 去Hadoop上执行,这样就使得数据开发和分析人员很方便的使用Hive来完成海量数据的统计和分析,而不必使用编程语言开发。

三、选择题

原文链接:https://blog.csdn.net/m0_51376832/article/details/125284478

1.Hive 的元数据存储在 derby 和 MySQL 中有什么区别( B )
What is the difference between Storing Hive metadata in Derby and MySQL
A. 没区别
B. 多会话 (More session)
C. 支持网络环境
D. 数据库的区别
Hive 的元数据存储在 Derby 和 MySQL 中的主要区别在于多会话支持。Derby 数据库是一个内嵌式的数据库,它通常用于单用户模式,不支持多会话同时访问。这意味着当使用 Derby 作为 Hive 的元数据存储时,一次只能有一个客户端连接到 Hive。

2.Hive有四个驱动器,下面哪个不是( C )
Hive has four drives, not the one below
A. 解释器
B. 编译器
C. 策略器(Strategy implement)
D. 优化器
Hive driver 包括解析器、编译器、优化器和执行器。

3.Hive执行外部的脚本参数是( B )
The external script parameter for Hive execution is
A. hive –e
B. hive –f
C. hive –sql
D. hive –s
hive -f - 这个参数用于执行存储在外部文件中的 HiveQL 脚本。

4.Hive是基于( A )
A. Mapreduce
B. html5
C. web
D. Ajax

5.Hive中分组的关键字是什么( A )
What are the group keywords in Hive
A. group by
B. order by
C. distribute by
D. sort by

6.Hive有什么好处(B )
A. 可以使用sql,操作存储在hdfs中的数据
B. 可以通过语句自动编译mapreduce(Mapreduce can be automatically compiled using statements)
C. 可以直接在表中插入数据
D. 可以存储数据
B对于Hive是主要的

7.HIVE与传统SQL数据库对比,下面描述不正确的是( C )
A. 对于查询语言:HIVE使用HQL,传统SQL数据库使用SQL
B. 对于数据存储:HIVE使用HDFS存储,传统SQL数据库使用本地磁盘
C. 最终执行者:HIVE使用MapReduce和Excutor执行,传统SQL数据库使用Excutor执行器
D. 执行延迟:HIVE属于高,传统SQL数据库属于低
Hive 在执行查询时可以将 HQL 语句转换为 MapReduce 作业(或者在启用其他执行引擎的情况下转换为相应的作业),然后这些作业由 Hadoop 集群执行。而传统的关系型数据库使用查询执行器(Executor)来直接执行 SQL 语句,这些执行器通常是数据库管理系统内置的。

8.下面中不属于HIVE中的元数据信息(C )
A. 表的名字
B. 表的列和分区及其属性
C. 表的属性(只存储内部表信息)
D. 表的数据所在目录

9.Hive数据类型那个不是基本类型( A )
A. Varchar
B. Int
C. FLOAT
D. DOUBLE
Hive 不支持 VARCHAR 作为基本数据类型。Hive 中的字符串数据类型通常使用 STRING,它可以是任意长度的字符序列。

10.外连接进行JOIN默认在( B)
A、 Map端
B、 Reduce端
C、 external端
D、 Shuffle端
在分布式计算框架中,如Hadoop的MapReduce,Map端负责过滤和投影,而Reduce端负责连接操作。外连接会返回两个表中所有的行,如果某侧没有匹配的行,则结果中该侧的值为NULL。

11.下面关于Hive查看表table1的分区的描述正确的是(A )
A show partitions table1;
B desc table1;
C show create table table1;
D drop table1

12.已知数组 trans_cnt[1, 2, 3, 4],trans_cnt[2] 获取的结果为(C )
A 1
B 2
C 3
D 4
Hive数组下标从0开始。

13.Hive是为了解决哪类问题(A )
A 海量结构化日志的数据统计
B 分布式组件调度
C 分布式系统监控
D 分布式系统高可用
Hive是为了解决海量结构化日志的数据统计问题而设计的

14.下面关于Hive SQL的内外表使用正确的是(A)
A 在/tmp/path创建外表:CREATE EXTERNAL TABLE … LOCATION ‘/tmp/path’;
B 在/tmp/path创建外表:CREATE TABLE … ;
C 创建内表:CREATE EXTERNAL TABLE … LOCATION ‘/tmp/path’;
D 创建内表:CREATE EXTERNAL TABLE … ;

15.以下表达式书写错误的是(B )
A year(‘2015-12-31 12:21’)
B month(2015-10-31)
C day(‘2015-12-11’)
D date_sub(‘2015-12-01’,3)
在Hive中,日期函数通常需要字符串格式的日期作为参数,并且需要使用引号将日期字符串括起来。

16.以下哪种不是 Hive 支持的数据类型(D)

A Struct
B Int
C Map
D Long
Hive 不支持 Long 类型,支持 TINYINT SMALLINT INT BIGINT

17.已知数组 trans_cnt[1, 2, 3, 4],以下哪一个表达式是求数组的元素数量(D)
length()获取字符串长度
size()获取泛型集合元素个数
A type(trans_cnt)
B length(trans_cnt)
C coalesce(trans_cnt)
D size(trans_cnt)
length()获取字符串长度,size()获取泛型集合元素个数

18.在hive中下列哪个命令不可以实现去重( D)

A distinct
B group by
C row_number
D having
HAVING - HAVING子句用于对分组后的结果进行条件过滤,它本身不实现去重功能

19.代码select substr(‘abcdef’,2,3)的结果是哪一个( B )
A bc
B bcd
C cde
D 其他结果都不对
数组下标从0开始,字符串下标从1开始。本题从下标2开始,取3个,字符串下标从1开始

20.下面关于Hive内外表描述错误的是(C )
A Hive内表的元数据和数据都由Hive自己管理
B Hive会管理外表的元数据
C 当Hive内表的元数据发生变化时,内表的改动修改不会同步给元数据
D 对外部表的表结构和分区进行修改,需要修复
实际上,当Hive内表的元数据发生变化时,比如添加列或者删除列,这些改动会同步更新到Hive的元数据中。Hive管理着内部表的元数据,包括表结构、分区信息、数据存储位置等,因此任何对表结构的修改都会反映到元数据中。

21.下面关于Hive格式描述正确的是(D)
A.TEXTFILE存储方式为列存储
B.TEXTFILE格式的数据磁盘开销不大
C.使用TEXTFILE时Hive会对数据进行切分
D.TEXTFILE格式是Hive的默认存储格式
A. TEXTFILE存储方式为列存储 - 错误,TEXTFILE是行存储格式,而不是列存储格式。列存储格式通常是指ORC或Parquet等格式。 B. TEXTFILE格式的数据磁盘开销不大 - 错误,由于不支持压缩,TEXTFILE格式的数据可能会占用更多的磁盘空间。 C. 使用TEXTFILE时Hive会对数据进行切分 - 错误,Hive在读取数据时会对数据进行切分,但这与文件格式无关。无论使用哪种文件格式,Hive都会进行数据切分以并行处理。

22.下面关于Hive SQL编译顺序正确的是(C)
(1)遍历QueryBlock,翻译为执行操作树OperatorTree
(2)遍历OperatorTree,翻译为MapReduce任务
(3)遍历AST Tree,抽象出查询的基本组成单元QueryBlock
(4)逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量
(5)物理层优化器进行MapReduce任务的变换,生成执行计划
(6)将SQL转化为抽象语法树AST Tree
A.(3)(1)(2)(4)(5)(6)
B.(5)(3)(1)(2)(4)(5)
C.(6)(3)(1)(2)(4)(5)
D.(5)(3)(1)(2)(4)(6)
Hive SQL的编译顺序大致如下:
将SQL语句转化为抽象语法树(AST Tree)。
遍历AST Tree,抽象出查询的基本组成单元QueryBlock。
遍历QueryBlock,翻译为执行操作树OperatorTree。
逻辑层优化器进行OperatorTree变换,合并不必要的ReduceSinkOperator,减少shuffle数据量。
物理层优化器进行MapReduce任务的变换,生成执行计划。
遍历OperatorTree,翻译为MapReduce任务。

23.下面关于Hive SQL的JOIN关键词正确的是( A)
(1)INNERN JOIN
(2)JOIN
(3)OUTER JOIN
(4)RIGHT JOIN
(5)CROSS JoIN
(6)LEFT JOIN

A.(2)(4)(5)(6)
B.(1)(4)(5)(6)
C.(1)(4)(6)
D.(3)(4)(6)

24.下面关于Hive描述错误的是( C )
A.TEXTFILE格式的文件就算结合了gzip压缩格式,也无法对数据进行并行操作
B.sequenceFile是Hadoop API提供的一种二进制文件支持
C.RCFile是一种行存储的格式
D.ORC文件是基于RCEile格式的一种优化
RCFile(Record Columnar File)是一种列存储格式,它旨在优化大型表的大规模数据仓库查询。RCFile将表分为行组,每个行组内部是以列存储的,这样可以提高列查询的效率。

25.下面关于Hive SQL编译描述正确的是(B )
A.Hive SQL的Parser层是为了将sql转化为执行计划的
B.逻辑层优化器会进行算子转换,优化合并不必要的算子操作
C.MapReduce任务是需要遍历oueryBlock后生成的
D.编译器遍历AST Tree,抽象出查询的基本组成单元operator Tree
A:Parser层是将SQL语句解析为抽象语法树(AST Tree),而不是直接生成执行计划。B:MapReduce任务是在物理计划阶段生成的,而不是在遍历QueryBlock之后。 D:编译器遍历AST Tree是为了抽象出查询的基本组成单元QueryBlock,而不是Operator Tree。随后,这些QueryBlock会被转换为Operator Tree

26.下列哪个组件不属于Hive架构(B )
A.MySQL
B.TaskManager
C.HDFS
D.Client

27.下面关于Hive sQL中INSERT INTO和INSERT OVERWRITE的区别说法正确的是(B)
A.INSERT INTO会覆盖已经存在的数据
B.INSERT OVERWRITE会先现将原始表的数据remove,再插入新数据
C.INSERT OVERWRITE不考虑原始表的数据,直接追加到表中
D.INSERT INTO重复的数据会报错
INSERT OVERWRITE会先将原始表的数据remove,再插入新数据

INSERT OVERWRITE会覆盖掉目标表或分区中的现有数据,它会先删除原有数据,然后再将新的查询结果插入到表中。如果是对整个表进行覆盖,那么表中的所有数据将被删除;如果是对某个分区进行覆盖,那么只会删除该分区中的数据。

28.Hive是由哪家公司开源的(B )
A.Google
B.Facebook
C.LinkedIn
D.Netflix

29.下面关于Hive描述正确的是(D )
A.count函数必须开窗口才能使用
B.max函数是窗口函数
C.lead函数是聚合函数,不是窗口函数
D.min函数是聚合函数,不是窗口函数
A. 错误。count函数是聚合函数,不需要开窗口就能使用。例如,SELECT count(*) FROM table_name 是有效的查询。
B. 错误。max函数是聚合函数,不是窗口函数。它可以在不使用窗口的情况下计算列的最大值。
C. 错误。lead函数是窗口函数,不是聚合函数。它用于访问当前行之后某个偏移的行。
D. 正确。min函数是聚合函数,不是窗口函数。它用于计算列的最小值。
因此,答案是:D. min函数是聚合函数,不是窗口函数

30.下面关于Hive内外表描述正确的是(D )
A.建表时候如果不显示声明表的类型,则建表为外表
B.外表使用DROP语句可以删除的很干净
C.外表由Hive自己管理
D.建表时候如果不显示声明表的类型,则建表为内表
在Hive中,如果你在创建表的时候没有明确指定表的类型,那么默认创建的是内部表(内表)。内部表的数据和元数据都由Hive管理,当你删除一个内部表时,Hive会删除表的元数据以及存储在HDFS上的数据。

三、 填空题

1.HIVE的本质是:将HQL转化为Mapreduce程序。

2.Hive 处理的数据存储在HDFS上。

3.HIVE有三种复杂数据类型,它们分别是STRUCT、MAP和Array

4.可以使用cast函数操作进行显式数据类型转换。

5.可以使用external关键字创建一个外部表。

6.可以使用LIMIT关键字来限制返回的行数

7.用户自定义函数类别可分为以下三种:UDF、UDAF和UDTF。

8.我们可以使用Explain关键字查看查询语句的执行计划。

9.除了MapReduce之外,HIVE支持的计算引擎还有Tez、Spark、Flink。(写出一种即可)

10.如图,表数据如下,请将HQL语句
填写完整,使得查询语句实现查询在 2017 年 4 月份购买过的顾客及总人数的功能。
As shown in the figure, the table data is as follows. Please complete the HQL statement so that the query statement achieves the function of querying the customers who have purchased in April 2017 and the total number of customers.

name,orderdate,cost
jack,2017-01-01,10
tony,2017-01-02,15
jack,2017-02-03,23
tony,2017-01-04,29
jack,2017-01-05,46
jack,2017-04-06,42
tony,2017-01-07,50
mart,2017-04-09,68
neil,2017-06-12,80
mart,2017-04-13,94

select name,count(*) over ()
from business
where substr(orderdate, 1, 7) = ‘2017-04’
group by name;

  1. To move data, Hive uses the INSERT OVERWRITE statement. Move here means the original data is moved to the target table/partition and does not exist in the original place anymore.

  2. HQL offers several builtin aggregate functions, such as COUNT() and SUM().

  3. Hive driver includes parser, compiler, Optimizer and executor .