设为首页 加入收藏

TOP

overwrite在hive内部表及外部表特性(二)
2014-11-24 03:23:48 来源: 作者: 【 】 浏览:8
Tags:overwrite hive 内部 外部 特性
ctid` int(11) NOT NULL DEFAULT '0',
`dnewuser` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

测试数据:
1,1212,10
2,1313,9
3,1414,13
4,1515,50
5,1616,70
6,1717,80
7,18818,100

导入hdfs:
hadoop fs -put /tmp/tb_mysql /user/hadoop/output/

导入hive表:

load data inpath '/user/hadoop/output/tb_mysql' into table tb_in_mysql;

使用insert into table 往外部表tb_mysql写入数据:

insert into table tb_mysql select developerid,productid,dnewuser from tb_in_mysql where developerid=1;

执行过程:



执行结果:
mysql> select * from tb_mysql;
+-------------+-----------+----------+
| developerid | productid | dnewuser |
+-------------+-----------+----------+
| 1 | 1212 | 10 |
+-------------+-----------+----------+
1 row in set

再次执行以下步骤:
insert into table tb_mysql select developerid,productid,dnewuser from tb_in_mysql where developerid=2;

执行结果:
mysql> select * from tb_mysql;
+-------------+-----------+----------+
| developerid | productid | dnewuser |
+-------------+-----------+----------+
| 1 | 1212 | 10 |
| 2 | 1313 | 9 |
+-------------+-----------+----------+
2 rows in set

使用overwrite 进行测试:

insert into table tb_mysql select developerid,productid,dnewuser from tb_in_mysql where developerid=5;

执行过程:



执行结果:
mysql> select * from tb_mysql;
+-------------+-----------+----------+
| developerid | productid | dnewuser |
+-------------+-----------+----------+
| 1 | 1212 | 10 |
| 2 | 1313 | 9 |
| 3 | 1414 | 13 |
| 5 | 1616 | 70 |
+-------------+-----------+----------+

结果分析:
在外部表中使用into table 与overwrite table 效果一致

额外测试:overwrite table是否会更新数据






测试结果:overwrite table 不更新mysql内容。

使用into table 进行测试是否会更新mysql数据

语句:
insert into table tb_mysql select developerid,1111111 as productid,dnewuser from tb_in_mysql where developerid=5;
Total MapReduce jobs = 1

执行过程:



执行结果:



测试结果:into table 不更新mysql结果表内容。

分析结果:
内部表:
1. insert intotable 指定相同分区可以进行不断的写入新数据,指定不同分区也可写入新数据。
2. insertoverwrite table 指定相同分区会先将之将的数据旧删除,再进行写入新数据;指定不同的分区则直接写入新数据。
3. 使用load data 数据只会增加当前表的数据;使用load dataoverwrite将删除当前指定的数据存储目录的所有数据(即只会删除指定分区数据不会删除其他分区的数据),再导入新的数据。
mysql 外部表:
使用insert into table 与insert overwritetable 不会修改旧数据,只会将新数据直接写入 数据库

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇查看Postgresql的连接状况 下一篇PostgreSQL查看数据库,索引,表..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 C 语言或者限制使 (2025-12-25 08:50:05)
·C++构造shared_ptr为 (2025-12-25 08:50:01)
·既然引用计数在做 GC (2025-12-25 08:49:59)
·Java 编程和 c 语言 (2025-12-25 08:19:48)
·. net内存管理宝典这 (2025-12-25 08:19:46)