hive表操作(一)——内部表和外部表的创建于数据导入
本文主要介绍通过hive建立内部表和外部表,并且向表中导入数据。
本文阅读前提:
1、正常运行hadoop集群。
2、正常运行hive。
首先说一下内部表和外部表的区别。内部表的生命周期以及数据都由hive进行管理,换句话说就是内部表的表结构和表中的数据都是由hive进行管理的。如果删除了内部表,那么内部表中的数据也会别删除。外部表只有表结构是hive进行管理的,数据不是。外部表的数据归hdfs所有。如果删除hive中的外部表,那么表结构会删除,但是不会删除表中的数据。一般的,在使用的时候外部表使用的比较多。直接在一个数据上建表,然后进行数据处理即可。
好,下面上货。
1、在数据库中创建内部表。
use xytest; create table if not exists person( name string, age int, addr string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
在hive中执行当前脚本:
2、在数据库中创建外部表。
use xytest; create external table if not exists Student( name string, age int, addr string ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/data/externalhive/';
执行脚本,创建表
3、向表中加载数据。
向表中加载数据有两种方式,一种是采用hive提供的加载数据的命令;另一种是使用hadoop的文件操作指定把文件复制到指定的文件夹下。个人比较推荐使用hive的指令,当然,如果出现问题也可以使用第二种。
3.1内部表使用hive命令进行数据的导入。
3.1.1本地导入。
3.1.2hdfs中数据导入。
找到hdfs中的数据:
使用hive命令添加数据:
注意:这次指定没有添加overwrite。这个overwrite的作用就是把表中的数据重写,如果添加了,那么就用最后的文件替换表中的内容。如果不添加,就是在表数据后追加。
3.1.3清空表。
因为可以用一个新的文件进行替换,那么删除表中的数据就是可能的(其实是假删除)。我们先在本地新建一个空的文件,然后利用hive的加载数据命令,把这个空文件当做数据重写到表中,这样表中的数据就删除了。
3.1.4删除表。这里需要注意的是删除表的时候,数据也会被删除。我们看一下:
3.2外部表使用hive进行数据的导入。
3.2.1本地导入。
3.2.2hdfs中的数据导入。
首选找到hdfs中的数据。
使用hive命令把数据加载到student表中。
这里就不再赘述overwrite和如何清空表的问题了。
3.2.3删除表student。注意,删除表后数据时不会别删除的。
3.3内部表使用hdfs文件方式加载数据到hive表中。
3.3.1创建内部表person。
3.3.2创建完成后,在表的文件夹下增加文件,实现表数据的添加。
3.4外部表使用hdfs方式实现hive数据的添加。
3.4.1创建外部表student。
3.4.2创建完成后,在表的文件夹下增加文件,实现表数据的添加。