请求将Teradata日期转换CASE语句改写为Hive兼容格式
Teradata转Hive:日期计算语句兼容修改
原Teradata可执行语句
CASE WHEN Cast(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) > 2956565 THEN Cast('2999-12-31'AS DATE) WHEN Cast(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) = 0 THEN Cast('1900-01-01' AS DATE) ELSE Cast('1900-01-01' AS DATE) + Cast(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) - 1 END AS ACCT_OPEN_DT
Hive执行报错信息
Error while compiling statement: FAILED: SemanticException line 0:undefined:-1 Wrong arguments 'ACCT_OPEN_DT': No matching method for class org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPDTIPlus with (date, int)
问题原因
Hive不支持Teradata中直接将DATE类型与INTEGER类型做加减运算的语法,必须使用Hive内置的日期函数实现日期偏移计算。
修改后的Hive兼容语句
CASE WHEN CAST(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) > 2956565 THEN CAST('2999-12-31' AS DATE) WHEN CAST(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) = 0 THEN CAST('1900-01-01' AS DATE) ELSE DATE_ADD(CAST('1900-01-01' AS DATE), CAST(STG_101_118_INVM.ACCT_OPEN_DT AS INTEGER) - 1) END AS ACCT_OPEN_DT
关键修改点
- 替换原Teradata的
DATE + INTEGER - 1运算为Hive的DATE_ADD()函数,该函数支持传入基准日期和偏移天数(整数)计算目标日期。 - 保留原逻辑的条件判断规则,仅修改日期计算的实现方式。
内容的提问来源于stack exchange,提问作者ryan
相关产品推荐
相关产品推荐

