① hive 不支持“insert into” ? ② hive的命令行中,使用insert into时,如何指定字段?

在hive的命令行中,使用 insert into 插入记录时,若只想指定特定的字段进行插入,依照SQL语句的语法写了一个如下:

# tbName这个表不止id和name这两个字段
insert into tbName(id, name) values (1,'xx');

结果hive就报错了。

后来我上网查了一下,看了很多贴子,都说 hive 不支持使用 insert into进行数据的插入。
这一点,我表示很疑惑,因为我使用下面的语句是可以插入的啊:

insert into tbName values (1,'xx','xx','xxxx');

即,当我不指定字段的时候,插入是没有问题的。

所以,我的问题是:

问题一:
     不知道是不是hive从哪个新版本才开始运行insert into语法的?还请知道的人指教一下?

问题二:
     在使用insert into如何指定特定字段?还是说,压根不能指定特定字段?

阅读 35.4k
4 个回答

从我自己实践来看:

  1. insert into肯定是支持的了,从哪个版本我就不知道了。

  2. 如果只想插入某几个字段,那也必须指定全部的字段名,但是没有值的那些个字段,就赋值为null

新手上路,请多包涵

hive底层在实现用insert语法插入数据时先是创建临时表(只放于缓存中,不在hdfs上),再把数据复制到目标表。
看例子:
hive> insert into test1(id,name,deptno) values(1,'testname1','1');
hive> insert into test1(id,name,deptno) values(2,'testname2','2');
hive> insert into test1(id,name,deptno) values(3,'testname3','3');
hive> insert into test1(id,name,deptno) values(4,'testname4','4');
hive> insert into test1(id,name,deptno) values(5,'testname5','5');
hive> show tables;
OK
test1
values__tmp__table__1
values__tmp__table__2
values__tmp__table__3
values__tmp__table__4
values__tmp__table__5

Hive Session ID = 5ff46ac5-7b4a-4d92-b1fa-a9e7b53ad1e0
hive> use test;
OK
Time taken: 0.429 seconds
hive> CREATE TABLE students (name VARCHAR(64), age INT, gpa DECIMAL(3,2)) CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC;
OK
Time taken: 1.015 seconds
hive> INSERT INTO TABLE students VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32);
Query ID = root_20191015142651_77d7f998-081a-49ce-abd3-8b927a9256ab
Total jobs = 2
Launching Job 1 out of 2
Number of reduce tasks determined at compile time: 2
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
set mapreduce.job.reduces=<number>

insert into values,卡住了。没办法插入。

hive:3.1.2
hadoop:3.2.1

这三个参数我在hive-site.xml加上也没用的。

求解

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏