当前位置: 首页 / 技术干货 / 正文
Hive的内部表和外部表

2023-02-09

   数据 null 时候

  Hive的表有两种类型,分别是:内部表 和 外部表。

  其实内部表、外部表的说法,是我们自己定义的。Hive中对表的分类是:

  MANAGED_TABLE: “管理表”,也就是我们俗称的内部表。

  EXTERNAL_TABLE: 外部表。

  查看表的类型

  一张表的类型,可以通过元数据来查看。在元数据中记录着非常多的信息,其中就包括每一张表的类型。

  查看mysql数据库的方式:

  元数据保存在了mysql的数据库,其中有一张表名为TBLS,其中记录的就是表的元数据信息。我们可以直接通过查询这张表中的记录,来查看到每一个表的类型。

1

  查看表的信息的方式:

2

  内部表与外部表的区别

  1创建表的时候的区别

  在建表的时候,默认创建都是内部表,也就是管理表。外部表在创建的时候需要使用关键字external,例如: create external table if not eixsts tb_name。而内部表在创建的时候不需要添加任何额外的关键字。

  2映射数据位置的区别

  Hive是对HDFS的结构化的数据文件进行的映射,每一个表在创建的时候,本质上都是在HDFS的指定目录创建一个与表名同名的文件夹。而表里的数据,其实就是这个文件夹下面的数据文件中的内容。

  内部表在创建的时候,不能修改表映射的路径,只能够在 /user/hive/warehouse/{数据库}.db/{表名} 这个位置。而外部表在创建的时候 ,可以通过关键字 location 修改表映射的路径,可以映射在任意的位置。例如:

  create external table if not exists t_order (

  id int,

  cost int,

  orderdate string

  )

  row format delimited

  fields terminated by ','

  location 'hdfs://qianfeng01:9820/public_data/order'

  当然,外部表在创建的时候,也可以不使用location去指定映射的位置。如果没有使用location指定映射位置的时候,默认使用的与内部表相同的数据库目录/表目录下。

  3删除表的时候的区别

  内部表在删除的时候,会删除元数据信息,同时会删除在HDFS上映射到的数据文件。

  外部表在删除的时候,只会删除元数据信息,不会删除在HDFS上映射到的数据文件。

  外部表的使用场景

  因为外部表的特点是可以映射到任意的位置,不仅仅局限于数据库的目录下。同时外部表在删除的时候,只会删除元数据信息,不会删除映射到的数据文件。因此在对于有些公共数据文件的处理的时候,就可以使用到外部表来处理。这样既可以使用Hive完成对数据的处理,同时也不用担心万一删除表的时候,会连带着数据文件一起删除掉。而且在数据仓库的最底层,使用到的都是外部表。

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号