如何在配置单元插入到查询中指定列列表

How to specify column list in hive insert into query

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

create table person (name1 string, surname1 string);

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

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

它会导致错误:

Error: Error while compiling statement: FAILED: ParseException line 1:20 cannot recognize input near '(' 'name1' ',' in statement (state=42000,code=40000).

但是当我在没有列列表的情况下执行查询时,它工作正常:

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

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

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

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

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

但是,在创建 table 之后,您可以将所有数据放在一个文件中并将该文件加载到配置单元 table 中。这样您就可以将数据插入配置单元 table。 命令可以参考hive手册

在配置单元中执行 inserts/updates 和删除有变通办法。但不推荐。

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

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

Hive 2.0 支持

根据这个错误HIVE-9481,从 1.2.0 开始,您可以在 INSERT 语句中指定列列表。语法是这样的:

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