zoukankan      html  css  js  c++  java
  • Hive内部表和外部表

    Hive表分为内部表和外部表

    Hive默认建立的表是内部表,内部表create之后,然后load加载hdfs上的数据,会移动物理数据到Hive的数据仓库默认目录(/user/hive/warehouse/xx.db/)下。

    内部表drop之后,元数据和物理数据都会删除。

    外部表在导入hdfs的数据后,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!

    外部表drop掉之后,元数据删掉了,但是实际物理数据还存在原位置。

     

    以下是示例:

    在本地建立vim一个course.txt文件

    上传到hdfs文件系统上inner目录下和ext目录下

    [root@master hiveTest]# hdfs dfs -put ./course.txt /inner
    [root@master hiveTest]# hdfs dfs -put ./course.txt /ext

    hive创建内部表

    hive> create table db_hive.courseInner(id int,course string) row format delimited fields terminated by ','; 

    加载hdfs的inner目录下的course.txt到内部表

    hive> load data inpath '/inner/course.txt' into table db_hive.courseInner;

    此时,inner目录下的文件已经被移到了hive数据仓库的目录/user/hive/warehouse/db_hive.db/下。

    [root@master hiveTest]# hdfs dfs -ls /user/hive/warehouse/db_hive.db

    然后执行drop table db_hive.courseInner,则该目录及目录下的数据被删除。


    Hive创建外部表,关键字external,location指定数据存放的文件夹。

    hive> create external table courseext(id int,course string) row format delimited fields terminated by ',' location '/external' 

    此时courseex外部t表就已经链接到这个物理数据,不需要执行load语句了。

    执行查询语句,可以查到外部表的数据。

    外部表执行drop table courseext,则该表的元数据被删除,但物理数据依然存在,可以通过命令验证。

    [root@master hiveTest]# hdfs dfs -ls /external

    使用场景:

    每天收集到的网站数据,需要做大量的统计数据分析,所以在数据源上可以使用外部表进行存储,方便数据的共享。

    在做统计分析时候用到的中间表,结果表可以使用内部表,因为这些数据不需要共享,使用内部表更为合适。

     

  • 相关阅读:
    解决:std::ostream operator<< should have been declared inside 'xxx'
    c++ friend 遇到 namespace 无法访问 private 成员的问题
    Compiler Error C2872: ambiguous symbol
    【持续更新】总结:C++开发时积累的一些零碎的东西
    陷阱:C++模块之间的”直接依赖“和”间接依赖“与Makefile的撰写
    ZThread::ThreadLocal:ERROR C4716 must return a value的解决
    java值传递
    iframe与父页面传值
    iframe父子兄弟之间调用传值(contentWindow && parent)
    MySQL返回影响行数的测试示例
  • 原文地址:https://www.cnblogs.com/lucas-zhao/p/11891946.html
Copyright © 2011-2022 走看看