如何比较具有不同数据类型组的两列

How to compare two columns with different data type groups

这是我昨天提出的问题的扩展:

在 HIVE 中,是否可以对 SELECT 子句内联的不同数据类型组中的两列进行比较?我需要首先确定每一列的传入元数据是什么,然后提供选择 CAST 要使用的内容的逻辑。

CASE 
    WHEN  Column1 <=> Column2 THEN 0 -- Error occurs here if data types are in different data type groups (i.e., BIGINT <=> STRING)
    ELSE 1
END

如果这不可能,是否有解决方法来检索元数据并根据特定规则执行 CAST'ing?例如,如果:

  1. 第 1 列是 BIGINT
  2. 第 2 列是字符串

然后CAST Column2 as BIGINT 然后进行比较。需要尽可能简单的解决方案。我希望不必对生成 SELECT 语句的底层系统进行大量代码更改。

更新二: 有一个生成 SQOOP 查询的后端系统,在该系统中有一个函数可以修改 SELECT 子句来比较两列。我们 运行 遇到的问题是,在我们 运行 的早期版本 HIVE/Cloudera 中,列曾经被隐式转换。现在升级到不支持隐式数据类型转换的版本,我们需要找到最简单的方案来继续支持数据类型转换。不幸的是,后端没有可用的元数据,所以我试图在 SELECT 子句

中破解它

隐式转换是个好主意:

CASE 
    WHEN  Column1 <=> cast(Column2 as bigint) THEN 0 
    ELSE 1
END

如果无法强制转换,则强制转换的结果为 NULL。