Hadoop 之 Hive创建内外部表

Hive创建内外部表

Hive 数据库类似传统数据库,也是有数据库与表的概念,hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统。Hive作用比如是为海量数据做数据仓库分析与挖掘之用等以及原理,可查看相关资料,这里通过操作层面的示例,认识下hive下如何创建与查询表,如何导入数据

Hive表分内部表与外部表,其区别体现在存储上,内部表的创建过程和数据加载过程可以分别独立完成,也可以在同一语句中完成,加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据访问将会直接在数据仓库中完成。删除表时,表中的数据和元数据将会同时删除,而外外部表只有一个过程,加载数据和创建表同时完成,实际数据存储在 location指定的HDFS的相应目录,并不会移到数据仓库中,当删除外部表时,只是删除了该链接。

概括来讲,直观表现:

1.语句上看,创建外部表需要添加 external 字段

2.删除内部表时,表数据及HDFS中的数据文件都会被删除,删除外部表时,HDFS中的数据文件不会一起被删除,实际数据是存储在location指定的hdfs中目录。

一、创建内部表

首先是进入hive环境 >hive

hive> create table person (id int,name string,sex string,tel string)
    > row format delimited fields terminated by ','
    > stored as textfile;
OK
Time taken: 0.187 seconds

查看创建是否成功 

hive> show tables;
OK
person
Time taken: 0.11 seconds, Fetched: 1 row(s)
hive>

准备好待导入表的数据,如

加载数据,我们可以提前准备好文件,如/usr/mydata/persion.txt 内容为

1 zhangshan man 13000000001
2 lishi woman 15000000001
3 wangwu man 17000000001
4 sytemadm man 10000000001

将上面文本文件中的内容导入刚才建的person表中

hive> load data local inpath '/usr/mydata/person.txt' into table person;
Loading data to table default.person
OK
Time taken: 9.869 seconds

查看数据

hive> select * from person;
OK
1    zhangshan    man    13000000001
2    lishi    woman    15000000001
3    wangwu    man    17000000001
4    sytemadm    man    10000000001
Time taken: 2.266 seconds, Fetched: 4 row(s)
hive>

查看表存储目录,hive.metastore.warehouse.dir是在HIVE_HOME/conf/hive-site.xml中配置的,路径默认为/user/hive/warehouse,查看此目录可看到一个目录名为person

[hadoop@kencentos01 bin]$ hdfs dfs -ls /user/hive/warehouse
Found 1 items
drwxrwxrwx   - hadoop supergroup          0 2017-12-26 14:53 /user/hive/warehouse/person

person下有个文件就是我们在导入数据时,从本地文件导入HDFS中的person.txt文件

[hadoop@kencentos01 bin]$ hdfs dfs -ls /user/hive/warehouse/person
Found 1 items
-rwxrwxrwx   3 hadoop supergroup        106 2017-12-26 14:53 /user/hive/warehouse/person/person.txt

二、创建外部表

创建外部表,注意关键字”external”,location是指定表的文件位置,若不指定,则为默认与上面内部表一样配置的路径

hive> create external table person_external (id int,name string,sex string,tel string)
    > row format delimited fields terminated by ','
    > stored as textfile
> location '/user/hive/warehouse/external';
OK
Time taken: 1.31 seconds

查看建表结果

hive> show tables;
OK
person
person_external
Time taken: 0.124 seconds, Fetched: 2 row(s)
hive>

同样为了导入数据,需提前准备相应文件如,person_external.txt ,具体内容按字段类型列出就行,可直接拿上面内部表数据

hive> load data local inpath '/usr/mydata/person_external.txt' into table person_external;
Loading data to table default.person_external
OK
Time taken: 0.673 seconds

查看数据,与查看内部表一样:

查看表中的数据
hive> select * from person_external
    > ;
OK
11    zhangshan    man    13000000002
12    lishai    woman    15000000002
13    wangwu    man    17000000002
14    systemadm    man    10000000002
Time taken: 1.004 seconds, Fetched: 4 row(s)

查看文件所在位置,对应的HDFS目录

[hadoop@kencentos01 bin]$ hdfs dfs -ls /user/hive/warehouse/external
Found 1 items
-rwxrwxrwx   3 hadoop supergroup        112 2017-12-26 15:22 /user/hive/warehouse/external/person_external.txt

 

posted @ 2017-12-27 10:57  kcen  阅读(4988)  评论(0编辑  收藏  举报