Hive使用(二)
前言
本文为接上文Hive使用(一),本文主要写表的管理
创建内部表
从上文可知,表有两种,外部表和内部表,一般表的创建都是创建内部表
内部表的创建有三种方法
一.自己通过建表语法直接创建
hive (test)> create table if not exists student( |
我们在创建这张表时,
指定了数据的切分的格式为\t 切分
同时指定了存储文件类型为文本类型,
还指定了表存放在HDFS的位置/user/hive/warehouse/student,我们可以通过web端查看表存放的位置
表中还没有数据,所以是一个空的文件夹
这是第一种建表方法
二.根据查询结果创建表(查询的结果会添加到新创建的表中)
第二种方法需要有查询结果,所以我们在使用第二种方法时,需要保证被查的表中有数据
还是test.student这张表,我们先放一些数据进去
这时我们之前的test.student这张表中已经存在了一些数据了
这时我们可以这样创建student2这张表
create table if not exists student2 as select id, name from student; |
使用这张方法,Hive里会运行Hive底层封装的MapReduce代码
现在我们来查看一下这张新建的student2这张表
可以看到student2这张表已经建好了,同时之前的student表中的数据也一起添加进student2这张表中了.
我们可以看下这张表的详细信息
hive (test)> desc formatted student2; |
看到这里的
Table Type: MANAGED_TABLE |
从这里就能看出这是一张内部表
三.根据已经存在的表结构创建表
第三种方法与第二种相似
hive (test)> create table if not exists student3 like student; |
使用like关键字,创建的表会创建与原表相似的表结构,但是不会有原表的数据
我们可以查看一下
student3这张表中只有与student这张表相同的表结构并没有student中的数据.
创建外部表
因为表是外部表,所以Hive并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。
这里我们看一个例子
创建部门和员工外部表,并向表中导入数据
hive (test)> create external table if not exists dept( |
hive (test)> create external table if not exists emp( |
现在建好了两张外部表,进行导入数据
hive (test)> load data local inpath '/usr/local/src/datas/dept.txt' into table dept; |
hive (test)> load data local inpath '/usr/local/src/datas/emp.txt' into table emp; |
查询一下
我们查看一下表的具体信息
Table Type: EXTERNAL_TABLE |
代表它是外部表
另一张就不看了,也是外部表
管理表与外部表的互相转换
hive (test)> desc formatted student2; |
通过命令进行内外部表转换
hive (test)> alter table student2 set tblproperties('EXTERNAL'='TRUE'); |
转换完,我们看下
修改外部表为内部表
hive (test)> alter table student2 set tblproperties('EXTERNAL'='FALSE'); |
这就是转换回来了
注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!
如果是外部表在Hive里删除了,数据还在HDFS上,只是Hive上记录元数据信息会被删除掉.
HDFS上的数据还在,但是Hive上的表已经没了
本文到这里就结束了,请大家等待下次的更新,感谢大家的阅读.