0

背景: 我们的团队正在将 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 查询,而且还有一个函数可以对不同数据类型的列(即 STRING 到 BIGINT)执行比较。

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

问题:

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

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

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

4

1 回答 1

1

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

  • '1.00' = 1--> true,因为这些值作为数字进行比较

但作为字符串:

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

我认为,您可能会遇到类似的日期问题。

于 2019-10-03T21:53:19.967 回答