Hive 之 insert 和 insert overwrite
hive 表及数据准备
建表,并插入初始数据。向表中插入
hive> use test;
hive> create table kwang_test (id int, name string);
hive> insert into kwang_test values(1,'kwang');
hive> insert into kwang_test values(2,'rzheng');
hive> select * from kwang_test;
id | name |
---|---|
1 | kwang |
2 | rzheng |
insert into 操作
insert into 语法:
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] …)] VALUES values_row [, values_row …]
通过 insert into 语句向 kwang_test 表中插入一条数据,并查询结果。
hive> insert into table kwang_test values(3,'kk');
hive> select * from kwang_test;
id | name |
---|---|
1 | kwang |
2 | rzheng |
3 | kk |
insert overwrite 操作
insert overwrite 语法:
INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 …) [IF NOT EXISTS]] select_statement1 FROM from_statement;
insert overwrite 标准语法的数据来源是通过 select 语法来插入,但为了方便,直接插入 values。通过 insert overwrite 语句向 kwang_test 表中插入一条数据,并查询结果。
hive> insert overwrite table kwang_test values(4,'zz');
hive> select * from kwang_test;
id | name |
---|---|
4 | zz |
两者异同
看到上面的现象与结果,基本能够明白 insert into 与 insert overwrite 之间的异同,两者都可以向 hive 表中插入数据,但 insert into 操作是以追加的方式向 hive 表尾部追加数据,而 insert overwrite 操作则是直接重写数据,即先删除 hive 表的数据,再执行写入操作。
注意:如果 hive 表是分区表的话,insert overwrite 操作只会重写当前分区的数据,不会重写其他分区数据。