Hive以及常用函数介绍和总结

前沿

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

参考文章1:Hive常用函数大全

参考文章2:常用Hive函数的学习和总结

参考文章2:Hbase,Hive,Mysql区别完全弄懂

参考文章3:Hive、Hbase、mysql区别

猜你喜欢

转载自blog.csdn.net/qq_32123787/article/details/92395453