简述:
Hive外部表会在指定的路径处创建数据目录(hdfs),在所建的hive库中仍保留表名,但是在hdfs中是看不见的; 外部表的查询可以通过所建库下直接查询与内部表无异,跨库则需加上库名;
删除表是删不掉数据的,删除的只是元数据,当给数据附上字段,表名重新创建后还是能直接访问数据。
实例:
create external table external_test
(
id int, name string
) row format delimited fields terminated by '\t' location '/external_test'
create external table external_test (id int, name string) row format delimited fields terminated by '\t' location '/external_test';
(建错之后可以通过 :bin/hadoop fs -rm -r /external_test
删除文件夹)
创建好了之后查看hive所在库的表并向表中插入测试数据,(注意最好不要使用insert into valus的方式,这样会产生临时文件,生产上是禁忌,最好使用load)
show tables;
该表显示是在 hive_test 目录下,继续查看hdfs的文件路径
其数据表并没有存在于hive_test 库下
继续查看是否在我们指定的数据目录下面:
此时我们可以得出结论:
外部表会在所建 数据库中有表名出现,但是并不是真实存在于该库下面
但是作为查询,它仍然挂在所建库的名下,比如跨库查询测试一下:
测试查询完成
之后我们继续测试 删除外部表:
1)删除之后就不能继续查询数据
但是hdfs数据目录仍然存在
2) 再以相同的方式创建此外部表 不添加数据的情况下直接查询:
发现数据是存在的,仍然保留。