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列进行排序。
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 order by deptno;
3)partition by
在over开窗函数中使用,对数据进行分组
4.order by sort by区别1)order by
全局排序,asc升序,desc降序
2)sort by
在每个reduce内有序,对全局不是有序的
4.系统函数 5.窗口函数 6.自定义UDF、UDTF

![[hive] 和数据库的比较 | 内部表和外部表 |distribute by cluster by partition by|order by sort by区别| 系统函数 | 窗口函数 [hive] 和数据库的比较 | 内部表和外部表 |distribute by cluster by partition by|order by sort by区别| 系统函数 | 窗口函数](http://www.mshxw.com/aiimages/31/780522.png)
