面试中常会问到这种题目:

1.hive内部表和外部表的区别

2.什么时候使用内部表,什么时候使用外部表

这道题发到群里,又展开了激烈的讨论:

hive 如何清空表中2个字段 hive删除表字段_hive 删除表

hive 如何清空表中2个字段 hive删除表字段_hive 如何清空表中2个字段_02

hive 如何清空表中2个字段 hive删除表字段_hive 删除表_03

这里我就来做一个总结:

1.hive内部表和外部表的区别

内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除

外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表结构。

这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

hive 如何清空表中2个字段 hive删除表字段_hive 如何清空表中2个字段_04

2.什么时候使用内部表,什么时候使用外部表

  • 每天采集的ng日志和埋点日志,在存储的时候建议使用外部表,因为日志数据是采集程序实时采集进来的,一旦被误删,恢复起来非常麻烦。而且外部表方便数据的共享。
  • 抽取过来的业务数据,其实用外部表或者内部表问题都不大,就算被误删,恢复起来也是很快的,如果需要对数据内容和元数据进行紧凑的管理, 那还是建议使用内部表
  • 在做统计分析时候用到的中间表,结果表可以使用内部表,因为这些数据不需要共享,使用内部表更为合适。并且很多时候结果分区表我们只需要保留最近3天的数据,用外部表的时候删除分区时无法删除数据。

上面总结的如果有不对的地方,欢迎小伙伴进群探讨。