我想将特定的数据转换成Hive,但是Oracle中的函数在Hive中不能使用,如何解决这个问题?应用的转换规则如下:
DECODE(TRUE, IS_DATE(TO_CHAR(columnname , 'YYYYMMDD')), 'YYYYMMDD',NULL)
在DECODE的情况下,已经确认可以用IF处理,但是我找不到改变IS_DATE函数和TO_CHAR函数的方法。
DECODE
IF
IS_DATE
TO_CHAR
kxkpmulp1#
Oracle没有IS_DATE函数。是否确定这不是用户定义的函数?如果是,则需要查看源代码并检查它的功能,然后在配置单元中复制该函数。DECODE(a, b, c, d)可以重写为CASE表达式:
DECODE(a, b, c, d)
CASE
CASE WHEN a = b THEN c ELSE d END
因此,您的代码(假设columnname是DATE,您使用TO_CHAR将其转换为字符串,然后IS_DATE检查它是否是有效日期,这似乎毫无意义,因为只有当columnname是NULL时,它才不是有效日期)将转换为:
columnname
DATE
NULL
CASEWHEN CAST(columnname AS STRING FORMAT 'YYYYMMDD') IS NOT NULLTHEN 'YYYYMMDD'ELSE NULLEND
WHEN CAST(columnname AS STRING FORMAT 'YYYYMMDD') IS NOT NULL
THEN 'YYYYMMDD'
ELSE NULL
END
或者更简单地说:
CASEWHEN columnname IS NOT NULLTHEN 'YYYYMMDD'ELSE NULLEND
WHEN columnname IS NOT NULL
1条答案
按热度按时间kxkpmulp1#
Oracle没有
IS_DATE
函数。是否确定这不是用户定义的函数?如果是,则需要查看源代码并检查它的功能,然后在配置单元中复制该函数。DECODE(a, b, c, d)
可以重写为CASE
表达式:因此,您的代码(假设
columnname
是DATE
,您使用TO_CHAR
将其转换为字符串,然后IS_DATE
检查它是否是有效日期,这似乎毫无意义,因为只有当columnname
是NULL
时,它才不是有效日期)将转换为:或者更简单地说: