我想将特定数据转换为Hive。Oracle中的功能不能在Hive中使用。我怎么解决这个问题?所应用的转换规则如下:
DECODE(TRUE, IS_DATE(TO_CHAR(columnname , 'YYYYMMDD')), 'YYYYMMDD',NULL)
对于DECODE
,证实可以用IF
处理。但是我找不到改变IS_DATE
函数和TO_CHAR
函数的方法。
Oracle没有IS_DATE
函数。您确定这不是用户定义的函数吗?如果是这样,那么你需要查看源代码,检查它是做什么的,并在Hive中复制它。
DECODE(a, b, c, d)
可以重写为CASE
表达式:
CASE WHEN a = b THEN c ELSE d END
所以你的代码(假设columnname
是DATE
,你使用TO_CHAR
将其转换为字符串,然后IS_DATE
检查它是否是一个有效的日期,这似乎毫无意义,因为当columnname
是NULL
时,它只会不是一个有效的日期)将转换为:
CASE
WHEN CAST(columnname AS STRING FORMAT 'YYYYMMDD') IS NOT NULL
THEN 'YYYYMMDD'
ELSE NULL
END
或者更简单:
CASE
WHEN columnname IS NOT NULL
THEN 'YYYYMMDD'
ELSE NULL
END