我想将特定数据转换到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
将字符串 YYYYMMDD 转换为参数, to_date(concat(substr(au.fecha,1,4),'-',substr(au.fecha,5,2),'-',substr(au.fecha,7,1))) as fch