在对不同组的数据类型进行比较时如何处理潜在的数据丢失

How to handle potential data loss when performing comparisons across data types in different groups

背景: 我们的团队正在将 Cloudera 升级到 6.1.1,我的任务是确定如何处理跨数据类型的隐式数据类型转换的丢失。有关发行说明的详细信息,请参阅下面的 link。

https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_611_incompatible_changes.html#hive_union_all_returns_incorrect_data

这个问题不仅会影响 UNION ALL 查询,而且还有一个函数可以对不同数据类型(即 STRING 到 BIGINT)的列执行比较。

小组决定我们不想更改基础 table 元数据。因此解决方案是通过使用 CAST() 函数转换数据来允许潜在的数据丢失。在 UNION ALL 的情况下,我们转换到目标 table 的元数据。但是,在进行比较时,我试图确定最简单和最容易的方法来进行比较而不会得到错误的结果。

问题:

我可以在执行比较时将所有内容简单地转换为 STRING 或 VARCHAR() 吗?是否存在任何可能导致错误结果的潜在问题?

更新: 如果这种方法有问题,是否有正确的解决方案来处理?

注意:这是我第一次与 Hadoop/HIVE 合作,我了解到我在 RDBMS 领域所知道的一切并不总是适用。

您可能会遇到问题。例如,如果将字符串与整数进行比较,则:

  • '1.00' = 1 --> 正确,因为值是作为数字进行比较的

但作为字符串:

  • '1.00' = '1' --> false,因为值是作为字符串进行比较的

我想你也会遇到类似的日期问题。