Vas*_*vik 6 hadoop hive hiveql
我刚安装并配置了Apache Hive 1.1.0版.然后我通过查询此查询创建了一个表:
create table person (name1 string, surname1 string);
Run Code Online (Sandbox Code Playgroud)
然后我想通过以下方式添加一行:
insert into person (name1, surname1) values ("Alan", "Green");
Run Code Online (Sandbox Code Playgroud)
它会导致错误:
错误:编译语句时出错:FAILED:ParseException行1:20无法识别'(''name1'','in statement(state = 42000,code = 40000)附近的输入.
但是当我执行没有列列表的查询时,它工作正常:
insert into person values ("Alan", "Green");
Run Code Online (Sandbox Code Playgroud)
问题是:如何在hiveQL中指定列表来插入?
根据这个错误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;
Run Code Online (Sandbox Code Playgroud)
例子:
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');
Run Code Online (Sandbox Code Playgroud)
我用 Hive 2.1 对此进行了测试。它仅适用于 INSERT INTO,不适用于 INSERT OVERWRITE
而且我不知道为什么在 Apache wiki 页面LanguageManual DML 中没有提到这种语法
https://issues.apache.org/jira/browse/HIVE-9481