2017-02-03 74 views
0

我有一個表Facility Facility標題,我想改變它,並添加幾列。我希望新添加的列刪除默認值爲空。我的表已經加載了14年的數據。由於默認情況下它是2002 - 2014年的分區表,這些新添加的列的值應該在表中爲空。ALTER TABLE添加列與默認空

create table facility_HEADER 
(
A string, 
B INT, 
C INT 
)partitioned by (year int comment 'Date Year Incurred') 
STORED AS PARQUET 

ALTER TABLE命令

ALTER TABLE facility_HEADER add columns (MSCLMID Bigint,NPI STRING,UNITS decimal(10,2)); 

當我把一個描述桌子上,我可以看到列在末尾附加得到。 當我把一個select *從任何分區它給出錯誤。

無法與例外 產生java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException:org.apache.hadoop.io.IntWritable不能 定投到org.apache.hadoop.io.LongWritable

我的表有14年的數據,我不希望它與null放入select子句和給別名做。

我試過從herehere引用的東西。

任何人都可以幫助我實際發生在我的桌子上的事情。我一路走來失去了14年的數據。

回答

0

首先進行完整文件備份。嘗試改變表格並刪除新添加的列。如果你還沒有寫入表格,它應該工作。檢查表格是否可以再次選擇。然後用新列創建新表並插入覆蓋。

0

在配置單元上使用alter命令時,它只是改變元數據而不是在鋪設數據下,所以select * from table將會失敗。

由於蜂房嘗試使用使用ROW_FORMAT和file_format它將不能作爲ROW_FORMAT描述找到列值來提取文件存儲「/apps/hive/warehouse/databasename.db/tablename/」數據。

注意:數據存儲爲實木複合地板蜂箱是不是實木複合地板獲得新列的定義

解決方法:創建新表並插入數據和重新命名錶作爲oldtablname

INSERT INTO TABLE selet列作爲MSCLMID作爲null,作爲NPI作爲NULL作爲NPI作爲UNITS作爲UNITS從oldtabel

+0

我已經在我的查詢中提到我不想將select和null作爲那些列作爲我的數據在TB中另一個插入命令將導致我更多時間。是否有其他解決方法? – codaholic

+0

這就是爲什麼我告訴只有在沒有其他選項的情況下才能工作,除非您更改拼花地板文件... –