Hive 采用了类似SQL 的查询语言 HQL (Hive Query Language),因此很容易将 Hive 理解为数据库。其实Hive 是为数据仓库设计的,是数据仓库的客户端,所以要搞清楚Hive与数据库的区别,只要我们搞清楚数据仓库和数据库的区别就可以了。
一、概念
数据库其实是一种逻辑概念,用来存放各种数据(通常数据库指关系数据库),而数据仓库是数据库概念的升级。换句话说,数据仓库可以理解为多个数据库的集合,也是由一张一张的数据表组成的,可以从以下方面区分理解。
从逻辑上理解,数据库和数据仓库没有区别,都是用来存储数据的。
从数据量来说,数据仓库要比数据库数据量体积庞大得多,通常数据仓库是GB级别(百万行数据)大小,而数据仓库则是TB级别甚至是PB级别。
从用途上来看,数据库主要用于业务平台的事务处理(不同业务平台有各自的数据库),而数据仓库主要用于海量数据分析。
二、设计原则
关系数据库一般情况下遵循范式设计,目前关系数据库有六种范式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯−科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。通常设计只需满足3NF规范即可。3NF范式主要要求包括如下:
第1,表内的每一个值都只能表达一个意思。
第2,表内的每一行都有唯一的主键。
第3,表内的每一行的非主键不应该依赖于其它字段信息。
数据仓库设计原则要考虑的因素较多,从访问性能、数据成本、使用成本、数据质量、扩展性来考虑。简单概括如下:
第1,数据产出稳定并且有保障
第2,保证数据干净,数据质量
第3,数据要涵盖的业务足够广
第4,数据构成体系足够透明
由此数据仓库设计采用范式+维度设计,从而达到全局数据分析的目的。
三、功能实现
关系数据库通过数据库软件来实现,主流的关系数据库软件有SQL Server、Oracle、MySQL、DB2等,主要用于业务事务的处理。
数据仓库并不是基于某个软件来实现,而是基于Hadoop生态来构建的。数据存储基于HDFS来实现分布式文件存储,通过Sqoop、Maxwell、Datax来实现数据仓库的数据导入导出,通过Hive、Spark、Flink来实现数据挖掘分析,从而达到辅助企业做决策。
四、数据体现
关系数据库通常服务于企业的业务平台,每个业务平台都有各自的关系数据库及其对应的表,各业务平台之间是独立且分离的。表中保存的是与业务相关的数据,反应了与业务相关数据的动态情况,记录地是业务目前的状态。
数据仓库的数据保存地是各个业务平台的一个或者多个数据库或者文件,比如说像MySQL、redis、Excel文本文件、各业务平台日志文件等等,可以简单理解为很多个业务平台的数据往数据仓库输送,是各种数据的一个集合体。多个业务平台输入的数据都会被保存下来,一般情况不会删除掉,这样也就体现出数据仓库中的数据是有历史轨迹的,数据量体积相对关系数据库更加庞大,这也是与关系数据库的不同之处。
五、总结
数据仓库本质也是数据库,这是它们在概念上相同之处,不同点体现在使用用途、数据量存储方面。从软件的实现及操作方面也就有明显区别,比如关系数据库支持增删改操作,且对交互要求高;数据仓库通常是一次写入多次读取,不支持修改和删除,对交互要求不高。