前言
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_object
,lateral view
,explode
,substr
,json_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都是我们数仓数据存储的一种方式,数据结构的存储有一些差异,查询方式也存在一些差异,各家公司会根据不同的业务场景和不同阶段,选择不同的数据存储方式,我们在实际运用中可以,因地制宜、可以现学现卖。