hive——创建表不支持新增字段问题
  TEZNKK3IfmPf 2023年11月14日 22 0

创建hive表后,可能会遇到需要增加字段的情况,我们可能会想当然的像mysql或其他数据库那样,直接添加一个字段。

但对于hive,直接添加的字段可能并不能使用,比如可能会在添加字段后,在插入数据时,会出现类似如下的错误:

 

Error: java.io.IOException: java.lang.ArrayIndexOutOfBoundsException: 9
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderCreationException(HiveIOExceptionHandlerChain.java:97)
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderCreationException(HiveIOExceptionHandlerUtil.java:57)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getRecordReader(HiveInputFormat.java:247)
        at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.<init>(MapTask.java:169)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:429)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
        at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:415)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
        at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 9
        at org.apache.hadoop.hive.ql.io.orc.RecordReaderImpl$StructTreeReader.<init>(RecordReaderImpl.java:1864)
        at org.apache.hadoop.hive.ql.io.orc.RecordReaderImpl.createTreeReader(RecordReaderImpl.java:2263)
        at org.apache.hadoop.hive.ql.io.orc.RecordReaderImpl.access$000(RecordReaderImpl.java:77)
        at org.apache.hadoop.hive.ql.io.orc.RecordReaderImpl$StructTreeReader.<init>(RecordReaderImpl.java:1865)
        at org.apache.hadoop.hive.ql.io.orc.RecordReaderImpl.createTreeReader(RecordReaderImpl.java:2263)
        at org.apache.hadoop.hive.ql.io.orc.RecordReaderImpl.<init>(RecordReaderImpl.java:283)
        at org.apache.hadoop.hive.ql.io.orc.ReaderImpl.rowsOptions(ReaderImpl.java:492)
        at org.apache.hadoop.hive.ql.io.orc.OrcRawRecordMerger$ReaderPair.<init>(OrcRawRecordMerger.java:181)
        at org.apache.hadoop.hive.ql.io.orc.OrcRawRecordMerger.<init>(OrcRawRecordMerger.java:460)
        at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.getReader(OrcInputFormat.java:1109)
        at org.apache.hadoop.hive.ql.io.orc.OrcInputFormat.getRecordReader(OrcInputFormat.java:1007)
        at org.apache.hadoop.hive.ql.io.HiveInputFormat.getRecordReader(HiveInputFormat.java:245)
        ... 8 more
当出现这种问题时,你可能会根本找不到问题所在,使用create table table1 like table这种方式把这张表的表结构创建另一张表,得到的新表却没有这种问题出现。

 

这种问题出现原因为hive中的表结构是不怎么支持字段添加的。

 

当然,出现这种情况时,你可能会使用replace语句来将表结构还原,不过,或许此时也不支持做还原操作了。若出现如下错误提示,就表明不能还原:

 

Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Replace columns is not supported for table default.fac_scan. SerDe may be incompatible

这个时候的操作只能是删除原表,再根据新结构重建新表。

这个为本人当前hive操作中遇到的坑,若有哪位大神有更好解决方案,希望能给予帮助,不胜感激。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   24   0   0 hdfsjava
  TEZNKK3IfmPf   2023年11月14日   21   0   0 Hive
  TEZNKK3IfmPf   2023年11月14日   26   0   0 hdfscdh
  TEZNKK3IfmPf   2023年11月14日   20   0   0 mysqlHive
  TEZNKK3IfmPf   2023年11月14日   31   0   0 Hive视图
  TEZNKK3IfmPf   2023年11月14日   20   0   0 hadoopHive
  TEZNKK3IfmPf   2023年11月14日   36   0   0 hdfs
  TEZNKK3IfmPf   2024年04月26日   62   0   0 hadoopHive
TEZNKK3IfmPf