【问题标题】:Is it possible to change partition metadata in HIVE?是否可以更改 HIVE 中的分区元数据?
【发布时间】:2019-10-15 03:20:05
【问题描述】:

这是我之前提出的问题的延伸:How to compare two columns with different data type groups

我们正在探索更改表上的元数据的想法,而不是对 SELECT 语句中的数据执行 CAST 操作。更改 MySQL 元数据中的元数据非常简单。但是,是否可以将元数据更改应用于分区(它们是每天的)?否则,我们可能会遇到当前和未来数据的类型为 BIGINT 而历史数据为 STRING 的情况。

问题:是否可以更改 HIVE 中的分区元数据?如果是,怎么做?

【问题讨论】:

    标签: sql hadoop hive cloudera hive-metastore


    【解决方案1】:

    您可以使用以下语句更改分区列类型:

    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 分区元数据。在此处查看手册:RECOVER PARTITIONS

    1. 最后,如有必要,您可以再次将表设为 MANAGED:

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

    注意:以上所有命令都应该在 HUE 中运行,而不是 MySQL。

    【讨论】:

    【解决方案2】:

    您不能更改 hive 中的分区列事实上 Hive 不支持更改分区列

    参考:altering partition column type in Hive

    你可以这样想 - Hive 通过在具有分区列值的 hdfs 中创建文件夹来存储数据 - 因为如果您尝试更改配置单元分区,则意味着您正在尝试更改配置单元表的整个目录结构和数据,这是不可能的 exp 如果你已经分区了,这就是目录结构的样子

    tab1/clientdata/2009/file2
    tab1/clientdata/2010/file3
    

    如果要更改分区列,可以执行以下步骤

    1. 在分区列中创建另一个具有所需更改的配置单元表

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

    2. 从上一个表中加载数据

      插入 new_table 分区 (B) 从表 Prev_table 中选择 A,B

    【讨论】:

    • 您确定您提供的信息是最新且准确的吗?根据您帖子中的链接,它是在 2012 年创建的。
    • 在 Internet cwiki.apache.org/confluence/display/Hive/… 上找到了这个,但是我们是否也可以更改列的类型仍然不是很清楚.. 不久前我也尝试了 alter partition 语句,但它失败了
    • 看看这个:demo.gethue.com/hue/editor?editor=52825&type=hive
    • @leftjoin 有没有机会将数据写入多个分区,更改元数据,运行上面列出的步骤,然后成功运行使用 reduce 的查询(例如,SELECT DISTINCT、GROUP BY、WHERE 等)?我试过这个没有成功。看来我需要使用 CAST 操作将数据写入新表 - 这是目前唯一有效的方法。手动检查分区文件的标头,其中还存储了 AVRO 模式,确认这一点。
    猜你喜欢
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多