当前位置: 首页 > 知识库问答 >
问题:

从配置单元表动态删除分区

曾嘉瑞
2023-03-14

我有一个配置单元表,其中一个date列上存在分区,但date列以YYYYMMDD格式存储为INT。该表还可以包含未来日期分区的数据

现在,作为过程的一部分,我希望删除那些在处理日(位于处理日)上运行的分区。

ALTER TABLE TABLE1 DROP IF EXISTS PARTITION (TBL_DATE >= CAST(REGEXP_REPLACE(CAST(DATE_SUB(TO_DATE('${load_date}'),1) AS STRING),'-','') AS INT));
ALTER TABLE TABLE1 DROP IF EXISTS PARTITION (TBL_DATE >= CAST(REGEXP_REPLACE(CAST(DATE_SUB(TO_DATE('2016-09-11'),1) AS STRING),'-','') AS INT));

当我编写drop分区时,比如alter TABLE TABLE1 drop IF EXISTS PARTITION(TBL_DATE>=20160910),那么它工作正常。

考虑到我的输入将是唯一的日期格式YYYY-MM-DD和我已经删除所有分区已给出输入日期-1;如何使上述陈述奏效?

共有1个答案

申屠秦斩
2023-03-14

请先将其设置为非严格模式,然后动态执行,

SET hive.exec.dynamic.partition=nonstrict
 类似资料:
  • 我有一个配置单元外部表,有3个分区列(a,B,C),现在我想从分区中删除B和C列。这样做可能吗?我已经尝试使用Alter table tab_name drop column col_name;---但它会抛出一个错误,说明无法删除分区列。

  • 我有一个外部配置单元表,其中有诸如year=2017,year=2018之类的分区,在它们内部,我还有year=2017和year=2018的每个月的分区。 如果是内部表,会发生什么情况?

  • 当使用外部配置单元表时,是否有一种方法可以删除目录中的数据,但通过查询保留分区。请注意,我不想删除表并重新创建它。我只想清空底层文件夹并重新启动一个进程。我的表很大,按年、月、日期和小时划分分区,手动重新创建分区需要大量时间。 谢谢

  • 插入覆盖表myTable分区(字段)从myTable中选择*,其中机器='xxxxx' 但是SELECT中的数据不会替换MyTable中的数据。

  • 假设我创建了一个分区列为年、月和日的配置单元表,如果我从hdfs中删除分区,那么结果是否会反映在配置单元表中

  • 我已经根据日期yyyy-mm-dd对配置单元表进行了分区。我想每天运行一个脚本,可以删除所有超过30天的分区,但在这种情况下,我不想超过日期。我希望它采取系统日期和删除超过30天的分区。