我有一个hive表,其中一个日期列存在分区,但是日期列以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));
但它失败了。
查询的输出为CAST(REGEXP_REPLACE(CAST(DATE_SUB(TO_DATE('2016-09-11'),1) AS STRING),'-','') AS INT) => 20160910
当我编写像ALTER TABLE TABLE1 DROP IF EXISTS PARTITION (TBL_DATE >= 20160910)
这样的drop分区时,它运行正常。
考虑到我的输入将只是日期格式YYYY-MM-DD并且我已经删除所有给定输入日期为-1的分区;如何使上述陈述发挥作用。
答案 0 :(得分:0)
请先将其设置为非严格模式,然后再动态执行,
SET hive.exec.dynamic.partition=nonstrict