Hive 专题
您的位置:Hive > Hive 专题 > HIVE 内部表(MANAGED
HIVE 内部表(MANAGED
作者:--    发布时间:2019-11-22 03:58:25

与数据库中的 Table 在概念上是类似

·         每一个 Table Hive 中都有一个相应的目录存储数据。例如,一个表 test,它在 HDFS 中的路径为:/ warehouse/test warehouse是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录

·         所有的 Table 数据(不包括 External Table)都保存在这个目录中。

·         删除表时,元数据与数据都会被删除


创建内部表

create table t_managed_table (id int);

这种方式创建的表就是内部表。

由于HIVE是数据仓库工具,因此其并没有插入的命令,只有批量导入数据的命令。

准备数据文件id.txt

1
2
3
4
5

导入数据文件

hive> LOAD DATA LOCAL INPATH '/root/id.txt' INTO TABLE t_managed_table;
Loading data to table default.testmysql
 Table default.testmysql stats: [numFiles=1, totalSize=10]
 OK
 Time taken: 2.418 seconds
 hive> select * from testmysql;
 OK
 1
 2
 3
 4
 5
Time taken: 0.701 seconds, Fetched: 5 row(s)

在这里,id.txt中的内容会被导入到testmysql的id列。虽然我们并没有指定数据导入到哪一列,但是因为mysqltest中只有一个列id,所以id.txt中的数据只能导入到这一列中。

此时我们在控制台上,可以看到:

QQ截图20160416133349.png

读者可以这些文件下载下来查看其中的内容。

说明:

对于命令LOAD DATA LOCAL INPATH '/tmp/root/id.txt' INTO TABLE testmysql;

如果包含LOCAL,则意味着我们导入的数据是从本地,因此导入的数据文件要填写本地文件的路径

如果不包含LOCAL,则意味着我们要从HDFS中导入数据,填写的路径应该是HDFS中的路径。


多列的内部表

hive> CREATE TABLE multi_clumns_table(id int,name string) ROW FORMAT  DELIMITED FIELDS TERMINATED BY '\t';

这个语句的意思是,以制表符"\t"来区分数据文件中不同的列。

所以当我们导入数据的时候,我们的数据文件中也需要用制表符。

准备数据文件stu.txt

1       tianshouzhi
2       wangxiaoxiao
3       wanghanao
4       huhuamin
5       luyang

导入数据

hive> LOAD DATA LOCAL INPATH '/tmp/root/stu.txt' INTO TABLE multi_clumns_table;
 Loading data to table default.multi_clumns_table
 Table default.multi_clumns_table stats: [numFiles=1, totalSize=61]
 OK
 Time taken: 0.754 seconds

查询数据

 hive> select * from multi_clumns_table;
 OK
 1     tianshouzhi
 2     wangxiaoxiao
 3     wanghanao
 4     huhuamin
 5     luyang

注意,HIVE在查询的时候,除了select * from 表名不需要走map/reduce之外,其他的语句都要走map/reduce。因为select * 表示的是全表扫描,全表扫描实际上就是获取HDFS文件中所有内容。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册