[hive]hive数据模型中四种表

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并非认为完全拥有这份数据,从而删除该表的时候不会删除这份数据。不过描述表的元数据信息会被删除掉。

三、分区表

分区表用于水平分散压力,将数据从物理上转移到和使用最频繁的用户更近的地方。

你可能感兴趣的:(SQL)