Hive的基本概念

2021-12-03  本文已影响0人  乙腾

一.基本概念

1.基本介绍

什么是Hive

简单理解

特点

Hive本质

image.png

知识补充: 数据库和数据仓库的区别

数据库:传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易

数据仓库:数据仓库系统的主要应用主要是OLAP(On-Line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

2.数据单元

Hive中核心的几个数据单元解析如下:

3. 数据类型

Hive的数据类型分为基本数据类型和复杂数据类型。

3.1 基本类型

基本数据类型与常用的大部分数据库类似,包括以下几种:

3.2 复杂数据类型

3.2.1 STRUCT

  STRUCT是一个记录类型,封装了一个命名字段集合。

  一个STRUCT类型的元素可以包含不同类型的其他元素,并且可以使用点符号“.”访问类型中的元素。

例子

  假如现在需要创建一张学生表“student”,其中有两列,一列是主键id,另一列是学生信息info,其中学生信息包括姓名和年龄,则该表的创建语句如下:


CREATE TABLE student(id INT,info STRUCT<name:STRING, age: INT>)

向表“student”中导入以下测试数据:

image.png

若需要查询年龄大于20的所有数据,查询语句如下:


SELECT * FROM STUDENT WHERE info.age>20;

查询输出结果为:

image.png

3.2.2 键值对(MAP)

  类似于Java中的Map,使用键值对存储数据,根据键可以访问值。

例子

  在上方的学生表例子中,若将列info的类型改为MAP<STRING,INT>,则创建表的语句如下:


CREATE TABLE student (id INT,info MAP<STRING,INT>)

然后向表中导入以下测试数据:

[图片上传失败...(image-d1f0de-1638497175786)]

查询姓名为zhangsan,年龄为20的所有数据,查询语句如下:


SELECT * FROM student WHERE info[zhangsan]=20

输出结果


1 zhangsan:20,english:98

3.2.3 数组(ARRAY)

  类似于Java中的数组,数组中所有元素的类型相同。

例子

  仍然以上方的学生表为例,若将列info的类型改为ARRAY <STRING>,则创建表的语句如下:


CREATE TABLE student(id INT,info ARRAY<STRING>)

然后向表中导入以下测试数据(冒号前面为数组的第一个值,后面为第二个值):

image.png

查询表中年龄大于20的所有数据,查询语句如下:


SELECT * FROM student WHERE info[1]>20

查询结果

image.png

此外,一张表中也可以存在多个复杂数据类型。例如,创建表“student”,其中有三列col1、col2和col3,每一列都使用复杂数据类型,创建语句如下:


CREATE TABLE student(

    col1 STUDENT<a:STRING,b:INT,c:DOUBLE>),

    col2 MAP<STRING,INT>,

    col3 ARRAY<INT>

    )

4.Hive优缺点

5.Hive架构体系

image.png

1)用户接口:Client

  CLI是Hive的命令行界面(模式),是Hive最常用的一种方式。CLI本质上是Hive的一个客户端服务,启动客户端后进入交互式命令行,即可通过HiveQL访问Hive中的数据

2)元数据:Metastore

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

  默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore

3)Hadoop

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

4)驱动器:Driver

6.运行机制

image.png

  Hive 通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的 Driver, 结合元数据(MetaStore),将这些指令翻译成 MapReduce,提交到 Hadoop 中执行,最后,将 执行返回的结果输出到用户交互接口。

7.Hive和数据库的比较

  Hive 采用了类似 SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。 本文将从多个方面来阐述 Hive 和数据库的差异。数据库可以用在 Online 的应用中,但是 Hive 是为数据仓库而设计的,清楚这一点,有助于从应用角度理解 Hive 的特性。

上一篇下一篇

猜你喜欢

热点阅读