簡體   English   中英

如何更改Hive分區列名稱

[英]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'
...

這樣,您可以查詢數據以獲取不同級別的粒度(在這種情況下為continentcountry )。

在此處添加解決方案供以后使用:

  • 用例:將分區列從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.

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