hive入门,
一、产生背景
hive诞生在大数据时代的背景下,是基于hadoop的一种数据仓库分析系统。hive的底层是mapreduce,也就是说hive是对mapreduce的封装。因为面对海量的数据,总有一些数据分析方法是重复的,每次写都会很麻烦。于是,聪明的人便将这些常用方法做了封装。非但如此,hive是以sql语句的形式出现在大众面前,这就方便了熟悉sql语句而不懂mapreduce的技术人员对数据进行处理。
二、工作原理
有图有真相,上图
开发人员可自定义mapper、reducer任务,添加到hive库中协助分析数据。Hive SQL与关系型数据库的SQL略有不同,但都支持常见的DDL、DML以及聚类函数、连接查询、条件查询等(详见官网)。
hive不适合对数据的实时性操作,当然这是有mapreduce决定的。它最适合应用在基于大量不可变数据的批处理作业。Hive 的特点是可 伸缩(在Hadoop 的集群上动态的添加设备),可扩展、容错、输入格式的松散耦合。Hive 的入口是DRIVER ,执行的 SQL 语句首先提交到 DRIVER 驱动,然后调用 COMPILER 解释驱动, 最终解释成 MapReduce 任务执行,最后将结果返回。
三、hive的数据类型
1、基本数据类型
由上表可知hive不支持日期类型,在hive里日期是用字符串来表示的,而常用的日期格式转化操作则是通过自定义函数进行操作。hive是用java开发的,所以hive的基本数据类型是和java基本数据类型一一对应的。string类型除外。有符号的整数类型:TINYINT、SMALLINT、INT和BIGINT分别等价于java的byte、short、int和long原子类型,它们分别为1字节、2字节、4字节和8字节有符号整数。Hive的浮点数据类型FLOAT和DOUBLE,对应于java的基本类型float和double类型。而hive的BOOLEAN类型相当于java的基本数据类型boolean。对于hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。
2、复杂数据类型
Hive 有三种复杂数据类型 ARRAY、MAP 和 STRUCT。ARRAY 和 MAP 与 Java 中的 Array 和 Map 类似,而STRUCT 与 C语言中的 Struct 类似,它封装了一个命名字段集合,复杂数据类型允许任意层次的嵌套。复杂数据类型的声明必须使用尖括号指明其中数据字段的类型。定义三列,每列对应一种复杂的数据类型,如下所示。
CREATE TABLE complex(
col1 ARRAY< INT>,
col2 MAP< STRING,INT>,
col3 STRUCT< a:STRING,b:INT,c:DOUBLE>
)
3.类型转化
Hive 的原子数据类型是可以进行隐式转换的,类似于 Java 的类型转换,例如某表达式使用 INT 类型,TINYINT 会自动转换为 INT 类型, 但是 Hive 不会进行反向转化,例如,某表达式使用 TINYINT 类型,INT 不会自动转换为 TINYINT 类型,它会返回错误,除非使用 CAST 操作。
隐式类型转换规则如下。
1、任何整数类型都可以隐式地转换为一个范围更广的类型,如 TINYINT 可以转换成 INT,INT 可以转换成 BIGINT。
2、所有整数类型、FLOAT 和 String 类型都可以隐式地转换成 DOUBLE。
3、TINYINT、SMALLINT、INT 都可以转换为 FLOAT。
4、BOOLEAN 类型不可以转换为任何其它的类型。
可以使用 CAST 操作显示进行数据类型转换,例如 CAST('1' AS INT) 将把字符串'1' 转换成整数 1;如果强制类型转换失败,如执行 CAST('X' AS INT),表达式返回空值 NULL。