hive sql和mysql的区别_【mysql和hivesql区别】

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

默认情况下,HiveSQL的底层基于MR程序运行。在分析HiveSQL的操作原理之前,我们首先来看一下实现某些SQL操作的MR程序的基本原理。

MR中联接的实现原理

从命令中选择u.name,o.orderid o在o.uid = u.uid上加入用户u;

在地图的输出值中标记不同表中的数据,并在还原阶段根据标记确定数据源。 MapReduce的过程如下:

456532455eb83f6b86c12f2968782479.png

MR中分组依据的实现原理

从等级,等位线城市中选择等级,等位线,计数(*);

将GroupBy字段组合到地图的输出键值中,并使用MapReduce排序在reduce阶段保存LastKey来区分不同的键。 MapReduce的过程如下(当然,这里只是为了说明Reduce方面的非哈希聚合过程):

f2590b4edb6a4b1fe1f5085d2bdd9a63.png

MR中distinct的实现原理

选择交易编号,按交易编号对订单组计数(不同的uid);

当只有一个不同的字段时,如果在Map阶段不考虑Hash GroupBy,则只需将GroupBy字段和Distinct字段组合为地图输出键,请使用mapreduce排序,然后将GroupBy字段用作reduce键,并在reduce阶段中保存LastKey以完成重复数据删除。

974734e6283f73329f4e9a8c0e375971.png di>

如果存在多个不同的字段,例如以下SQL:

从交易组中按交易编号选择交易编号,计数(不同的uid),计数(不同的日期);

有两种方法可以实现:

1)如果您仍然遵循上面不同字段的方法,即下图所示的实现,则不能根据uid和date分别进行排序,也不能使用LastKey进行重复数据删除。在reduce阶段,您仍然需要在内存中传递Hash。重复数据删除。

0871d69566ebcda1811a3987c7d66f06.png

2)在第二种实现中,所有不同的字段都可以编号。每行数据生成n行数据,然后将对相同的字段分别进行排序。在这种情况下,只需要在reduce阶段记录LastKey即可删除重复项。

此实现很好地利用了MapReduce排序,在减少阶段节省了重复数据删除的内存消耗,但是缺点是增加了随机数据的数量。

应该注意的是,当生成缩减值时,其他唯一数据行的值字段可以为空,但第一个唯一字段所在的行除外。

95675342b3e3abe86c28ad7375e59a91.png

将SQL转换为MapReduce的过程

了解了MapReduce实现的SQL的基本操作之后,让我们看一下Hive如何将SQL转换为MapReduce任务。整个编译过程分为六个阶段:

Antlr定义SQL语法规则,完成SQL词法,语法分析,并将SQL转换为抽象语法树AST Tree

遍历AST树以抽象基本查询单元QueryBlock

遍历QueryBlock并将其转换为运算符树

逻辑层优化器执行OperatorTree转换,合并不必要的ReduceSinkOperator,并减少随机数据的数量

遍历OperatorTree并转换为MapReduce任务

物理层优化器转换MapReduce任务并生成最终执行计划

为了详细说明将SQL转换为MapReduce的过程,这里以一个简单的SQL为例,SQL包含一个子查询,最后将数据写入表中

SQL生成AST树

生成的AST树在下图的右侧生成(使用Antlr Works生成,Antlr Works是用于编写Antlr提供的语法文件的编辑器)。该图仅扩展了骨骼的几个节点,但没有完全扩展。

子查询1/2对应于右侧的前两个部分。

aa0c9135fee7646ef2dc601b133d51ca.png3描述>

注意,内部子查询还会生成一个TOK_DESTINATION节点。请参见上面的SelectStatement的语法规则,此节点是在语法重写中专门添加的节点。原因是Hive中的所有查询数据都将存储在临时HDFS文件中,无论是中间子查询还是查询的最终结果,Insert语句最终都会将数据写入HDFS表所在的目录。

Hive使用类似SQL的查询语言HQL(Hive查询语言)。它们的操作语言类似,用于创建表,创建数据库以及添加,删除和修改查询。

除此之外,基本上没有相似之处。

除了hql的相似语法外,内核,存储位置,是否可以更新,是否有索引,执行延迟,可伸缩性和数据大小也有所不同。

Hive专为数据仓库而设计。

存储位置:Hive在Hadoop上; Mysql将数据存储在设备或本地系统中

数据更新:Hive不支持数据的重写和添加,它已经确定何时加载;数据库可以是CRUD

索引:没有索引的配置单元,每次扫描所有数据,底层为MR,并行计算,适合大量数据; MySQL具有索引,适用于在线查询数据

执行:Hive的底层是MapReduce; MySQL的最底层是执行引擎

可扩展性:蜂巢:数据量大,可扩展性好; MySQL:相对较少

因此Mysql可以进行在线业务,而Hive仅可以进行离线分析业务。

参考:https://www.cnblogs.com/csguo/p/7553022.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值