如何在Hive 2中将数据插入复杂数据类型“Struct”

时间:2018-05-31 18:58:58

标签: java hadoop hive

这是表的结构

CREATE TABLE warehouse (
 time timestamp, 
 person struct<id : int, name: string, organization : string>, 
 activity struct<id : int, name: string>, 
 case struct<id : int, name: string, organization : string>
);

创建表没有问题,问题是如何将数据插入到该表中。我正在尝试这样的东西,但它不起作用

INSERT INTO TABLE warehouse VALUES('2018-05-31'),
SELECT NAMED_STRUCT('id', 1, 'name', 'Alex', 'organization', 'CITI') AS person,
SELECT NAMED_STRUCT('id', 1, 'name', 'Buy') AS activity,
SELECT NAMED_STRUCT('id', 1, 'name', 'Gold', 'organization', 'London') AS case
FROM case 

case,activity和person表已经存在,并且具有select中显示的结构。

1 个答案:

答案 0 :(得分:1)

你不能在带有VALUES的INSERT语句中使用NAMED_STRUCT(更多的是,你不能使用任何带有值的udfs插入)。这是一个变通方法的工作示例。

CREATE TABLE warehouse (
 time timestamp, 
 person struct<id : int, name: string, organization : string>, 
 activity struct<id : int, name: string>, 
 `case` struct<id : int, name: string, organization : string>
);


INSERT INTO TABLE warehouse
select 
'2018-05-31',
NAMED_STRUCT('id', 1, 'name', 'Alex', 'organization', 'CITI'),
NAMED_STRUCT('id', 1, 'name', 'Buy'),
NAMED_STRUCT('id', 1, 'name', 'Gold', 'organization', 'London') 
FROM (
select '1'
) t 
;