【发布时间】:2022-01-18 02:58:39
【问题描述】:
我们有一个长期存在的 Hive 内部分区表。最近我们发现我们需要更改列的名称和数据类型。此外,我们需要从表中删除 3 条重复记录。所以我们执行了这一步。
alter table tablename CHANGE line_nbr line_id INT; (it was string before)
INSERT OVERWRITE TABLE table1 PARTITION(cmny_cd,order_dt)
select
column1,
columnx
from table1
where id NOT IN ('1','2','3')
and order_dt in (CAST('2020-02-18' AS DATE),CAST('2020-02-19' AS DATE),CAST('2020-10-30' AS DATE));"
尝试运行上述步骤来更改列名和类型,并删除重复项。在此期间,我们遇到了一个错误,说表中的坏分区很少。但是当检查时,欺骗并没有被删除,但是列名和类型被改变了。
现在,我们从表中删除了坏分区,然后尝试仅运行插入覆盖步骤以删除欺骗。它成功了,并删除了欺骗。但是如果我现在尝试查询表格,对于某些日期,它会给我一个错误
-- presto error: Error opening Hive split gs:xxxx/cmny_cd=xxx/order_dt=2021-09-20/000000_0 (offset=0, length=24370774): Malformed ORC file. Cannot read SQL type 'integer' from ORC stream '._col6' of type STRING with attributes {} [gs:xxxx/cmny_cd=xxx/order_dt=2021-09-20/000000_0]
当我检查显示创建表时,名称和数据类型已更改,但是当我尝试以下操作时
describe formatted tablename partition (cmny_cd='xxx',order_dt='2021-09-20');
很少分区,它显示更改的名称和类型,但很少,它显示旧名称和字符串数据类型。我猜这可能已经发生了,因为我们第一次尝试更改数据类型并删除重复数据时失败了。
我很困惑我应该怎么做才能修复表并查询表而没有任何问题。有人可以帮忙吗?将不胜感激。
我们已经在表上运行了 msck repair table tablename,但它没有解决问题
【问题讨论】:
标签: google-cloud-platform hive hiveql