1.创建内部表与外部表的区别是什么?
2.external关键字的作用是什么?
3.外部表与内部表的区别是什么?
4.删除表的时候,内部表与外部表有什么区别?
5.load data local inpath '/home/wyp/data/wyp.txt' into table wyp;的过程是什么样子的?
6.磁盘,hdfs,hive表他们之间的过程是什么样子的?

  相信很多用户都用过关系型数据库,我们可以在关系型数据库里面创建表(create table),这里要讨论的表和关系型数据库中的表在概念上很类似。我们可以用下面的语句在Hive里面创建一个表:

  1. hive> create table wyp(id int,
  2. > name string,
  3. > age int,
  4. > tele string)
  5. > ROW FORMAT DELIMITED
  6. > FIELDS TERMINATED BY '\t'
  7. > STORED AS TEXTFILE;
  8. OK
  9. Time taken: 0.759 seconds

复制代码

这样我们就在Hive里面创建了一张普通的表,现在我们给这个表导入数据:

  1. hive> load data local inpath '/home/wyp/data/wyp.txt' into table wyp;
  2. Copying data from file:/home/wyp/data/wyp.txt
  3. Copying file: file:/home/hdfs/wyp.txt
  4. Loading data to table default.wyp
  5. Table default.wyp stats: [num_partitions: 0, num_files: 1,
  6. num_rows: 0, total_size: 67, raw_data_size: 0]
  7. OK
  8. Time taken: 3.289 seconds
  9. hive> select * from wyp;
  10. OK
  11. 1       wyp     25      13188888888888
  12. 2       test    30      13888888888888
  13. 3       zs      34      899314121
  14. Time taken: 0.41 seconds, Fetched: 3 row(s)

复制代码

注意:/home/wyp/data/路径是Linux本地文件系统路径;而/home/hdfs/是HDFS文件系 统上面的路径!从上面的输出我们可以看到数据是先从本地的/home/wyp/data/文件夹下复制到HDFS上的/home/hdfs /wyp.txt(这个是Hive中的配置导致的)文件中!最后Hive将从HDFS上把数据移动到wyp表中!移到表中的数据到底存放在HDFS的什么 地方?其实在Hive的${HIVE_HOME}/conf/hive-site.xml配置文件的 hive.metastore.warehouse.dir属性指向的就是Hive表数据存放的路径(在我的店电脑里面配置是/user/hive /warehouse),而Hive每创建一个表都会在hive.metastore.warehouse.dir指向的目录下以表名创建一个文件夹,所 有属于这个表的数据都存放在这个文件夹里面。所以,刚刚导入到wyp表的数据都存放在/user/hive/warehouse/wyp/文件夹中,我们 可以去看看:

  1. hive> dfs -ls /user/hive/warehouse/wyp ;
  2. Found 1 items
  3. -rw-r--r-- 3 wyp supergroup   67 2014-01-14 22:23 /user/hive/warehouse/wyp/wyp.txt

复制代码

看到没,上面的命令就是显示HDFS上的/user/hive/warehouse/wyp中的所有内容。如果需要删除wyp表,可以用下面的命令:

  1. hive> drop table wyp;
  2. Moved: 'hdfs://mycluster/user/hive/warehouse/wyp' to
  3. trash at: hdfs://mycluster/user/hdfs/.Trash/Current
  4. OK
  5. Time taken: 2.503 seconds

复制代码

从上面的输出Moved: ‘hdfs://mycluster/user/hive/warehouse/wyp’ to trash at: hdfs://mycluster/user/hdfs/.Trash/Current我们可以得知,原来属于wyp表的数据被移到hdfs: //mycluster/user/hdfs/.Trash/Current文件夹中(如果你的Hadoop没有取用垃圾箱机制,那么drop table wyp命令将会把属于wyp表的所有数据全部删除!),其实就是删掉了属于wyp表的数据。记住这些,因为这些和外部表有很大的不同。同时,属于表wyp 的元数据也全部删除了!
我们再来创建一个外部表:

  1. hive> create external table exter_table(
  2. > id int,
  3. > name string,
  4. > age int,
  5. > tel string)
  6. > location '/home/wyp/external';
  7. OK
  8. Time taken: 0.098 seconds

复制代码

仔细观察一下创建表和外部表的区别,仔细的同学们一个会发现创建外部表多了external关键字说明以及location ‘/home/wyp/external’。是的,你说对了!如果你需要创建外部表,需要在创建表的时候加上external关键字,同时指定外部表存放 数据的路径(当然,你也可以不指定外部表的存放路径,这样Hive将在HDFS上的/user/hive/warehouse/文件夹下以外部表的表名创 建一个文件夹,并将属于这个表的数据存放在这里):

  1. hive> load data local inpath '/home/wyp/data/wyp.txt' into table exter_table;
  2. Copying data from file:/home/wyp/data/wyp.txt
  3. Copying file: file:/home/hdfs/wyp.txt
  4. Loading data to table default.exter_table
  5. Table default.exter_table stats: [num_partitions: 0, num_files:
  6. 1, num_rows: 0, total_size: 67, raw_data_size: 0]
  7. OK
  8. Time taken: 0.456 seconds

复制代码

和上面的导入数据到表一样,将本地的数据导入到外部表,数据也是从本地文件系统复制到HDFS中/home/hdfs/wyp.txt文件中,但是,最后 数据不是移动到外部表的/user/hive/warehouse/exter_table文件夹中(除非你创建表的时候没有指定数据的存放路径)!大家 可以去HDFS上看看!对于外部表,数据是被移动到创建表时指定的目录(本例是存放在/home/wyp/external文件夹中)!如果你要删除外部 表,看看下面的操作:

  1. hive> drop table exter_table;
  2. OK
  3. Time taken: 0.093 seconds

复制代码

和上面删除Hive的表对比可以发现,没有输出将数据从一个地方移到任一个地方!那是不是删除外部表的的时候数据直接被删除掉呢?答案不是这样的:

  1. hive> dfs  -ls /home/wyp/external;
  2. Found 1 items
  3. -rw-r--r--  3 wyp supergroup 67 2014-01-14 23:21 /home/wyp/external/wyp.txt

复制代码

你会发现删除外部表的时候,数据并没有被删除,这是和删除表的数据完全不一样的!

最后归纳一下Hive中表与外部表的区别:
1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使用外部表!

转载于:https://www.cnblogs.com/xubiao/p/5571132.html

hive内部表与外部表区别相关推荐

  1. Hive内部表与外部表区别详细介绍

    文章转载自:http://www.aboutyun.com/thread-7458-1-1.html 1.创建内部表与外部表的区别是什么? 2.external关键字的作用是什么? 3.外部表与内部表 ...

  2. hive中内部表和外部表有什么区别?一般什么时候使用内部表什么时候使用外部表?

    hive中内部表和外部表有什么区别? 在使用hive搭建数据仓库的时候,可以建立两种表格.一种是内部表(managed table),一种是外部表(external table). 内部表建表是不加修 ...

  3. hive内部表和外部表的区别_3000字揭秘Greenplum的外部数据加载——外部表

    外部表是greenplum的一种数据表,它与普通表不同的地方是:外部表是用来访问存储在greenplum数据库之外的数据.如普通表一样,可使用SQL对外部表进行查询和插入操作.外部表主要用于Green ...

  4. Hive 内部表与外部表

    首先查看当前的表: 内部表 查看emp表: 查看这个emp表的详细信息: 可以看到Table Type是一个MANAGED_TABLE,就是所谓的内部表 内部表跟外部表有什么区别 首先看一下mysql ...

  5. hive 创建表_2min快速了解,Hive内部表和外部表

    在了解内部表和外部表区别前, 我们需要先了解一下Hive架构 : 大家可以简单看一下这个架构图,我介绍其中要点: Hive的数据分为两种,一种为普通数据,一种为元数据. 元数据存储着表的基本信息,增删 ...

  6. hive内部表与外部表入门

    表分类 在Hive中,表类型主要分为两种, 第一种:内部表 也叫管理表 表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中. 默认创建的表就是内 ...

  7. hive中的内部表和外部表

    未被external修饰的是内部表(managed table),被external修饰的为外部表(external table). 区别 1.  内部表数据由Hive自身管理,外部表数据由HDFS管 ...

  8. 27.大数据---Hive的数据库和表的基本操作;脚本化运行;内部表;外部表;分区表

    一 . Hive 基本操作 1. 数据库操作(增.删.改.查) 1.1 创建数据库 create database if not exists test_001; 使用数据库 use test_001 ...

  9. Hive探秘--内部表、外部表、分区表、桶表研究

    Hive知识一.建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_com ...

最新文章

  1. domdocument php charset gbk,PHP DomDocument无法处理utf-8字符(☆)
  2. mysql中selectform_带有select标签的form表单,怎么提交到数据库啊 ?具体情况如下...
  3. 02Prism WPF 入门实战 - 建项
  4. [剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]
  5. 剑指offer 最小的k个数 leetcode 215. Kth Largest Element in an Array
  6. 单板计算机图片大全,最强单板计算机UP Board之Windows10完全版、Ubuntu、Andriod系统体验 | 爱板网...
  7. (转载)基于STM32的多节锂电池管理系统的设计
  8. 【机器学习实战】决策树算法:预测隐形眼镜类型
  9. ubuntu为jar创建快捷方式
  10. 87键盘怎么用小键盘功能
  11. 华硕服务器安装系统安装教程,华硕u盘安装系统教程
  12. 边境的悍匪—机器学习实战:第四章 训练模型
  13. 搜狗输入法 + qq
  14. 2019江西(南昌)安博会 数字冰雹“警视”即将惊艳亮相
  15. 正态分布,锐利分布,莱斯分布 matlab拟合源码
  16. 雷诺手表怎么换电池?雷诺手表更换电池的方法
  17. 与其让黑客有机可乘,不如用MCK保驾护航
  18. 中国合伙人及致青春电影名言
  19. 数据库驱动和JDBC
  20. 普氏分析法的输入和输出实例,matlab图像处理

热门文章

  1. 【转自元宝兄】关于delphi Com+调用C# DLL的一点说明
  2. 图像检索:几种基于纹理特征的图像检索算法
  3. 人工智能中对机器学非常简要的介绍
  4. 一个有趣的this指向问题
  5. DDoS高防(国际)子产品发布,替代原本在DDoS高防IP中的海外线路。
  6. [转]linux下的fms2流媒体服务器搭建六部曲之五-----flv播放器制作篇
  7. Hibernate5-唯一查询和聚合查询
  8. c语言结构体使用方法
  9. 由单例模式学到:静态构造函数和静态字段
  10. 036、Linux下ipmitool命令