Hive 如何禁用语义检查“并集两侧的架构应该匹配”

问题描述 投票:0回答:1

两个相同的 Hive 2.1

我有两个hadoop集群:

  1. 带有 Hive 2.1.0 r6177e19d5af719688732bbffc2a7953295e62b0a 的 HDP 2.x(选择版本();)
  2. 带有 Hive 2.1.1-cdh6.3.2 rb3393cf499504df1d2a12d34b4285e5d0c02be11 的 CDH 6.x(选择版本();)

同样的SQL

我在 SQL 下运行

set hive.execution.engine=spark;

with t1 as (
    select 1 as id, 11 as code
)
, t2 as (
    select 2 as id, '22' as code
)
select * from t1
union all
select * from t2;

HDP 有效

在 HDP 集群中,此 SQL 可执行文件。

但是CDH失败了

但是在CDH集群中,这个SQL会抛出:

[42000][40000] 编译语句时出错:FAILED:SemanticException 9:14 联合两侧的架构应匹配:第一个表上的列代码为 int 类型,第二个表上的列代码为 string 类型。令牌“t2”附近遇到错误

有什么区别?怎么解决?

那么这两个Hive有什么区别呢?

我们有很多这样的 SQL,但我们无法承担使用

cast(xxx as string)
更改它们的成本。如何让CDH Hive像HDP一样工作?

非常感谢您的帮助!

sql hadoop hive cloudera-cdh hdp
1个回答
0
投票

根据Hive问题:https://issues.apache.org/jira/browse/HIVE-14251,这是一个BUG,所以没有设置。

有两种解决方案:

  1. 调整您的 SQL。 (推荐)
  2. 为您的集群反转此补丁。 (付出很多努力)
© www.soinside.com 2019 - 2024. All rights reserved.