如何在hive insert into query中指定列列表

6yoyoihd  于 2021-05-30  发布在  Hadoop
关注(0)|答案(4)|浏览(827)

我刚刚安装并配置了ApacheHive1.1.0版。然后我通过查询这个查询创建了一个表:

create table person (name1 string, surname1 string);

然后我想添加一行:

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

它会导致一个错误:
错误:编译语句时出错:失败:parseexception行1:20无法识别语句中“(“”name1“”,”附近的输入(state=42000,code=40000)。
但当我执行不带列列表的查询时,它可以正常工作:

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

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

dauxcl2d

dauxcl2d1#

根据这个bug 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');

我用Hive2.1测试了这个。它只适用于insert-into,不适用于insert-overwrite
我不知道为什么apachewiki页面语言手册dml中没有提到这个语法
https://issues.apache.org/jira/browse/hive-9481

knpiaxh1

knpiaxh12#

配置单元当前不支持此类功能,请参阅此处的详细信息
必须提供完整的值列表。

r6l8ljro

r6l8ljro3#

配置单元不支持行级插入、更新和删除。
但是,在创建表之后,您可以将所有数据放在一个文件中,并将该文件加载到配置单元表中。这样就可以将数据插入到配置单元表中。有关命令,请参阅配置单元手册。
在配置单元中执行插入/更新和删除有一些变通方法。但不建议这样做。

4bbkushb

4bbkushb4#

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

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

在hive 2.0中受支持

相关问题