我有这个teradata查询,但当我在hive上运行它时,它不支持
CAST(DATE '1900-01-01'+CAST( 999999999 - TRIM(BASM_DATE) AS INTEGER)
AS DATE) AS BASM_DATE
错误
Error while compiling statement: FAILED: SemanticException line
0:undefined:-1 Wrong arguments 'BASM_DATE': No matching method for class
org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPDTIPlus with (date,
int)
你们能告诉我要修复哪一部分以及查询是什么吗?
谢谢你。
2条答案
按热度按时间laik7k3q1#
您需要使用
date_add(dt,num)
。请使用下面的SQL -
我假设BASM_DATE是一个字符串列,并使用
TRIM
尝试删除尾随或前导空格。vi4fp9gy2#
Teradata SQL依赖于围绕TRIM发生的两个隐式转换。
首先使用默认格式将BASM_DATE隐式转换为VARCHAR,然后应用TRIM,再将该字符串隐式转换为FLOAT,然后执行浮点减法,最后将结果显式转换为INTEGER。然后将该天数与1900-01-01日期相加,然后执行从DATE到DATE的冗余CAST。(实际上没有理由在这里使用FLOAT,这只是Teradata用于隐式数值转换的类型。)在Teradata中给出相同结果的更好、更清楚的选择是:
因此,Hive的等价形式为:
或者可以更有效地使用