【问题标题】:How to Update/Drop a Hive Partition?如何更新/删除 Hive 分区?
【发布时间】:2012-12-11 07:00:21
【问题描述】:

Hive中的外部表添加分区后,如何更新/删除它?

【问题讨论】:

    标签: hive hiveql


    【解决方案1】:

    您可以更新 Hive 分区,例如:

    ALTER TABLE logs PARTITION(year = 2012, month = 12, day = 18) 
    SET LOCATION 'hdfs://user/darcy/logs/2012/12/18';
    

    此命令不会移动旧数据,也不会删除旧数据。它只是将分区设置为新位置。

    要删除一个分区,你可以这样做

    ALTER TABLE logs DROP IF EXISTS PARTITION(year = 2012, month = 12, day = 18);
    

    希望对你有帮助!

    【讨论】:

    • 仅供参考,对于 Spark SQL,这也无法更新现有分区的位置,主要是因为 Spark SQL API 不支持它。同样在 Hive CLI 中,您需要先运行 use <schema>,否则即使表确实存在,它也会以 FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter partition. Unable to alter partitions because table or database does not exist. 失败。因此,如果表名是 <schema>.<table>,则必须在 CLI 中运行 use <schema>,然后才能更改分区位置。
    • 这似乎永远挂在 ORC 表中
    • 我收回了,删除一个空分区只需要 3 分钟。正常的 Hadoop 性能。
    【解决方案2】:

    此外,您可以从一个语句中删除多个分区 (Dropping multiple partitions in Impala/Hive)。

    以上链接摘录:

    hive> alter table t drop if exists partition (p=1),partition (p=2),partition(p=3);
    Dropped the partition p=1
    Dropped the partition p=2
    Dropped the partition p=3
    OK
    

    编辑 1:

    此外,您可以使用条件符号(>、)删除批量,例如:

    Alter table t 
    drop partition (PART_COL>1);
    

    【讨论】:

      【解决方案3】:
      Alter table table_name drop partition (partition_name);
      

      【讨论】:

      • 请在您的答案中添加一些解释,以便其他人可以从中学习 - 已经有其他答案使用其他方法。你能解释一下为什么你的看起来不一样吗?
      【解决方案4】:

      您可以将文件复制到外部分区所在的文件夹中,也可以使用

      INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...

      声明。

      【讨论】:

        【解决方案5】:

        您可能还需要激活包含表的数据库

        use [dbname]
        

        否则你可能会出错(即使你指定了数据库,即 dbname.table )

        FAILED 执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。无法更改分区。无法更改分区,因为表或数据库不存在。

        【讨论】:

        • 知道是否有一种解决方法可以在spark.sql() 中执行相同的操作,它一次只支持一个命令(并且spark.sql("use <schema>") 后跟spark.sql("alter table ...") 不起作用,尤其是对于您想要更改添加分区中不允许的分区格式的情况。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-30
        • 2014-02-02
        • 1970-01-01
        • 1970-01-01
        • 2019-04-05
        • 1970-01-01
        相关资源
        最近更新 更多