将TO_CHAR、IS_DATE转换为hive查询

问题描述 投票:0回答:2

我想将特定数据转换到Hive。 但是,Oracle 中提供的功能无法在 Hive 中使用。我该如何解决这个问题? 应用的转换规则如下。

DECODE(TRUE, IS_DATE(TO_CHAR(columnname , 'YYYYMMDD')), 'YYYYMMDD',NULL)

对于

DECODE
,已确认可以用
IF
进行处理。 但我找不到更改
IS_DATE
函数和
TO_CHAR
函数的方法。

hadoop hive
2个回答
0
投票

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

0
投票

将字符串 YYYYMMDD 转换为参数, to_date(concat(substr(au.fecha,1,4),'-',substr(au.fecha,5,2),'-',substr(au.fecha,7,1))) as fch

© www.soinside.com 2019 - 2024. All rights reserved.