微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ALTER 添加新列后,数据错误地加载到 Hive 分区表中

如何解决使用 ALTER 添加新列后,数据错误地加载到 Hive 分区表中

我已经有一个 Hive 分区表。我需要向表中添加一个新列,因此我使用 ALTER 添加如下所示的列。

ALTER TABLE TABLE1 ADD COLUMNS(COLUMN6 STRING);

我的最终表加载查询如下:

INSERT OVERWRITE table Final table  PARTITION(COLUMN4,COLUMN5)
select
stg.Column1,stg.Column2,stg.Column3,stg.Column4(Partition Column),Field Name:Code Sample value - YAHOO.COM
stg.Column5(Partition Column),Field Name:Date Sample Value - 2021-06-25
stg.Column6(New Column)       Field Name:reason     sample value - Adjustment
from (
         select fee.* from (
             select 
               fees.*,ROW_NUMBER() OVER (PARTITION BY fees.Column1 ORDER BY fees.Column3 DESC) as RNK
             from Stage table fee
         ) fee
         where RNK = 1
     ) stg
     left join (
         select Column1 from Final table
         where Column5(date) in (select distinct column5(date) from Stage table)
     ) TGT
     on tgt.Column1(id) = stg.Column1(id) where tgt.column1 is null 
UNION
select 
tgt.column1(id),tgt.column2,tgt.column3,tgt.column4(partiton column),tgt.column5(partiton column-date),tgt.column6(New column)
from 
Final Table TGT
      WHERE TGT.Column5(date) in (select distinct column5(date) from Stage table);"

现在,当我今天的工作运行时,当我尝试查询最终表时,出现以下错误

Invalid partition value 'Adjustment' for DATE partition key: Code=2021-06-25/date=Adjustment

我可以找出分区列周围发生的问题,但无法找出问题所在..有人可以帮忙吗?

解决方法

分区列应该是选择中的最后一个。当您添加新列时,它被添加为最后一个非分区列,分区列仍然是最后一个,它们不存储在数据文件中,只有元数据包含有关分区的信息。所有其他列的顺序也很重要,它应该匹配表 DDL,使用 DESCRIBE FORMATTED table_name 检查它。

INSERT OVERWRITE table Final table  PARTITION(COLUMN4,COLUMN5)
select
stg.Column1,stg.Column2,stg.Column3,stg.Column6 (New column) ------------New column
stg.Column4(Partition Column)  ---partition columns
stg.Column5(Partition Column)
...

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?