【问题标题】:Does Insert Overwrite deletes the data and partition in hive?插入覆盖是否会删除配置单元中的数据和分区?
【发布时间】:2019-04-14 22:52:35
【问题描述】:

我正在按年和月创建分区。假设目标 hive 表中存在的先前分区是 year = 2018 and month = 10 and month = 11。现在新数据即将到来,只有year = 2018 and month = 11。 所以我的问题是插入覆盖删除month = 10 的数据和分区吗? 请建议我一个解决方案,因为我也想删除 month = 10 的数据和分区。 谢谢

【问题讨论】:

  • 每次有新月数据到来时,是否要删除旧分区?
  • 是的,这是要求,仅供参考,目标表是

标签: hive partitioning overwrite


【解决方案1】:

当 Hive 尝试“INSERT OVERWRITE”到现有目录下的外部表的分区时,取决于分区定义是否已存在于元存储中,Hive 的行为会有所不同:

a) 如果分区定义不存在,它不会尝试猜测目标分区目录在哪里(静态或动态分区),因此将无法删除那些将写入的分区下的现有文件

b) 如果分区定义确实存在,它将尝试删除目标分区目录下的所有文件,然后再将新数据写入这些目录。

所以简而言之,在你的情况下,它不会删除数据。

【讨论】:

    【解决方案2】:

    如果您想删除所有现有分区并只保留新月份的数据,您可以使用带有比较器的DROP PARTITION 命令。

    例如:如果有 2018 年和第 10 个月及之前的分区。您可以使用任一配置

    // If there is always only one partition
     alter table part_t drop partition (year=2003,month=1);
    
    // If there are multiple partitions, you can use < comparator
     alter table part_t drop partition (year <2003,month<1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多