如何插入Hive中的Managed表会影响另一个表中的数据?

时间:2018-02-04 04:49:06

标签: hadoop hive

如果我在Hive下面有这个Managed表:

CREATE TABLE Employee (
   empId int,
   name VARCHAR(100))
COMMENT 'Employees'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\t’
LINES TERMINATED BY ‘\n’
STORED AS TEXTFILE;

现在,如果我像这样插入上表:

INSERT INTO TABLE Employee SELECT * FROM Employee_Test; 

由于Employee表是托管表,当我在上面发出INSERT INTO命令时,来自Employee_Test的数据将永久移入Employee表目录(其中在这种情况下,/user/hive/warehouse将是Employee_Test,因为它是一个托管表)?

因此,数据不再位于{{1}}?

2 个答案:

答案 0 :(得分:2)

在选择期间是否会移动外部表格中的数据?不,它不会。 INSERT FROM SELECT查询不是"移动"它是"副本"

欢迎您到hadoop fs -ls外部表位置进行验证。

删除外部表格数据的唯一方法是从磁盘中删除表格位置。

  

在这种情况下将是/ user / hive / warehouse

仓库目录是可配置的,但我相信这是默认的,是的

答案 1 :(得分:2)

SELECT * FROM Employee_Test生成一组行(结果集),然后将其插入Employee。因此Employee_Test将继续保留这些行。合同中LOAD DATA INPATH...实际上会move数据。