如何在配置单元插入到查询中指定列列表
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
我刚刚安装并配置了 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