Hive包含内部表、外部表、分区表和桶表。
一、内部表
内部表也称为管理表。因为这种表,Hive会或多或少地空值数据的生命周期。Hive默认情况下回将这些表的数据存储在由配置项hive.metastore.warehouse.dir所定义的目录(比如/user/hive/warehouse)的子目录下。
如果我有一个表test,那么在HDFS中会创建/user/hive/warehouse/test目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse);test表所对应的所有数据都存放在这个目录中。
如果删除这张表,则表在关系数据中存储的元数据以及在warehouse目录下的数据也会被清除掉。
同时管理表不方便与其他工作共享数据。例如我们有一份由Pig或者其他工具创建并且主要由这一工具使用的数据,同时我们还想使用Hive在这份数据上执行一些查询,可是并没有给予Hive对数据的所有权,我们可以创建一个外部表指向这份数据,而并不需要对其具有所有权。
二、外部表
为了避免潜在产生混淆的可能性,如果用户不想使用默认的表路径,那么最好是使用外部表。
外部表可以读取指定目录下的以逗号为分隔的数据:
CREATE EXTERNAL TABLE IF NOT EXISTS stocks(
exchange STRING,
symbol STRING,
ymd STRING,
price_open FLOAT,
price_high FLOAT,
volume INT,
price_adj_close FLOAT)
ROW FORMAT DELIMITED FIFLDS TERMINATED BY ',' --逗号分隔文件
LOCATION '/data/stocks' --指定Hive数据的路径
因为表是外部的,所以Hive并非认为完全拥有这份数据,从而删除该表的时候不会删除这份数据。不过描述表的元数据信息会被删除掉。
三、分区表
分区表用于水平分散压力,将数据从物理上转移到和使用最频繁的用户更近的地方。