簡體   English   中英

是否可以更改 HIVE 中的分區元數據?

[英]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});

您還可以使用以下步驟重新創建表定義並更改所有列類型:

  1. 使您的表在外部,因此可以在不刪除數據的情況下刪除它

    ALTER TABLE abc SET TBLPROPERTIES('EXTERNAL'='TRUE');

  2. 刪除表(僅刪除元數據)。

  3. 使用更新的 DDL 創建 EXTERNAL 表,其中類型已更改且具有相同的 LOCATION。
  4. 恢復分區:

    MSCK [REPAIR] TABLE tablename;

Amazon Elastic MapReduce (EMR) 的 Hive 版本的等效命令是:

ALTER TABLE tablename RECOVER PARTITIONS;

這將添加 Hive 分區元數據。 請參閱此處的手冊: 恢復分區

  1. 最后,如有必要,您可以再次使您的表 MANAGED:

ALTER TABLE tablename SET TBLPROPERTIES('EXTERNAL'='FALSE');

注意:以上所有命令都應該在 HUE 中運行,而不是 MySQL。

您不能更改 hive 事實上 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

如果要更改分區列,可以執行以下步驟

  1. 創建另一個 hive 表,在分區列中進行所需的更改

    創建表 new_table ( A int, B String .....)

  2. 從上一個表中加載數據

    從表 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.

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