Hive===笔记

学习Hive内容思维导图

Hive===笔记_第1张图片

1.Hive简介:

Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库的表,并且提供类SQL查询的功能。

本质还是将SQL转换为MapReduce/Spark的任务进行运算的,底层是由hdfs提供数据的存储。

2.为什么用hive?

  • 学习MapReduce的成本比较高,项目的周期要求太短,MapReduce如果要实现复杂的查询逻辑开发的时候难度是比较大的。
  • 如果使用hive,hive采用操作接口类似SQL语法,提高了快速开发的能力,又避去了书写MapReduce,减少了学习成本,而且提供了功能的扩展。

3.Hive的特点有哪些:

        1. 可扩展 : Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务。

        2. 延展性 : Hive 支持用户自定义函数,用户可以根据自己的需求来实现自

        己的函数。

        3. 容错 : 良好的容错性,节点出现问题 SQL 仍可完成执行。

4.分桶和分区表的区别

分区与分桶对比  

        ① 分区针对的是数据的存储路径;数据存到不同的目录下,防止全表扫描
        ② 分桶针对的是数据文件。把一个文件分成多个不同的文件,类似于mapReduce分区
        切片 :把一个文件分多个文件 数据量极大的情况下

        ③ 分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的        

        ④分区,特别是之前所提到过的要确定合适的划分大小这个疑虑。

        ⑤ 分桶是将数据集分解成更容易管理的若干部分的另一个技术。

        ⑥ 分桶是根据表中的字段进行划分;是真的把完整的文件分成若干个小的文件;

5.  Hive常用开窗函数:

-- 聚合开窗函数
count();   -- 窗口内总条数
sum();   -- 窗口内数据的和
min();   -- 窗口内最小值
max();   -- 窗口内最大值
avg();   -- 窗口内的平均值
-- 排序开窗函数
row_number();     -- 从1开始,按照顺序,生成分组内记录的序列
rank();         -- 生成数据项在分组中的排名,排名相等会在名次中留下空位
dense_rank();    -- 生成数据项在分组中的排名,排名相等会在名次中不会留下空位
ntile(n);    -- 将分区中已排序的行划分为大小尽可能相等的指定数量的排名的组,
-- 并返回给定行所在的组的排名。
percent_rank(); -- 计算给定行的百分比排名。可以用来计算超过了百分之多少的人。(当前行
rank值-1)/(分组内的总行数-1)
-- 如360小助手开机速度超过了百分之多少的人。
cume_dist(); -- 计算某个窗口或分区中某个值的累积分布。假定升序排序,则使用以下公式确定积分布:
-- 小于等于当前值x的行数 / 窗口或partition分区内的总行数。其中,x 等于 order by 子句中指定的列的当前行中的值。
-- 其他窗口函数
FIRST_VALUE(); -- 返回分区中的第一个值。
LAST_VALUE(); -- 返回分区中的最后一个值。
LAG(col,n,default); -- 用于统计窗口内往上第n个值。
LEAD(col,n,default);-- 用于统计窗口内往下第n个值。

-- todo 没有主键 不支持索引
-- todo 不支持索引 但是支持并行计算

6.内部表和外部表的区别

①、有external标志的是外部表,无则内部表;

②、内部表由Hive自身管理,而外部表由HDFS管理,数据在HDFS上,外部表可以理解成只是存了条建表语句映射到HDFS上的数据文件,并没有产生数的复制或者迁移;

③、内部表存储位置:默认情况下/hive/warehouse,外部表如果用户没指定,则在/hive/warehouse下以外部表的库名创建一个文件夹,存放其中;

④、内部表删除表会删除元数据和表数据,外部表只会删除这个表的映射,数据还在HDFS上,用户重新映射该位置,数据自动导入。

7.Hive数据类型

1.hive的数据类型:

Hive的内置数据类型分为两大类:(1)基础数据类型,(2)复杂数据类型

2.hive的基本数据类型

基础数据类型包括:

1、TINYINT,

2、SMALLINT,

3、INT,

4、BIGINT,

5、BOOLEAN,

6、FLOAT,

7、DOUBLE,

8、STRING,

9、BINARY,

10、TIMESTAMP,

11、DECIMAL,

12、CHAR,

13、VARCHAR,

14、DATE。

Hive===笔记_第2张图片

3.hive集合类型

        集合类型主要包括:array,map,struct等hive的特性支持集合类型这特性是关系型数据库所不支持的,利用好集合类型可以有效提升SQL的查询速率。

8.hive有哪些存储方式

  1. TestFile、SequenceFile、RcFile、ORC、Parquet、AVRO。
  2. 默认的文件存储格式是TestFile,在建表时若不指定默认为这个格式,那么导入数据时会直接把数据文件拷贝到hdfs上不进行处理。除TestFile外的其他格式的表不能直接从本地文件导入数据,数据要先导入到TestFile格式的表中,然后再从表中用insert导入到其他格式的表中。
  3. TestFile格式

        ①、在建表时无需指定,Hive的默认文件格式,文件存储方式为正常的文本格式。以TestFile文件格式存储的表,在HDFS上可直接查看到数据。

        ②、存储方式:行存储

        ③、优势:可使用任意的分割符进行分割;在hdfs上可查可标记;加载速度较快;

        ④、劣势:不会对数据进行压缩处理,存储空间较大、磁盘开销大、数据解析开销大。

        4. SequenceFile格式

        ①、需在建表是指定stored as sequecefile,文件存储方式为二进制文件,以的形式序列话到文件中。以SequenceFile文件格式存储的表,会对数据进行压缩处理,在HDFS上的数据为二进制格式,不可直接查看。

        ②、存储方式:行存储

        ③、优势:存储时候会对数据进行压缩处理,存储空间小;支持文件切割分片;查询速度比TestFile速度快;

        ④、劣势:无法可视化展示数据;不可以直接使用load命令对数据进行加载;自身的压缩算法占用一定的空间

9、如何确定分区字段

①、RANGE分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。 最常见的是基于时间字段。

②、LIST分区:LIST分区和RANGE分区类似,区别在于LIST是枚举值列表的集合,RANGE 是连续的区间值的集合。

③、HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将 要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非 负整数值的任何表达式。

④、KEY分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且 MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

hive sql转换成MR任务过程

10、hive核心组件图

Hive===笔记_第3张图片

 

1.用户接口:Client、CLI(command-line interface)、JDBC(jdbc访问hive)、WEB UI(浏览器访问hive)

2.元数据:MateStore

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

3.Hadoop

使用HDFS运行存储,使用MapReduce进行计算

4.驱动器:Driver

5.解析器(SQL Parser)

将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;

对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误。

6.编译器(Physical Plan)

将 AST 编译生成逻辑执行计划。

7.优化器(Query Optimizer)

8.执行器(Execution)

把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来说,就是 MR/Spark。

你可能感兴趣的:(hive,大数据,hadoop)