首页 > 解决方案 > Hive:如何在数组类型的列中插入数据

问题描述

有一个具有以下架构的表:

CREATE TABLE `student_details`(
  `id_key` string, 
  `name` string, 
  `subjects` array<string>)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'path'

尝试在表中插入值时收到错误消息:

试过:

INSERT INTO student_details  values ('AA87U','BRYAN',array('ENG','CAL_1','CAL_2','HST','MUS')); 

错误:

FAILED: SemanticException [Error 10293]: Unable to create temp file for insert values Expression of type TOK_FUNCTION not supported in insert/values 

这对我来说没有意义。尝试在网上查找并找到一个类似的:ExternalLink。该解决方案也没有任何意义。

请提供任何帮助。

标签: arrayshive

解决方案


您不能直接在 Hive 中插入复杂类型。

您必须创建一个虚拟表,如下所示:

INSERT INTO student_details select 'AA87U','BRYAN', array('ENG','CAL_1','CAL_2','HST','MUS') from dummy; 

对于 Hive 2+,您可以在没有虚拟表的情况下运行。

INSERT INTO student_details select 'AA87U','BRYAN', array('ENG','CAL_1','CAL_2','HST','MUS');

推荐阅读