【hive】- 使用insert into insert overwrite插入数据到静态分区、动态分区、动静态分区_hive insert into

本文详细介绍了Hive中的动态分区、insertinto和insertoverwrite操作,包括如何设置参数、数据插入的条件、分区顺序以及注意事项。作者强调了知识体系的重要性,鼓励读者进行深入研究和系统学习。
摘要由CSDN通过智能技术生成

举例:

未将test_2_tmp数据插入到test_1时,test_1表的数据情况:

select \* from test_1;

在这里插入图片描述

表test_2_tmp的情况:

desc test_2_tmp;

+------------+------------+----------+
|  col_name  | data_type  | comment  |
+------------+------------+----------+
| id         | string     |          |
| name       | string     |          |
| classes    | string     |          |
| scores     | int        |          |
| city_code  | string     |          |
| cur_day    | string     |          |
+------------+------------+----------+

select \* from test_2_tmp;

在这里插入图片描述

用insert overwrite table重写写入(city_code='200’与cur_day='20231111’分区)和(city_code='763’与cur_day='20231112’分区),如下:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table test_1 
partition(city_code,cur_day)
select 
t.id,
t.name,
t.classes,
t.scores,
t.city_code,
t.cur_day
from test_2_tmp t
;

select \* from test_1;

在这里插入图片描述

注意:

1、hive支持全动态分区,但是在使用前必须设置以下参数:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
2、字段和目标表动态分区的对应关系是由字段顺序决定,并不是由列名称决定的。

3、向动态分区插入数据时,动态分区必须在select列表中,否则会执行失败。

insert into table test_1 
partition(city_code,cur_day)
select 
t.id,
t.name,
t.classes,
t.scores
from test_1_tmp t
;

报错:

Error: Error while compiling statement: FAILED: SemanticException [Error 10044]: Line 1:18 Cannot insert into target table because column number/types are different 'cur\_day': Table insclause-0 has 6 columns, but query has 4 columns. (state=42000,code=10044)

动静混合分区插入数据

  • insert into / insert overwrite
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=strict;
insert into table test_1
partition(city_code='763',cur_day)
select
t.id,
t.name,
t.classes,
t.scores,
t.cur_day
from test_1_tmp t
;

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=strict;
insert overwrite table test_1
partition(city_code='763',cur_day)
select
t.id,
t.name,
t.classes,
t.scores,
t.cur_day
from test_1_tmp t
;

insert into table 插入动静混合分区,如果被插入表原来就有该分区,则追加插入数据;否则就正常插入数据。
insert overwrite table 插入动静混合分区,如果被插入表原来就有该分区,删除原来该分区下数据,重新插入;否则就正常插入数据。

举例:

未将test_2_tmp数据插入到test_1时,test_1表的数据情况:

select \* from test_1;

在这里插入图片描述

表test_2_tmp的情况:

select \* from test_2_tmp;

在这里插入图片描述

用insert into追加插入(city_code=‘763’,cur_day)分区的情况,如下:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=strict;
insert into table test_1
partition(city_code='763',cur_day)
select
t.id,
t.name,
t.classes,
t.scores,
t.cur_day
from test_2_tmp t
;

在这里插入图片描述

用insert overwrite重写(city_code=‘763’,cur_day)分区的情况,如下:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=strict;
insert overwrite table test_1
partition(city_code='763',cur_day)
select
t.id,
t.name,
t.classes,
t.scores,
t.cur_day
from test_2_tmp t
;

在这里插入图片描述

注意: 动静态分区混合插入,静态分区要在动态分区前面。

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=strict;
insert into table test_1
partition(cur_day,city_code='763')
select
t.id,
t.name,
t.classes,
t.scores,
t.cur_day
from test_1_tmp t
;

报错:

Error: Error while compiling statement: FAILED: ValidationFailureSemanticException summary_fz_province.test_1: Partition spec {city=763, cur_day=null} contains non-partition columns (state=42000,code=40000)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

52)]
[外链图片转存中…(img-NnMHaaot-1714721895452)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值