Hive和mysql的区别

  • 1. 数据存储和运算
  • 2. 数据类型
  • 2.1 基本数据类型
  • 2.2 集合数据类型
  • 3. 表类型
  • 3.1 内部表
  • 3.2 外部表
  • 3.3 分区
  • 3.4 分桶


1. 数据存储和运算

(1)数据存储方式,Hive的数据是存储在HDFS上的,在Hive中进行解析编译后才被应用层识别。所以Hive的数据遵循HDFS的规则,例如NN元数据和DN备份,存储优化。

(2)数据的查询运算上,在一些情况下(大部分复杂运算)需要走MR进行计算。

2. 数据类型

2.1 基本数据类型

Hive数据类型

Java数据类型

长度

例子

TINYINT

byte

1byte有符号整数

20

SMALINT

short

2byte有符号整数

20

INT

int

4byte有符号整数

20

BIGINT

long

8byte有符号整数

20

BOOLEAN

boolean

布尔类型,true或者false

TRUE FALSE

FLOAT

float

单精度浮点数

3.14159

DOUBLE

double

双精度浮点数

3.14159

STRING

string

字符系列。可以指定字符集。可以使用单引号或者双引号。

‘now is the time’ “for all good men”

TIMESTAMP

时间类型

BINARY

字节数组

2.2 集合数据类型

数据类型

描述

语法示例

STRUCT

和c语言中的struct类似,都可以通过“.”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。

struct()

MAP

MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素

map()

ARRAY

数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。

Array()

3. 表类型

3.1 内部表

Hive的内部表就是正常情况下的表,元数据与数据内容相连,在删除表的同时会删除数据。(但在HDFS中,使用HDFS命令来数据数据的情况下不会删除表)。

3.2 外部表

Hive中的外部表是区分与内部表,元数据与数据内容之间分离,在客户端删除表数据后不会删除数据内容,在之后在需要数据时可以通过建一个符合规则的表就可以在Hive客户端中使用数据。

3.3 分区

Hive的分区表,在表的使用上相当来添加一个字段来对数据进行分区,可以使用where语句进行查询等操作。

在存储层面上是单独在database文件夹中单独建立一个等于数据的存储路径来进行分区,并通过Hive元数据来进行编译,读取来进行的。

3.4 分桶

分区针对的是数据的存储路径;分桶针对的是数据文件。

分区提供一个隔离数据和优化查询的便利方式。不过,并非所有的数据集都可形成合理的分区,特别是之前所提到过的要确定合适的划分大小这个疑虑。

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