向hive中load数据

hive中如果有分区的话,如果是需要自己构造数据且不知道是否有分区,可以使用这条语句看是否有分区:
show create table tabletest; tabletest为需要看是否有分区的表,执行这条语句之后会有这样一条出来:
PARTITIONED BY ( ****** string) ,****** 即为分区的字段,string为该字段的数据类型,如果没有打印这个语句的话证明这个表没有分区。
简单的建一张无分区的hive表:
create table mytest (student string,height int,grade int);
向这张表中load一条数据如下:

INSERT INTO TABLE mytest select 'zhangsan',176,78;

或者

INSERT INTO TABLE mytest values ('zhangsan1',176,78);

或者从别的表里面查出数据load进去:

 INSERT INTO TABLE mytest select test1,test2,test3 from testtable ;

load之后如图:
在这里插入图片描述
建一张有分区的表:

create table mytest (student string,height int,grade int) partitioned by (ymd string);
注意:如果使用以上的语句来load这张表的话就会报错,如下:
在这里插入图片描述
向这张表load数据如下:

 INSERT INTO TABLE mytest partition (ymd='2018-12-11') values ('zhangsan1',176,78);

或者

 INSERT INTO TABLE mytest partition (ymd='2018-12-11') select 'zhangsan2',176,78;

load数据如下图:
在这里插入图片描述
以下语句也是向表中load数据的:

 INSERT overwrite TABLE mytest partition (ymd='2018-12-11') select 'dddddd',176,78;

这条语句会把mytest表中所有的ymd='2018-12-11’的数据替换成本条语句load的数据结果,执行这条语句的结果如下:
在这里插入图片描述

insert into语句是向表中追加数据,insert overwrite是向表中替换数据。
还有这样的写法:

 INSERT into TABLE mytest partition (ymd) select 'testname',176,78;

不过这里执行的话会报错
在这里插入图片描述
参见提示,我们需要设置一下(直接在hive运行):set hive.exec.dynamic.partition.mode=nonstrict
简单记录一下,有几篇比较好的文章推荐给大家:
hive中简单介绍分区表(partition table),含动态分区(dynamic partition)与静态分区
INSERT … VALUES, UPDATE, and DELETE SQL Statements
Hive静态分区表&动态分区表
导入数据到hive表中的6种方式
hive从查询中获取数据插入到表或动态分区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值