如何比较具有不同数据类型组的两列
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 列是 BIGINT
- 第 2 列是字符串
然后CAST Column2 as BIGINT 然后进行比较。需要尽可能简单的解决方案。我希望不必对生成 SELECT
语句的底层系统进行大量代码更改。
更新二:
有一个生成 SQOOP 查询的后端系统,在该系统中有一个函数可以修改 SELECT 子句来比较两列。我们 运行 遇到的问题是,在我们 运行 的早期版本 HIVE/Cloudera 中,列曾经被隐式转换。现在升级到不支持隐式数据类型转换的版本,我们需要找到最简单的方案来继续支持数据类型转换。不幸的是,后端没有可用的元数据,所以我试图在 SELECT
子句
中破解它
隐式转换是个好主意:
CASE
WHEN Column1 <=> cast(Column2 as bigint) THEN 0
ELSE 1
END
如果无法强制转换,则强制转换的结果为 NULL。
这是我昨天提出的问题的扩展:
在 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 列是 BIGINT
- 第 2 列是字符串
然后CAST Column2 as BIGINT 然后进行比较。需要尽可能简单的解决方案。我希望不必对生成 SELECT
语句的底层系统进行大量代码更改。
更新二:
有一个生成 SQOOP 查询的后端系统,在该系统中有一个函数可以修改 SELECT 子句来比较两列。我们 运行 遇到的问题是,在我们 运行 的早期版本 HIVE/Cloudera 中,列曾经被隐式转换。现在升级到不支持隐式数据类型转换的版本,我们需要找到最简单的方案来继续支持数据类型转换。不幸的是,后端没有可用的元数据,所以我试图在 SELECT
子句
隐式转换是个好主意:
CASE
WHEN Column1 <=> cast(Column2 as bigint) THEN 0
ELSE 1
END
如果无法强制转换,则强制转换的结果为 NULL。