[hive] 和数据库的比较 | 内部表和外部表 |distribute by cluster by partition by|order by sort by区别 | 修复分区

本文对比了Hive与传统数据库的特点,并详细介绍了Hive内部表与外部表的区别,以及distributeby、clusterby、partitionby等高级查询特性的使用方法。

1.和数据库的比较

hive和数据库除了拥有类似的查询语言,再无类似之处。

1)数据的存储位置

hive存储在HDFS,数据库将数据保存在块设备或者本地文件系统中。

2)数据更新

hive中不建议对数据进行修改(开启事务可以做到),而数据库中的数据通常是需要经常修改的。

3)执行延迟

hive执行延迟较高,数据库的延迟较低。但这是有条件的,即数据规模较小。当数据规模大到超过数据库的处理能力时,hive的并行计算显然能体现出优势。

4)数据规模

hive支持大规模的数据计算,数据库可以支持的数据规模较小。

2.内部表和外部表

1)内部表(管理表)

默认创建的表都是内部表,在创建内部表时,hive会将数据移动到配置项

hive.metastore.warehouse.dir所配置的路径,例如/user/hive/warehouse所定义的目录的子目录下,当我们删除一个管理表时,会删除表的元数据和数据。

2)外部表

用external修饰的表都是外部表,因为是外部表,所以hive并不认为其拥有这份数据,删除该表并不会删除掉这份数据,但是会删除元数据。可以用location指定数据存放位置。

一般生产中ods层和ads层(开始和结束)用外部表,中间都是用内部表。

3.distribute by  cluster by partition by区别

1)distribute by

a)distribute by按照指定的列进行分区,分区个数为设置的reduce task个数

b)结合sort by使用

注:distribute by要写在sort by之前,即:先分区,再在在分区内进行排序。

注:要确保reduce task>=2,不然默认只有一个分区,看不出效果。

c)distribute by a sort by b

按照a列进行分区,分区个数为设置的reduce个数。

再在分区内按照b列进行排序。

d)set mapreduce.job.reduces=3;

先按照部门编号分区,再按照员工编号降序排序(输出3个文件)

insert overwrite local directory "xxx"
select * from emp distribute by deptno sort by empno desc;

2)cluster by

a)当distribute by和sort by相同字段时,等价于cluster by

b)但是cluster by只能升序排序,不可以和asc、desc连用

c)以下两种写法等价

select * from emp cluster by deptno;

select * from emp distribute by deptno sort by deptno;

3)partition by

在over开窗函数中使用,对数据进行分组

4.order by sort by区别

1)order by

全局排序,asc升序,desc降序

2)sort by

在每个reduce内有序,对全局不是有序的

a)设置reduce个数

set mapreduce.job.reduces=3;

b)查看reduce个数

set mapreduce.job.reduces;

c)根据部门编号查看员工信息

select * from emp sort by empno desc;(局部有序)

5.修复分区

msck repair table 表名

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值