Hive是基于Hadoop的数据仓库,因此Hive中的数据都保存在HDFS系统中的。在Hive中创建一个表即在HDFS中创建一个目录,而在表中的数据就对应与文件夹下的文件。
一、Table 内部表
1、与数据库中的Table在概念上类似
2、每一个Table在Hive中都有一个相应的目录存储数据
3、所有的Table数据(不含external table)都保存在这个目录中
4、删除表时,元数据与数据都会被删除
5、创建内部表
1)默认设置(位置:/user/hive/warehouse,分隔符:Tab)
2)指定位置:
3)指定分隔符:csv格式分隔符为“,”
4)创建表的同时插入数据,hdfs中的文件内容物分隔符
5)创建表的同时插入数据,指定分隔符 “,”
6)修改表,如增加一列
二、Partition 分区表
1、Partition对应于数据库的Partition列的密集索引
2、在hive 中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存在对应的目录中
3、为什么需要分区表
例如表中第三列性别,查询时需全表扫描,而按照性别创建分区表后可以提高查询速度。
4、创建分区表
三、External Table 外部表
1、指向已经在HDFS中存在的数据,可以创建Partition
2、它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异
3、外部表只是一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当 删除一个外部表时,仅删除该链接。
例如:在Hive上创建外部表student时,需指明列明、列的属性及location,location指向HDFS中数据文件
当查询外部表student时,就将HDFS中的数据文件读取到外部表中并返回给客户端。
4、创建外部表
1)创建文件并上传HDFS
2)创建外部表
四、Bucket Table 桶表
1、桶表是对数据进行哈希取值,然后放到不同文件中存储,可以避免热块,提高查询速度
例如:按照第二列name进行分桶,Tom,Jerry,Scott进行哈希运算后结果相同则分到同一桶中
2、创建桶表
注意:查看该桶表发现与内部表一样,只是在插入数据时,会对sname进行哈希运算分到5个桶中
五、视图
1、视图是一个虚表,是一个逻辑概念;可以跨越多个表
2、视图建立在已有表的基础上,视图赖以建立的这些表称为基表
3、视图可以简化复杂的查询
4、创建视图
5、能够存数据的视图称为物化视图,Mysql和Oracle支持物化视图,但Hive不支持