网站备案号示例,全国优秀作文选官网,网站建设与管理难学吗,毕业设计代做网站php文章转载自#xff1a;http://www.aboutyun.com/thread-7458-1-1.html
1.创建内部表与外部表的区别是什么#xff1f;
2.external关键字的作用是什么#xff1f;
3.外部表与内部表的区别是什么#xff1f;
4.删除表的时候#xff0c;内部表与外部表有什么区别#xff1f…文章转载自http://www.aboutyun.com/thread-7458-1-1.html
1.创建内部表与外部表的区别是什么
2.external关键字的作用是什么
3.外部表与内部表的区别是什么
4.删除表的时候内部表与外部表有什么区别
5.load data local inpath /home/wyp/data/wyp.txt into table wyp;的过程是什么样子的
6.磁盘hdfs,hive表他们之间的过程是什么样子的
好了进入正题。今天我们要探讨的话题是Hive的里面的表与外部表两个概念以及如何在Hive里面创建表和外部表它们之间有什么区别等话题。在本博客的 让你彻底明白hive数据存储各种模式文章里面我们谈到了Hive的数据存储模式里面简单的说到Hive中表以及外部表的简单概念相信很多读者对这些概念还不是很了解今天就给大家科普一下希望对大家有所帮助。 相信很多用户都用过关系型数据库我们可以在关系型数据库里面创建表create table这里要讨论的表和关系型数据库中的表在概念上很类似。我们可以用下面的语句在Hive里面创建一个表
hive create table wyp(id int, name string, age int, tele string) ROW FORMAT DELIMITED FIELDS TERMINATED BY \t STORED AS TEXTFILE;
OK
Time taken: 0.759 seconds
复制代码 这样我们就在Hive里面创建了一张普通的表现在我们给这个表导入数据
hive load data local inpath /home/wyp/data/wyp.txt into table wyp;
Copying data from file:/home/wyp/data/wyp.txt
Copying file: file:/home/hdfs/wyp.txt
Loading data to table default.wyp
Table default.wyp stats: [num_partitions: 0, num_files: 1, num_rows: 0, total_size: 67, raw_data_size: 0]
OK
Time taken: 3.289 seconds
hive select * from wyp;
OK
1 wyp 25 13188888888888
2 test 30 13888888888888
3 zs 34 899314121
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/文件夹中我们可以去看看
hive dfs -ls /user/hive/warehouse/wyp ;
Found 1 items
-rw-r--r-- 3 wyp supergroup 67 2014-01-14 22:23 /user/hive/warehouse/wyp/wyp.txt
复制代码
看到没上面的命令就是显示HDFS上的/user/hive/warehouse/wyp中的所有内容。如果需要删除wyp表可以用下面的命令
hive drop table wyp;
Moved: hdfs://mycluster/user/hive/warehouse/wyp to trash at: hdfs://mycluster/user/hdfs/.Trash/Current
OK
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的元数据也全部删除了 我们再来创建一个外部表
hive create external table exter_table( id int, name string, age int, tel string) location /home/wyp/external;
OK
Time taken: 0.098 seconds
复制代码
仔细观察一下创建表和外部表的区别仔细的同学们一个会发现创建外部表多了external关键字说明以及location ‘/home/wyp/external’。是的你说对了如果你需要创建外部表需要在创建表的时候加上external关键字同时指定外部表存放数据的路径当然你也可以不指定外部表的存放路径这样Hive将在HDFS上的/user/hive/warehouse/文件夹下以外部表的表名创建一个文件夹并将属于这个表的数据存放在这里
hive load data local inpath /home/wyp/data/wyp.txt into table exter_table;
Copying data from file:/home/wyp/data/wyp.txt
Copying file: file:/home/hdfs/wyp.txt
Loading data to table default.exter_table
Table default.exter_table stats: [num_partitions: 0, num_files: 1, num_rows: 0, total_size: 67, raw_data_size: 0]
OK
Time taken: 0.456 seconds
复制代码
和上面的导入数据到表一样将本地的数据导入到外部表数据也是从本地文件系统复制到HDFS中/home/hdfs/wyp.txt文件中但是最后数据不是移动到外部表的/user/hive/warehouse/exter_table文件夹中除非你创建表的时候没有指定数据的存放路径大家可以去HDFS上看看对于外部表数据是被移动到创建表时指定的目录本例是存放在/home/wyp/external文件夹中如果你要删除外部表看看下面的操作
hive drop table exter_table;
OK
Time taken: 0.093 seconds
复制代码 和上面删除Hive的表对比可以发现没有输出将数据从一个地方移到任一个地方那是不是删除外部表的的时候数据直接被删除掉呢答案不是这样的
hive dfs -ls /home/wyp/external;
Found 1 items
-rw-r--r-- 3 wyp supergroup 67 2014-01-14 23:21 /home/wyp/external/wyp.txt
复制代码
你会发现删除外部表的时候数据并没有被删除这是和删除表的数据完全不一样的最后归纳一下Hive中表与外部表的区别 1、在导入数据到外部表数据并没有移动到自己的数据仓库目录下也就是说外部表中的数据并不是由它自己来管理的而表则不一样 2、在删除表的时候Hive将会把属于表的元数据和数据全部删掉而删除外部表的时候Hive仅仅删除外部表的元数据数据是不会删除的 那么应该如何选择使用哪种表呢在大多数情况没有太多的区别因此选择只是个人喜好的问题。但是作为一个经验如果所有处理都需要由Hive完成那么你应该创建表否则使用外部表