Hive教程进阶快速了解Hive与传统数据库的区别

  之前小鸟对Hive做过一些总结,但是如果说到Hive跟传统数据库相比有哪些区别,很多人可能还是说不清楚,今天小鸟就带大家总结一下Hive和传统数据库之间的联系与区别。

  传统数据库都使用的SQL语句,而Hive使用的是HQL语句,在大部分情况下其增删改查的语句都是类似的,因此广义上而言,学会了SQL语句的语法也就学会了HQL语句。

  用过数据库的都知道,数据库需要在创建时制定好数据格式,也就是俗称的建表。传统数据库和Hive在使用前都需要建表,但是不知道小伙伴们有没有遇到这种情况。传统数据库在建表之后往里面导数据时,通常会因为很多问题导致SQL异常,从而加载出错,而常见的情况就是数据格式不对。

  传统数据库在加载数据的时候会严格检查数据格式,如果不符合规范就会拒绝加载。而这种验证过程将耗费大量时间,这对于大数据而言,时间上是无法满足需求的。而Hive在插入数据的时候并不会验证数据,它只会在查询的时候验证。这种加载时验证的方式称之为读时模式,而查询时验证的方式则称之为写时模式。

  Hive在执行HQL语句的时候,后台其实还是使用MapReduce程序来完成任务的,而普通数据库则是借助自己的引擎。

  MapReduce是基于HDFS系统的,通常而言Hive处理数据都是度多写少。Hive的表更新是采用覆盖的方式,而这种情况下处理数据绝大部分都会访问整个表。这对在大规模数据集上运行的数据仓库非常见效。

  早期的Hive只能利用insert into语句,以增加文件的方式向表中批量增加行。而在0.14.0版本之后,Hive允许使用Insert into table ...... value语句,这代表着可以按行加数据,不过不能大量添加。另外update和delete操作也被允许执行了。

  HDFS只能允许文件的覆盖,不允许文件的更新。所以update、delete和insert into操作引起的变化会存在一个很小的增量文件中。然后metastore在后台的MapReduce程序会将他们合并到“基表”中。这些操作就需要事务的支持,这样才能保证表的一致性。

  Hive的隔离性是借助Zookeeper完成的。在0.7.0的版本Hive中,初次引入了锁的概念。有了锁则可以保证一个表的非查询操作在某一时刻只能由一个进程来执行。默认情况下锁功能是关闭的。

  由于Hive是采用的写时模式,因此数据在加载的过程中不会被校验,因此也不会对数据建立索引。但是Hive并非不支持索引,只是Hive的索引只能建立在表的列上,而不支持主键或者外键。Hive的索引分为紧凑索引和位图索引。紧凑索引适用于值已经经过聚簇处理的情况,而位图索引适用于值的取值范围较小的情况。

  其实对于更新、事务和索引,并非Hive不支持,而是影响性能,不符合最初数据仓库的设计理念。但是随着时间的发展,Hive在很多方面也做出了妥协,这也导致了Hive和传统数据库的区别越来越小。

  看完这些大家是否对Hive与传统数据库的区别有所了解呢?其实这个问题在面试中也经常会被提及,所以非常值得收藏。另外喜欢小鸟的话可以多多关注,小鸟会提供更多大数据以及互联网的相关资讯和教程。

TAG标签: hive插数据库
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。