欢迎投稿

今日深度:

hive入门,

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类型除外。有符号的整数类型:TINYINTSMALLINTINTBIGINT分别等价于javabyteshortintlong原子类型,它们分别为1字节、2字节、4字节和8字节有符号整数。Hive的浮点数据类型FLOATDOUBLE,对应于java的基本类型floatdouble类型。而hiveBOOLEAN类型相当于java的基本数据类型boolean对于hiveString类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB的字符数。
2、复杂数据类型

Hive 有三种复杂数据类型 ARRAYMAP STRUCTARRAY 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 可以转换成 INTINT 可以转换成 BIGINT

  2、所有整数类型、FLOAT String 类型都可以隐式地转换成 DOUBLE

  3TINYINTSMALLINTINT 都可以转换为 FLOAT

  4BOOLEAN 类型不可以转换为任何其它的类型。

 可以使用 CAST 操作显示进行数据类型转换,例如 CAST('1' AS INT) 将把字符串'1' 转换成整数 1;如果强制类型转换失败,如执行 CAST('X' AS INT),表达式返回空值 NULL



www.htsjk.Com true http://www.htsjk.com/hive/38518.html NewsArticle hive入门, 一、产生背景 hive诞生在大数据时代的背景下,是基于hadoop的一种数据仓库分析系统。hive的底层是mapreduce,也就是说hive是对mapreduce的封装。因为面对海量的数据,总有一些数...
相关文章
    暂无相关文章
评论暂时关闭