前言

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式。

一、hive、mysql和HBase的区别

HIVE-MYSQL

 

 


Hive

MYSQL

查询语言

HQL

SQL

数据存储

HDFS

磁盘上

数据格式

用户自定义

系统定义格式

数据更新

不支持更新、只可读,不可写

支持数据更新

执行

MR

Excutor

延迟

高(全量扫描整个表)


处理规模



索引

0.8版本之后加入图索引,通过mapreduce暴力扫描整个数据

有复杂的索引

可扩展性

与Hadoop一致支持可扩展性

ACID 语义的严格限制,扩展行非常有限

HIVE-Hbase

 

 


Hbase

Hive

类型

列式数据库

数据仓库

内部机制

数据库引擎

MR

增删改查

都支持

只支持导入和查询

Schema

需要预先定义列族,不需要具体到列可以动态修改

需要预先定义表格

应用场景

实时

离线

特点

k-v

类SQL

特征

hbase是低延迟、非结构化和面向编程的

hive是高延迟、结构化和面向分析

MYSQL-Hbase

 

 


Hbase

MYSQL

数据库

NoSQL类型

关系型数据库

存储



数据量



结构操作

非结构式数据跟结构化的数据插入修改查询一些简单操作

结构化的数据/复杂操作

二、hive常用函数大全

2.1 json字符串处理:get_json_objectlateral viewexplodesubstrjson_tuple

语法: get_json_object(string json_string, string path)
返回值: string
说明:解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。

语法: explode(ARRAY),经常和lateral view一起使用
返回值: 多行
说明: 将数组中的元素拆分成多行显示

语法: substr(string A, int start, int len),substring(string A, int start, int len)
返回值: string
说明:返回字符串 A 从 start 位置开始,长度为 len 的字符串

语法: json_tuple(string json_string, col1, col2, …) ,经常和lateral view一起使用
返回值: string
说明:同时解析多个json字符串中的多个字段

语法: parse_url(string urlString, string partToExtract , string keyToExtract)
返回值: string
说明:返回 URL 中指定的部分。 partToExtract 的有效值为: HOST, PATH, QUERY, REF,
PROTOCOL, AUTHORITY, FILE, and USERINFO

语法: regexp_replace(string A, string B, string C)
返回值: string
说明:将字符串 A 中的符合正则表达式 B 的部分替换为 C

 

语法: regexp_extract(string subject, string pattern, int index)
返回值: string
说明:将字符串 subject 按照 pattern 正则表达式的规则拆分,返回 index 指定的字符

语法: collect_set (col)
返回值: array
说明: 将 col 字段进行去重, 合并成一个数组

语法: collect_list (col)
返回值: array
说明: 将 col 字段合并成一个数组,不去重

语法: concat(string A, string B…)
返回值: string
说明:返回输入字符串连接后的结果,支持任意个输入字符串

语法: concat_ws(string SEP, string A, string B…)
返回值: string
说明:返回输入字符串连接后的结果, SEP 表示各个字符串间的分隔符

语法: datediff(string enddate, string startdate)
返回值: int
说明: 返回结束日期减去开始日期的天数。日期的格式需要是yyyy-MM-dd,或者yyyy-MM-dd HH:mm:ss

 

语法: from_unixtime(bigint unixtime[, string format])
返回值: string
说明: 转化 UNIX 时间戳(从 1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式,默认的format是yyyy-MM-dd HH:mm:ss,可以指定别的

语法: unix_timestamp(string date[, string format])
返回值: bigint
说明: 转换 pattern 格式的日期到 UNIX 时间戳。如果转化失败,则返回 0。默认的format是yyyy-MM-dd HH:mm:ss,可以指定别的

语法: to_date(string timestamp)
返回值: string
说明: 返回日期时间字段中的日期部分

语法: COALESCE(T v1, T v2, …)
返回值: T
说明: 返回参数中的第一个非空值;如果所有值都为 NULL,那么返回 NULL

总结:

hive、mysql和HBase都是我们数仓数据存储的一种方式,数据结构的存储有一些差异,查询方式也存在一些差异,各家公司会根据不同的业务场景和不同阶段,选择不同的数据存储方式,我们在实际运用中可以,因地制宜、可以现学现卖。