网站首页 > 技术文章 正文
之前小鸟对Hive做过一些总结,但是如果说到Hive跟传统数据库相比有哪些区别,很多人可能还是说不清楚,今天小鸟就带大家总结一下Hive和传统数据库之间的联系与区别。
一、联系
传统数据库都使用的SQL语句,而Hive使用的是HQL语句,在大部分情况下其增删改查的语句都是类似的,因此广义上而言,学会了SQL语句的语法也就学会了HQL语句。
二、区别
- 读时模式 vs 写时模式
用过数据库的都知道,数据库需要在创建时制定好数据格式,也就是俗称的建表。传统数据库和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与传统数据库的区别有所了解呢?其实这个问题在面试中也经常会被提及,所以非常值得收藏。另外喜欢小鸟的话可以多多关注,小鸟会提供更多大数据以及互联网的相关资讯和教程。
猜你喜欢
- 2024-10-12 大数据分析工具——hive入门 hive数据分析的一般流程是什么
- 2024-10-12 019Hive基本使用03 019Hive基本使用03 #liaoit
- 2024-10-12 手把手教你搭建Hive环境 搭建hive集群
- 2024-10-12 0474-如何使用SQL Developer访问Hive
- 2024-10-12 大数据之-HIVE入门(十四) php hive大数据处理
- 2024-10-12 Hive 迁移参考方案及测试(下) hive表迁移
- 2024-10-12 0263-Hive2.2.0如何与CDH集群中的Spark1.6集成
- 2024-10-12 如何在HUE上通过oozie调用Hive SQL工作流
- 2024-10-12 百度二面:你做过哪些Hive调优啊? hive调优与参数设置
- 2024-10-12 HiveSQL:如何从给定的日期中减去指定数量的天数?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)