假设我有两个表:

外部:

create external table emp_feedback (
  emp_id int,
  emp_name string
)
LOCATION '/user/hive/warehouse/mydb.db/contacts';

内部:
create table emp_feedback (
  emp_id int,
  emp_name string
)
LOAD DATA INPATH 'file_location_of_csv' INTO TABLE emp_feedback;
  • 当我说:外部表的LOCATION '/user/hive/warehouse/mydb.db/contacts';时,是否表示该表的数据位于'/user/hive/warehouse/mydb.db/contacts';目录中?因此该目录必须事先存在于HDFS中?
  • 我可以将LOAD DATA INPATH...用于external表,还是仅用于internal表。反之亦然,我可以对内部表使用Location...吗?
  • 最佳答案

  • (a)是。您是对的,这意味着可以在该位置/目录
  • 中找到数据
  • (b)否。创建架构不必存在该目录,如果该目录不存在,Hive将创建该目录。但是这样做没有意义,因为您的表将为空,因此您的查询将为空。但是将来,您可以将数据移动到该位置并使用该表。
  • (a)LOAD DATA INPATH可用于外部和内部表。完成后,它将数据移动到架构指定的位置(对于外部表)或/.../warehouse/...(对于内部表)
  • (b)可以为内部和外部表都指定location。但是,当您删除内部表时,它也会从该位置删除数据,而对于外部表仅删除元数据信息。
  • 09-30 12:22