从HIVE表

时间:2016-10-12 23:07:21

标签: hive

我有一个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的分区;如何使上述陈述发挥作用。

1 个答案:

答案 0 :(得分:0)

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

SET hive.exec.dynamic.partition=nonstrict