首页 > 解决方案 > 从 HIVE 中的数组和结构表中选择插入

问题描述

我很难将结构化数组插入到另一个表中作为选择:

这是我的创建表:

create table temp4
(
nome_1 string
,array_nm1 array<struct<nome1:string, chave1:string, valor1:string, record1:struct<nome4:string>>>
,array_nm2 struct<nome2:string, chave2:string, valor2:string>
);

然后我将数据插入:

INSERT INTO temp4 select 
'artur',
ARRAY(NAMED_STRUCT('nome1','artur','chave1','a1','valor1','23', 'record1', NAMED_STRUCT('nome4','lucas'))) as array_nm1,
NAMED_STRUCT('nome2','seidi','chave2','s1','valor2','08') as array_nm2
FROM (select '1' ) t;

这工作得很好。所以我创建了另一个表并尝试从“temp4”输入数据但我无法设法从 temp4 插入另一个复杂表。喜欢:

create table temp5
(
name_1 string
,array_nm3 array<struct<name1:string,key1:string,value1:string,rec1:struct<name4:string>>>
,array_nm4 struct<name2:string,key2:string,value2:string>
);

我试过这样的事情:

INSERT into temp5
select
name_1 as name_1,
array(named_struct(name1,nome1,key1,chave1, value1,valor1, rec1, named_struct(name4, nome4))) as array_nm3,
named_struct(name2,nome2,key2,chave2, value2, valor2) as array_nm4
from temp4

但没有成功。还尝试将 array_nm1.nome1 作为 array_nm3.name1 但没有奏效。

标签: arraysstructhiveddl

解决方案


尝试如下更改插入查询。在 named_struct 中将键作为字符串值。此外,named_struct 键应与 temp5 DDL 中定义的键匹配。

INSERT into temp5
select
 name_1 as name_1,
 array(named_struct('name1',nome1,'key1',chave1, 'value1',valor1, 'rec1',named_struct('name4', nome4))) as array_nm3,
 named_struct('name2',nome2,'key2',chave2, 'value2', valor2) as array_nm4
 
from temp4

推荐阅读