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

yquaqz18  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(454)

这是我昨天提出的一个问题的扩展:在不同组中对数据类型执行比较时,如何处理潜在的数据丢失
在配置单元中,是否可以在内联到配置单元中的不同数据类型组中的两列之间执行比较 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

如果这是不可能的,是否有一个解决方法来检索元数据并根据某些规则执行强制转换?例如,如果:
第1列是bigint
第2列是字符串
然后将column2转换为bigint,然后执行比较。需要最简单的解决方案。我希望不必对生成 SELECT 声明。
更新2:有一个生成sqoop查询的后端系统,在该系统中有一个修改select子句以比较两列的函数。我们遇到的问题是,这些列以前在我们运行的hive/cloudera的早期版本上被隐式转换。现在我们正在升级到不支持隐式数据类型转换的版本,我们需要找到最简单的解决方案来继续支持数据类型转换。不幸的是,后端中没有可用的元数据,所以我尝试在 SELECT 条款

nzkunb0c

nzkunb0c1#

隐式投射是个好主意:

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

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

相关问题