如何在hive插入查询中指定列表

时间:2015-03-17 09:30:38

标签: hadoop hive hiveql

我刚刚安装并配置了Apache Hive 1.1.0版。然后我通过查询此查询创建了一个表:

create table person (name1 string, surname1 string);

然后我想通过以下方式添加一行:

insert into person (name1, surname1) values ("Alan", "Green");

它会导致错误:

  

错误:编译语句时出错:FAILED:ParseException行   1:20无法识别'(''name1'',''声明附近的输入   (状态= 42000,代码= 40000)。

但是当我执行没有列列表的查询时,它可以正常工作:

insert into person values ("Alan", "Green");

问题是:如何在hiveQL中指定列表以插入?

4 个答案:

答案 0 :(得分:2)

Hive目前不支持此类功能,详情为here

您必须提供完整的值列表。

答案 1 :(得分:2)

插入上述查询中的特定列:

insert into table person (name1, surname1) values ("Alan", "Green");
Hive 2.0支持

答案 2 :(得分:2)

根据此错误HIVE-9481,您可以在INSERT语句中指定列表,自1.2.0开始。语法如下:

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) 
[(column_list)]
[IF NOT EXISTS]] select_statement1 FROM from_statement;

示例:

CREATE TABLE pageviews (userid VARCHAR(64), link STRING, "from" STRING)
PARTITIONED BY (datestamp STRING) 
CLUSTERED BY (userid) INTO 256 BUCKETS STORED AS ORC;

INSERT INTO TABLE pageviews 
PARTITION (datestamp = '2014-09-23')
(userid,link) 
VALUES ('jsmith', 'mail.com');

我用Hive 2.1测试了这个。它仅适用于INSERT INTO,而不适用于INSERT OVERWRITE

我不知道为什么在Apache wiki页面中没有提到这种语法LanguageManual DML

https://issues.apache.org/jira/browse/HIVE-9481

答案 3 :(得分:0)

Hive不支持行级插入,更新和删除。

但是,创建表后,您可以将所有数据放在文件中,然后将文件加载到hive表中。这样你就可以将数据插入到hive表中。 您可以参考配置单的hive手册。

在hive中执行插入/更新和删除的解决方法。但它不推荐。