i have the following query and it executes successfully in 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
i have the following query and it executes successfully in teradata. but when run on hive it doesn't work and it shows a warning like this.
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)
what should i change? can you help me to convert this query to hive format?
You have to use date_add()
to add ACCT_OPEN_DT INT to a date. You can use below SQL -
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