insert overwrite table 后面为什么不能用select *,怎么解决这个bug
问题:两个同样的表结构的表,如果使用insert overwrite table select *会出现以下错误。
hive> insert overwrite table dwd.t_change partition (dt='2021-06-10')> select *> from ods.t_change;
FAILED: SemanticException [Error 10044]: Line 1:27 Cannot insert into target table because column number/types are different 't_change': Table insclause-0 has 4 columns, but query has 5 columns.
仔细一看,咦,创表语句都一样,怎么会多出一行。通过hue查看表结构得知(如下图),使用select执行查询的时候是使用严谨模式,insert的时候是采用宽松模式,这就导致了如果使用select * 会导致多了一个字段。
在hive官网暂时没有提供有用的解决方案,只能把不采用select * 的方式,采用把除了dt的字段外的所有表字段一个个敲上去,如果有几百个表,一个表有几百个字段,脚本就有几万行了,显的很臃肿了。
针对这种情况,本人用过shell脚本拼接的方式,动态生成字段。
以下就是代码,原创不易,如果能帮得到您,欢迎各位同行关注。
hive -e "$(
TABLE_SCHEMA_STR=`hive -e "desc ods.${TABLE_NAME[i]}" | awk -F '\t' '{print $1," "}' | cat | xargs echo |awk -F 'dt' '{print $1}'| awk '{gsub(/^\s+|\s+$/, "");print}' `
TABLE_SCHEMA_STR=($TABLE_SCHEMA_STR)echo "insert overwrite table dwd.${TABLE_NAME[i]} partition (dt='$YESTDAY_TIME')
SELECT"for(( j=0;j<${#TABLE_SCHEMA_STR[@]};j++))doif [ $j -lt $((${#TABLE_SCHEMA_STR[@]}-1)) ]thenecho ${TABLE_SCHEMA_STR[j]},| xargs echoelseecho ${TABLE_SCHEMA_STR[j]}| xargs echofidone
echo "from ods.${TABLE_NAME[i]} where dt='$YESTDAY_TIME';"
#echo "$TABLE_SCHEMA_STR"
insert overwrite table 后面为什么不能用select *,怎么解决这个bug相关推荐
- insert overwrite table不会覆盖原文件,而是新增一个文件
目录 一.背景 二.解决 一.背景 hive insert overwrite table结果发现不会覆盖原文件,而是新增一个文件 本来只有一个文件 insert overwrite table之后变 ...
- Hive insert overwrite
Hive之insert into 和insert overwrite hive通常有三种方式对包含分区字段的表进行数据插入 1)静态插入数据:要求插入数据时指定与建表时相同的分区字段,如: inser ...
- hive insert into语句 和 insert overwrite语句
2019独角兽企业重金招聘Python工程师标准>>> 1.insert into 语句 hive> insert into table userinfos2 select ...
- 一文搞定hive之insert into 和 insert overwrite与数据分区
版权声明:本文为博主原创文章,未经博主允许不得转载. 数据分区 数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间,主要包括两种分区形式:水平分区与垂直分区.水平分区是对表 ...
- hive分区表之insert overwrite 注意事项
hive version 3.1.3 以往我们插入分区 需要 insert ovewrite table p_table partition(period_id='202212') select i ...
- Hive 的insert into 和 insert overwrite
转载:https://blog.csdn.net/qq_31382921/article/details/70911108 区分insert into 和 insert overowrite: 1. ...
- Hive insert overwrite 问题
微信公众号:苏言论 理论联系实际,畅言技术与生活. 文章目录 1 测试的版本 2 insert overwrite使用说明 3 示例 4 建议的操作 5 参考链接 1 测试的版本 Apache hiv ...
- hive on spark执行insert overwrite非常慢
把一些sql执行从hive改到spark,发现执行更慢,sql主要是一些insert overwrite操作,从执行计划看到,用到InsertIntoHiveTable spark-sql> e ...
- spark-sql: insert overwrite分区表问题
1. 问题背景 用spark-sql,insert overwrite分区表时发现两个比较麻烦的问题: 从目标表select出来再insert overwrite目标表时报错:Error in que ...
最新文章
- BERT在小米NLP业务中的实战探索
- 查看git当前tag_同学,也该学着用Git了......
- java流的应用_Java中I/O流的应用
- [Windows] 一些简单的CMD命令
- 数据需求有多野?“三连问”帮你处理得明明白白
- php本地打开pdf文件_用PHP在web浏览器中打开PDF文件的方法
- Openstack日常运维
- UE4联机多人游戏基本设置
- ssm+jsp计算机毕业设计车辆违章查询系统2hie7(程序+LW+源码+远程部署)
- 消防安全-火灾报警控制器三维虚拟学习系统
- Java动态初始化数组,元素默认值规则
- 2018年9月计算机二级考试《MS Office高级应用》基础自测卷
- C语言实现的BP神经网络算法(1)-BPANN原理
- E: 仓库 没有Release 文件
- JS笔记 | JS中的strict model(严格模式)
- CSDN日报20170407 ——《嘿,程序猿,你该学点经济学了!》
- H.S.Teoh为D的垃集辩护.与Ola的反驳.
- 数字IC设计的一些英语术语总结
- 【MATLAB】分时段分类汇总代码
- 一种高精度紧耦合的双目VI-SLAM算法