前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hive 表数据加载、表删除试验

hive 表数据加载、表删除试验

作者头像
用户1148526
发布2022-05-07 12:49:19
1.2K0
发布2022-05-07 12:49:19
举报
文章被收录于专栏:Hadoop数据仓库

1. 非分区表 (1)load 加载数据 本地文本文件a.txt中有一行'aaa',执行下面的命令。

代码语言:javascript
复制
CREATE TABLE t1 (name STRING);
LOAD DATA LOCAL INPATH '/home/grid/a.txt' INTO TABLE t1;
SELECT * FROM t1;
dfs -ls /user/hive/warehouse/test.db/t1;

执行命令及结果如图1所示。

图1 可以看到,向表中加载了数据'aaa',生成了数据文件/user/hive/warehouse/test.db/t1/a.txt 在a.txt中添加一行'bbb',然后在执行下面的命令。

代码语言:javascript
复制
LOAD DATA LOCAL INPATH '/home/grid/a.txt' INTO TABLE t1;
SELECT * FROM t1;
dfs -ls /user/hive/warehouse/test.db/t1;

执行命令及结果如图2所示。

图2 可以看到,现在表中有三条数据,新生成了数据文件/user/hive/warehouse/test.db/t1/a_copy_1.txt。 (2)load overwrite 加载数据 执行下面的命令。

代码语言:javascript
复制
CREATE TABLE t2 (name STRING);
LOAD DATA LOCAL INPATH '/home/grid/a.txt' OVERWRITE INTO TABLE t2;
SELECT * FROM t2;
dfs -ls /user/hive/warehouse/test.db/t2;

执行命令及结果如图3所示。

图3 可以看到,现在表中有两条数据,生成了数据文件/user/hive/warehouse/test.db/t2/a.txt 编辑a.txt,使其只有一行'ccc',然后在执行下面的命令。

代码语言:javascript
复制
LOAD DATA LOCAL INPATH '/home/grid/a.txt' OVERWRITE INTO TABLE t2;
SELECT * FROM t2;
dfs -ls /user/hive/warehouse/test.db/t2;

执行命令及结果如图4所示。

图4 可以看到,现在表中只有一条数据'ccc',数据文件名没变,但其内容重新生成。 (3)删除表

代码语言:javascript
复制
drop table t1;
drop table t2;
show tables;
dfs -ls /user/hive/warehouse/test.db;

执行命令及结果如图5所示。

图5 可以看到,表数据目录已经被删除。 对于外部表,除了删除表只删除元数据而保留表数据目录外,数据加载行为与内部表相同。 2. 分区表 (1)load 加载数据 本地文本文件a.txt中有一行'aaa',执行下面的命令。

代码语言:javascript
复制
CREATE TABLE t1 (name STRING) PARTITIONED BY (country STRING, state STRING);
LOAD DATA LOCAL INPATH '/home/grid/a.txt' INTO TABLE t1 PARTITION (country = 'US', state = 'CA');
SELECT * FROM t1;
dfs -ls /user/hive/warehouse/test.db/t1/country=US/state=CA;

执行命令及结果如图6所示。

图6 可以看到,向表中加载了数据'aaa',生成了数据文件/user/hive/warehouse/test.db/t1/country=US/state=CA/a.txt (2)load overwrite 加载数据(与非分区表类似,实验略) (3)alter table add partition 加载数据 执行下面的命令。

代码语言:javascript
复制
SELECT * FROM t1;
ALTER TABLE t1 ADD PARTITION(country = 'US', state = 'CB') LOCATION '/a';
dfs -cp /user/hive/warehouse/test.db/t1/country=US/state=CA/a.txt /a;
dfs -ls /a;
SELECT * FROM t1;
dfs -rm /user/hive/warehouse/test.db/t1/country=US/state=CA/a.txt;
SELECT * FROM t1;

执行命令及结果如图7所示。

图7 说明:表中原有一条数据'aaa'。添加一个新分区,并指定位置为'/a'。把已经存在的数据文件a.txt复制到目录'/a'里。此时查询表已经有属于不同分区的两条数据。删除country = 'US', state = 'CA'分区的数据文件。此时查询表只有属于country = 'US', state = 'CB'分区的一条数据。 (4)删除数据表

代码语言:javascript
复制
dfs -ls /user/hive/warehouse/test.db;
dfs -ls /;
drop table t1;
show tables;
dfs -ls /user/hive/warehouse/test.db;
dfs -ls /;

执行命令及结果如图8所示。

图8 可以看到,表数据目录已经被删除。 对于外部表,除了删除表只删除元数据而保留表数据目录外,数据加载行为与内部表相同。 总结: 1. load与load overwrite的区别是: load 每次执行生成新的数据文件,文件中是本次加载的数据。 load overwrite如表(或分区)的数据文件不存在则生成,存在则重新生成数据文件内容。 2. 内部表与外部表的区别是(无论是否分区): 删除表时,内部表会删除表的元数据和表数据目录,外部表只会删除元数据而保留数据目录。 3. 分区表比非分区表多了一种alter table ... add partition的数据加载方式。 4. 对于分区表(无论内部还是外部),load与load overwrite会自动建立名为分区键值的目录,而alter table ... add partition,只要用location指定数据文件所在的目录即可。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档