如果我在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}}?
答案 0 :(得分:2)
在选择期间是否会移动外部表格中的数据?不,它不会。 INSERT FROM SELECT
查询不是"移动"它是"副本"
欢迎您到hadoop fs -ls
外部表位置进行验证。
删除外部表格数据的唯一方法是从磁盘中删除表格位置。
在这种情况下将是/ user / hive / warehouse
仓库目录是可配置的,但我相信这是默认的,是的
答案 1 :(得分:2)
SELECT * FROM Employee_Test
生成一组行(结果集),然后将其插入Employee
。因此Employee_Test
将继续保留这些行。合同中LOAD DATA INPATH...
实际上会move
数据。