[英]Is it possible to change partition metadata in HIVE?
這是我之前提出的問題的擴展: 如何比較具有不同數據類型組的兩列
我們正在探索更改表上的元數據的想法,而不是對 SELECT 語句中的數據執行 CAST 操作。 更改 MySQL 元存儲中的元數據非常簡單。 但是,是否可以將元數據更改應用於分區(它們是每天的)? 否則,我們可能會遇到當前和未來數據為 BIGINT 類型而歷史為 STRING 的情況。
問:HIVE中的分區元數據是否可以更改? 如果是,如何?
您可以使用以下語句更改分區列類型:
alter table {table_name} partition column ({column_name} {column_type});
您還可以使用以下步驟重新創建表定義並更改所有列類型:
使您的表在外部,因此可以在不刪除數據的情況下刪除它
ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');
刪除表(僅刪除元數據)。
恢復分區:
MSCK [REPAIR] TABLE tablename;
Amazon Elastic MapReduce (EMR) 的 Hive 版本的等效命令是:
ALTER TABLE tablename RECOVER PARTITIONS;
這將添加 Hive 分區元數據。 請參閱此處的手冊: 恢復分區
ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');
注意:以上所有命令都應該在 HUE 中運行,而不是 MySQL。
您不能更改 hive 事實上 Hive 中的分區列不支持更改分區列
You can think of it this way - Hive stores the data by creating a folder in hdfs with partition column values - Since if you trying to alter the hive partition it means you are trying to change the whole directory structure and data of hive table which is如果您已分區,則不可能 exp 這就是目錄結構的樣子
tab1/clientdata/2009/file2
tab1/clientdata/2010/file3
如果要更改分區列,可以執行以下步驟
創建另一個 hive 表,在分區列中進行所需的更改
創建表 new_table ( A int, B String .....)
從上一個表中加載數據
從表 Prev_table 插入 new_table 分區 ( B ) select A,B
在我更改了 Avro(avsc) 架構(見下文)之后,我能夠通過按照此站點執行“添加分區”來“修復”(已經存在的)分區:
http://hadooptutorial.info/partitioning-in-hive/
ALTER TABLE partitioned_user ADD PARTITION (country = 'US', state = 'CA')
LOCATION '/hive/external/tables/user/country=us/state=ca'
我通過從 MySQL 執行 sqoop 更改了 avro 模式(更改 MySQL 中的字段或 SELECT 中的CAST()
) - 這修改了 avsc 文件。
在執行ADD PARTITION
之前我已經做了很多事情——我已經完成了DROP/CREATE/MSCK TABLE
所以我不確定它們是否需要(但他們沒有修復分區)。
簡單的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.