我需要在Hive中创建一个结构数组,以便对于一个ID,我可以将多个结构放在一个结构数组中。
我已在下表中创建
CREATE TABLE if not exists tbl1
(
sess_id STRING
, source_start_ts STRING
, source_end_ts STRING
,Node_String STRUCT < Node: STRING, Time_Spent:STRING,
Txn_Type: STRING, Txn_Status: STRING, Call_Status: STRING >
)
STORED AS ORC
然后创建第二个表,该表具有上述struct数组(我可以在第一个表上具有struct数组,但我也尝试过但失败了)
CREATE TABLE if not exists tbl2
(
sess_id STRING
,Col2 Array<STRUCT < Node: STRING,
Time_Spent:STRING, Txn_Type: STRING, Txn_Status: STRING,
Call_Status: STRING >>
) STORED AS ORC
但是,当使用下面的collect_set进行填充时,出现错误
insert into table tbl2
select sess_id
, collect_set(Node_String) as Col2
from tbl1
where sess_id = 'abc'
group by sess_id
这是错误
SQL错误[40000] [42000]:编译语句时出错:失败: UDFArgumentTypeException仅接受原始类型参数 但 结构 作为参数1传递。
我猜collect_set不接受结构类型。有功能吗?
这是一个例子
id, source_start_dt, source_end_dt, Node_string
1,'2019-01-01','2019-01-02' , {"node1","10s","activation", "123", "failed"}
1,'2019-01-01','2019-01-02', {"node2","120s","activation", "123", "Logged"}
1,'2019-01-01','2019-01-02', {"node3","450s","activation", "123", "completed"}
如您在上面看到的,每个ID有多个具有不同结构字段的Node_String。 ID'1'有3行,为了将这3行合为一体,我使用了collect_set
谢谢