hive是什么呢?如果用它的百度概念,那就是:
- hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
看完第一反应是不是:这都啥跟啥?
在经历无数次百度之后,我终于弄清hive小怪的真面目。它就是hadoop小boss的亲民大使呀。
hadoop作为目前最流行的大数据处理平台,手下有两大左右护法:HDFS和MapReduce,HDFS善文,专门存储文件,脑容量特别大;MapReduce善武,专门处理文件,十八样武艺样样精通。
但是,我等平民怎么懂得和这两位大将沟通呢?这时候,hive就出现了,我等平民用sql语言和hive交流,然后hive再将我们的请求传达给hadoop。
如图:
好咯,既然hive小怪是为我们数据分析师服务的,那接下来要好好了解它的喜好啦,争取早日把这只小怪拿下!
这篇文章,四毛就来分享一下hive的数据模型~
首先,数据模型是什么?
数据模型其实就是数据存储和展现的不同形式,不同的模型有不同的特征和操作方式。hive中,数据模型可以分为表(table)和视图(view)两大类,而表又有多个子分类。
1.内部表和外部表
内部表是由hive创建并加载数据的表,存储在hive的数据仓库里。亦就是说,内部表是hive的亲儿子,hive创建了它,并给它加载数据。
外部表是hive创建了一个表来加载现阶段已存在于HDFS中的数据。可以理解为,外部表是hive雇佣的员工,hive创建了它,它自带数据。
那么一个是亲儿子,一个是外雇的员工,他们有什么不同点呢?
2.分区表和桶表
分区表是按照partition列对数据进行拆分,所有的partition表都存储在同一目录下,可以提高查询效率。可以理解为,我们把数据按条件拆分,并放在一个文件夹里,便于我们查看。
桶表是对数据进行哈希取值,打散了之后放到不同的文件中存储。不专业地说,就是数据太大了,所以我们把数据随机放在几个桶里,要用的时候可以全部用,也可以取其中一桶或多桶。
下图是个举例,从中可以看出桶表和分区表的一些区别来~
那么我们来总结一下,他俩有什么不同点呢?
3.视图
视图是一种虚表,是一个逻辑概念,建立在已有表的基础上,用于跨表查询。视图赖以建立的这些表称为基表。通俗地说,表是实实在在的数据,而视图只是那美丽的“海市蜃楼”,我们可以利用视图做任何表格操作,但最终,它不过是浮云啊~
那如何创建视图呢?举个栗子:
create view view1 as select a.id,a.name,b.salary,b.dept from test1 a,test2 b where a.id=b.id;
注:为避免小伙伴们说我不严谨,这里说明一下:hive的视图是虚的,但并不是所有的视图都是虚的,例如:Mysql和Oracle中也有实物化的视图。