sql—在不同组中跨数据类型执行比较时,如何处理潜在的数据丢失

ffx8fchx  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(342)

背景:我们的团队正在经历cloudera到6.1.1的升级,我的任务是确定如何处理跨数据类型的隐式数据类型转换的丢失。有关发行说明的详细信息,请参见下面的链接。
https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_611_incompatible_changes.html#hive_union_all_returns_incorrect_data
这个问题不仅影响union all查询,而且还有一个函数可以对不同数据类型的列(即字符串到bigint)执行比较。
小组决定我们不想更改底层表元数据。因此,解决方案是通过使用cast()函数来强制转换数据,从而允许潜在的数据丢失。在union all的情况下,我们强制转换到目标表的元数据。但是,在执行比较时,我试图确定最简单和最简单的方法来执行比较,而不会得到错误的结果。
问题:
在执行比较时,我可以简单地将所有内容转换为string或varchar()吗?是否存在可能产生错误结果的潜在问题?
更新:如果这种方法有问题,有没有正确的解决方法?
注意:这是我第一次接触hadoop/hive,我了解到rdbmsland中的所有知识并不总是适用的。

sirbozc5

sirbozc51#

你可能会有问题。例如,如果将字符串与int进行比较,则: '1.00' = 1 -->是的,因为这些值是作为数字进行比较的
但作为字符串: '1.00' = '1' -->false,因为值作为字符串进行比较
我想,你在约会上也会遇到类似的问题。

相关问题