1. 基本概念
1.1. 什么是Hive
简介
是基于Hadoop的数仓工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能,
Hive本质:
将HQL转化为MapReduce程序
- Hive处理的数据存储在HDFS上
- Hive分析数据底层的实现是MapReduce
- 执行程序运行在Yarn上
1.2. 优缺点
1.2.1. 优点
- 接口采用类sql语法,提供快速开发能力(简单,容易上手)。
- 避免写MapReduce,减少学习成本
- Hive执行延迟比较高,常用于数据分析,对实时性要求不高的场景。
- 优势在于处理大数据
- 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
1.2.2. 缺点
- HQL表达能力有限
- 迭代式算法无法表达
- 数据挖掘方面不擅长,由于MapReduce数据处理流程的限制,效率更高的算法无法实现
- Hive的效率比较低
- Hive自动生成MapReduce作业,通常情况下不够智能
- 调优比较困难,粒度较粗
1.3. 架构
用户接口: Client
CLI(hive shell),JDBC/ODBC, WEBUI
元数据:Metastore
元数据包括:表名。表所属的数据库,表的拥有者,列/分区字段,表的类型(是否是外部表),表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用MySql.
1.3.2. 运行机制
2. 数据类型
2.1. 基本数据类型
2.2. 复杂数据类型
Struct, Map, Arrary
举例:
假设有以下数据:
1 | { |
有以下文本文件:
1 | zhangsan,lisi_wangwu,lao da:18_lao er:17,zhong guan cun_beijing |
注意:Map,Struct和Array里的元素关系都可以用同一个字符表达,这里用”_”
建表:
1 | create table test( |
从文件中添加数据:
1 | hive> load data local inpath '/home/bruce/SoftWare/apache-hive-2.3.7-bin/test/test' into table test; |
查看数据库
1 | hive> select * from test; |