我刚刚安装并配置了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中指定列表以插入?
答案 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
答案 3 :(得分:0)
Hive不支持行级插入,更新和删除。
但是,创建表后,您可以将所有数据放在文件中,然后将文件加载到hive表中。这样你就可以将数据插入到hive表中。 您可以参考配置单的hive手册。
在hive中执行插入/更新和删除的解决方法。但它不推荐。