hive和mysql的对比_Hive和传统数据库进行比较

写在前面的话,学《Hive的那些事》序列文章,分享给大家。我会在接下来的时间整理有关Hive的资料,如果对Hive的东西感兴趣,请关注本博客。https://www.iteblog.com/archives/tag/hive-technology/

Hive的设计目的是为了那些精通SQL技能的分析师能够对存放在HDFS上的大规模数据集上进行查询。既然是为了那些精通SQL技能的分析师设计,那么Hive应该和传统的数据库有很多相同的地方,那么它们是不是完全一样?Hive是否也遵循SQL92标准?答案是不完全是。那么它们的区别与联系到底体现在什么地方?这就是今天本文本需要讨论的话题。

Hive在很多方面和RMDB类似,比如说它支持SQL接口;但是由于其它底层设计的原因,对HDFS和Mapreduce有很强的依赖,这也就意味这Hive的体系结构和RMDB有很大的区别。这些区别又间接的影响到Hive所支持的一些特性。

在传统的RMDB中,表的模式是在数据加载的时候强行确定好的。如果在加载时发现数据不符合模式,则拒绝加载这些数据。而Hive在加载的过程中不对数据进行任何的验证操作,其只是简单的将数据复制或者移动到表对应的目录下面。从这方面来说,传统数据库在数据加载的过程中比Hive要慢。但是因为传统数据库在数据加载过程中可以进行一些处理,比如对某一列建立索引等,这样可以提升数据的查询性能。而在这方面Hive不行。

我们都知道,数据库的事务、索引以及更新都是传统数据库的重要特性。但是Hive到目前也不支持更新(这里说的是对行级别的数据进行更新),不支持事务;虽然Hive支持建立索引(可以参见本博客《Hive创建索引》),但是它还不能提升数据的查询速度。下表列出了RMDB和Hive的比较:比较项SQLHiveQL

ANSI SQL支持不完全支持

更新UPDATE\INSERT\DELETEinsert OVERWRITE\INTO TABLE

事务支持不支持

模式写模式读模式

数据保存块设备、本地文件系统HDFS

延时低高

多表插入不支持支持

子查询完全支持只能用在From子句中

视图UpdatableRead-only

可扩展性低高

数据规模小大

................

从上表可以看出,Hive和传统的数据库还是有很多的区别。

Hive的SQL方言一般被称为HiveQL,在下文我们简称HQL。在上面我们提到,HQL并不完全支持SQL92标准。这个也是有原因的。遵循SQL92从Hive的设计开始就不是它的目标。在本博客的《Hive内置数据类型》中,我们提到了Hive支持或者将来支持的内置数据类型,这里我们列出HQL和SQL92的其他的一些对比,如下图所示:

7a8212ccb3fe921bd0f74f70e419bcbd.png

如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop

上图中是使用Hive 0.11.0版本进行说明的,Hive 0.11.0版本不支持的数据类型很多都在Hive 0.12.0,Hive 0.13.0版本中开始支持。这个可以参见本博客的《Hive内置数据类型》的详细说明进行更多的了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值