赞
踩
与传统的关系型数据库不同,Hive创建的表分为内部表和外部表,对于内部表来说,在创建的时候会把数据移动到数据仓库所指向的位置;如果是外部表,则仅仅记录的是数据所存在的位置。
同时,在删除内部表的时候会把元数据和数据一起删除掉,而在删除外部表的时候只会删除元数据而不会删除原始数据。所以,如果是使用的共享数据,可以建立的是外部表;如果仅仅是Hive内部使用的数据,则可以使用内部表。接下来分别对内部表和外部表进行分析。
create database lhd;
show databases;
可以看到这里有两个数据库一个是我新创建的lhd数据库,另一个是hive默认的数据库default,也就是说我们之前所创建的表位于default数据库中。
和SQL语言一样:
use lhd;
内部表中的数据文件的全部操作都由Hive来完成,也就是说除了Hive外不会再有其他的应用使用该数据文件。现在回想我们前面几篇文章所创建的表,就可以知道全部都是内部表。内部表在创建后不仅默认会在“/user/hive/warehouse/+数据库名”,(如果使用的是默认的数据库则不带有数据库名)下生成目录,还会在目录下生成一份表的数据文件,并且在表删除后,该目录和数据文件也会删除,不信一会等着瞧。
dfs -ls /user/hive/warehouse/;
可以看到,第一条是我刚刚创建的数据库,位于/user/hive/warehouse目录下,而person是没有带.db后缀的,是我在前几篇文章中一直操作的数据表,它是在default默认的数据库下的。
下面然我们分别看下这两个东西:
dfs -ls /user/hive/warehouse/lhd.db;
空空如也。。另一个:
dfs -ls /user/hive/warehouse/person;
再细看一下:
dfs -ls /user/hive/warehouse/person/dt=20190920;
它来了,它来了:
dfs -cat /user/hive/warehouse/person/dt=20190920/person.txt;
好了,,该看的都看了,下面我们删了它:
drop table person;
然后再查看一下默认数据库:
dfs -ls /user/hive/warehouse/default.db;
它驾着祥云滚蛋了~
在实际应用过程中,数据文件往往并不是只有Hive操作,其他应用或计算也会操作该文件,这种情况下往往不允许改变数据的格式和所在的位置。面对这种情况,一般会选择创建外部表来实现Hive操作。外部表也会在“/user/hive/warehouse+数据库名”下生成表的目录,但是目录内不会生成数据文件,而且在最后要抛弃它的时候,并不会删除源文件。
create external table person(
id int,
name string,
age int,
fav array<string>,
addr map<string, string>
)
comment 'This is the person table'
row format delimited fields terminated by '\t'
collection items terminated by '-'
map keys terminated by ':'
stored as textfile;
在上述建表语句中,通过external关键字指明创建的表是外部表。
2. 在创建表的同时,指定数据文件的位置:
create external table person(
id int,
name string,
age int,
fav array<string>,
addr map<string, string>
)
comment 'This is the person table'
row format delimited fields terminated by '\t'
collection items terminated by '-'
map keys terminated by ':'
stored as textfile
location 'hdfs://master002:9000/input/';
先跟我操作:
在hdfs下创建input文件夹,并上传person.txt文件到input文件夹下:
进入hive,使用新建立的数据库,然后第二种方式建表:
报错:
FAILED: ParseException line 13:0 missing EOF at 'stored' near ''hdfs://master001:9000/input/''
之前我把location语句放在stored前面了,现在把它放在最后面,OK:
心态崩了!没找到,,因为我写到master002上去了,等明天再盘它吧,今天有事先到这里了。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。