![](/img/trans.png)
[英]Null Pointer Error while doing “alter table table_name drop partition(part_column < value)” on Hive CLI
[英]How to alter Hive partition column name
我必須更改分區列名稱(而不是分區規范),我在配置單元Wiki和某些Google頁面中查找了命令。 我可以找到用於更改分區規范的選項,
即例如
在/ table / country ='US'中,我可以將US更改為USA,但我想將國家更改為Continental 。
我覺得唯一可用於更改分區列名稱的選項是刪除並重新創建表。 還有其他可用的選項,請幫助我。
提前致謝。
您可以通過以下方式更改元數據中的列名稱: https : //cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ChangeColumnName/Type/Position/Comment
但是正如文檔所說,它僅更改元數據。 配置單元分區被實現為具有命名模式columnName = spec的目錄。 因此,您還需要使用“ hadoop fs”命令來更改HDFS上這些目錄的名稱。
您已經使用簡單的交換方法更改了分區列。
將舊表中的所有文件移動到新創建的表位置。
hadoop fs -mv <current_table_name> <temp_table_name>
使用適當的分區值將臨時表數據重新復制/加載到原始表中。
hadoop fs -mv <temp_table_name> <current_table_name>
msck修復原始表並刪除temp_table。
注意: mv命令可將文件從一個位置移動到另一位置,從而減少了復制時間。 或者,我們可以使用LOAD DATA INPATH
將數據復制到原始表。
您不能在配置單元中更改分區列實際上配置單元不支持更改分區列
您可以這樣想-Hive通過在hdfs中創建一個具有分區列值的文件夾來存儲數據-由於如果嘗試更改hive分區,則意味着您正在嘗試更改hive表的整個目錄結構和數據,即如果您對年份進行了分區,則不可能exp這是目錄結構的樣子
tab1/clientdata/**2009**/file2
tab1/clientdata/**2010**/file3
如果要更改分區列,可以執行以下步驟
創建另一個配置單元表,在分區列中進行必要的更改
Create table new_table ( A int, B String.....)
從上表加載數據
Insert into new_table partition ( B ) select A,B from table Prev_table
如您所說,重命名分區的值非常簡單:
hive> ALTER TABLE test.usage PARTITION (country ='US') RENAME TO PARTITION (date='USA');
我知道這不是您想要的。 不幸的是,鑒於您的數據已按國家/地區進行分區,您唯一的選擇是刪除表,從HDFS中刪除數據(假設您的表位於外部),然后使用大洲作為分區重新插入數據。
在您的情況下,我要做的是具有多個分區級別,以便您的文件夾結構如下所示:
/path/to/the/data/continent='america'/country='usa'
/path/to/the/data/continent='america'/country='mexico'
/path/to/the/data/continent='europe'/country='spain'
/path/to/the/data/continent='europe'/country='italy'
...
這樣,您可以查詢數據以獲取不同級別的粒度(在這種情況下為continent和country )。
在此處添加解決方案供以后使用:
用例:將分區列從STRING更改為INT
set hive.mapred.mode=norestrict; alter table {table_name} partition column ({column_name} {column_type}); eg ALTER TABLE employee PARTITION COLUMN dept INT;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.