如何在配置单元中合并具有不同架构的表?

50few1ms  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(310)

我在 hive 里有两张table:
表a,其中包含一列“n”,属于数组类型
表b中未出现“n”列
表a和表b都包含“c”列。
我想这样把他们结合起来:

select g.* from 

(select N, C from A
union all
select null as N, C from B
) g;

但这在hive中引发了一个错误:

FAILED:...Schema of both sides of union should match: Column N is of type array<string> on first table and type void on second table.

因此,我尝试转换数据类型:

select g.* from 

(select N, C from A
union all
select cast(null as array) as N, C from B
) g;

这失败了 "cannot recognize input near 'array' ')' 'as' in primitive type specification. 我该怎么解决这个问题?感谢

slsn1g29

slsn1g291#

嗯,也许有一个更简单的方法,但我不知道怎么表达一个意思 NULL 配置单元中的数组常量。您可以使用sql进行此操作:

select g.*
from (select N, C from A
      union all
      select A.N, C
      from B join
           A 
           on 1 = 0
     ) g;

换言之,我可能不知道如何表达头顶上的常量。但是,我可以安排从 A --与一行不匹配。

相关问题