Chinaunix首页 | 论坛 | 博客
  • 博客访问: 341947
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 727
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-27 15:56
个人简介

开心了, 就笑;不开心了,就过会儿再笑。。。。

文章分类

全部博文(87)

文章存档

2017年(16)

2016年(28)

2015年(33)

2014年(10)

我的朋友

分类: 大数据

2017-04-18 14:35:46

在 Hive 0.8开始支持Insert into语句,它的作用是在一个表格里面追加数据。

INSERT INTO TABLE tablename1 [PARTITION \
(partcol1=val1, partcol2=val2 ...)] \
select_statement1 FROM from_statement;

INSERT OVERWRITE TABLE tablename1 [PARTITION \
(partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] \
select_statement1 FROM from_statement;


hive> insert into table cite
  > select * from tt;
这样就会将tt表格里面的数据追加到cite表格里面。并且在cite数据存放目录生成了一个新的数据文件。
 
(1)、如果两个表格的维度不一样,将会插入错误:

hive> insert into table t333 select * from t111;;

FAILED: SemanticException [Error 10044]: Line 1:18 Cannot insert into target table because column number/types are different 't333': Table insclause-0 has 3 columns, but query has 2 columns.

从上面错误提示看出,查询的表格t111只有2列,而目标表格(也就是需要插入数据的表格)有3列,上面的语句当然不能成功。
 
(2)、在用extended关键字创建的表格上插入数据将会影响到其它的表格。 
(3)、如果查询出来的数据类型和插入表格对应的列数据类型不一致,将会进行转换,但是不能保证转换一定成功,比如如果查询出来的数据类型为int,插入表格对应的列类型为string,可以通过转换将int类型转换为string类型;但是如果查询出来的数据类型为string,插入表格对应的列类型为int,转换过程可能出现错误,因为字母就不可以转换为int,转换失败的数据将会为NULL。 
(4)、可以将一个表查询出来的数据插入到原表中:


hive> insert into table cite     
  > select * from cite;
结果就是相当于复制了一份cite表格中的数据。 

(5)、和insert overwrite的区别:

hive> insert overwrite table cite                       
  > select * from tt;
上面的语句将会用tt表格查询到的数据覆盖cite表格已经存在的数据。


阅读(11941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~