一、内部表和外部表的区别:
内部表和外部表的区别可以从三方面讨论,创建表时、删除表时、选择表时:
1. 创建表:
建表时,未被 external 修饰的是内部表,被 external 修饰的是外部表。
内部表数据由 hive 自身管理,外部表数据由 HDFS 管理。
内部表数据存储的位置默认是 “user/hive/warehouse”,外部表数据存储的位置由自己制定。(如果没有 location,hive 将在 HDFS 上的 “user/hive/warehouse” 文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里)
2. 删除表:
删除内部表会直接删除元数据以及数据,所以管理表不适合和其他工具共享数据
删除外部表仅仅会删除元数据,HDFS 上的文件不会被删除,所以外部表相对更加安全,方便共享元数据。
3. 选择表:
内部表适合数据临时处理、转换等操作,及对数据进行清洗、统计分析、计算等需求; 外部表适用于数据的长期存储、备份和共享等需求。
内部表和外部表没有太大区别,如果所有数据都由 hive 处理则创建内部表;如果数据的处理由 hive 和其他工具一起处理,则创建外部表;
二、他们各自的应用场景,你们公司建表是内部还是外部:
内部表适合数据临时处理、转换等操作,及对数据进行清洗、统计分析、计算等需求; 外部表适用于数据的长期存储、备份和共享等需求。
对于建表,不同公司有不同的实践。
一般来说,在数据分析和处理的场景下,内部表应用更加广泛,因为它可以提供更好的数据管理和查询性能。
而外部表更多用于数据仓库和数据湖等需要长期存储和备份的场景。