管理表:
管理表也被称为内部表。因为这种表,hive会或多或少的控制着数据的生命周期,正如我们所看见的,Hive默认情况下会将这些数据存储在配置项hive.metastore.warehouse.dir
(例如,/user/hive/warehouse)所定义的目录下。
当我们删除一个管理表时,hive也会删除这个目录中的数据,但是,管理表不方便和其他工作共享数据。例如,假设我们有一份由pig或者其他工具创建并且主要由这一工具使用的数据,同时我们还想使用hive在这份数据上执行查询,可是没有给予hive对数据的所有权,我们可以创建一个外部表指向这份数据而不需要对其具有所有权。
外部表:
create external table hive_part_sale_detail(
Z0PLANT string
,MATERIAL string
,ZOF_TYPE string
,RPA_CST decimal(17,2)
,RPA_SAT decimal(17,2)
,RPA_ETS2 string
,SALES_UNIT string
,RPA_RLQ decimal(17,3)
,BASE_QTY decimal(17,3)
,RPA_TNR string )
partitioned by (RPA_ETS1 string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS orc
location '/data/stocks';
关键字external告诉hive这个表是外部的,而后面的location....字句则用于hive数据位于那个数据下,因为表是外部的,所以hive并非认为其完全拥有这份数据
因此,删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。
好的软件设计的一般原则是表达意图。如果数据会被多个工具共享,那么可以创建一个外部表,来明确对数据的所有权。