赞
踩
hive默认建表方式就是建立内部表。
建外部表语句:
- create external table table_exter(
- id int,
- name string,
- age int,
- tel string)
- ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
- stored as textfile
- location '/user/hive/warehouse/gbd_dm_qydb_safe.db/test';
相应的txt文件:
1|xiaoming|24|shanghai
使用load命令装载进表:load data local inpath 'table_exter.txt' overwrite into table table_exter;
查询一下内容:
可以看到创建外部表需要关键词external,来表示这个表是外部表。
尝试一下truncate操作:
发现报了个错,这是因为外部表是不能truncate的,究其原因是因为外部表并不是由它自己管理的。
再尝试一下drop操作:
按理来说,drop之后相应的hdfs上数据仓库下的文件也会删除,但其实不然:
这张图是drop前和drop后的,可以看到没有任何变化。外部表只是删除了元数据,并没有真正删除表内的数据。
结论:
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变,相当于只是指向hdfs上某个地方数据的一个表。
在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。