簡體   English   中英

Hive 表分區元數據問題

[英]Hive Table Partition Metadata Issue

我們有一個長期存在的 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,但它沒有解決問題

使用 Hive 覆蓋所有分區,就像刪除重復項時一樣。 由於 ORC 文件和 Hive 元數據中的類型不同,某些分區仍未被覆蓋並導致 Presto 出錯。 因此,只需嘗試覆蓋您之前未覆蓋的分區或覆蓋所有分區:

INSERT OVERWRITE TABLE table1 PARTITION(cmny_cd,order_dt)
select 
        column1,
        columnx
        ...
  from table1
  ---you can limit partitions in the WHERE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM