为什么INSERT INTO会导致Hive中的覆盖?

时间:2017-10-27 16:40:50

标签: hive insert overwrite

我试图在保留现有数据的同时将行插入表中,但是Hive会覆盖已存在的任何内容。执行以下操作后,我希望有2行:

1 2
3 4

但只能在表格中看到1行(3 4)。

CREATE TABLE `my_db.test_table`
(
    `x1` STRING
    ,`x2` STRING
)
LOCATION '/.../test_table'
;

INSERT INTO TABLE `my_db.test_table`
SELECT '1', '2'
;

INSERT INTO TABLE `my_db.test_table`
SELECT '3', '4'
;

根据the Hive Language Manual,覆盖只应在INSERT OVERWRITE进行,而不应在INSERT INTO进行。 什么可能导致这种覆盖?

2 个答案:

答案 0 :(得分:2)

我找到了罪魁祸首:它是反击/反引号(`)。注意到这个问题here

这将执行覆盖:

INSERT INTO TABLE `my_db.test_table`
SELECT '3', '4'

虽然这会附加:

INSERT INTO TABLE my_db.test_table
SELECT '3', '4'

答案 1 :(得分:0)

嘿,我在最后尝试了同样的方法,并且能够一个接一个地附加数据。

正如您所说,只有当我们指定OVERWRITE时,hive才会删除以前可用的数据。 enter image description here 您还可以看到该目录现在有两个文件,并且对于每个连续的INSERT INTO语句,将在该目录下创建一个新文件。

Files under the Directory

CREATE TABLE IF NOT EXISTS Test_Table (X1 STRING, X2 STRING) LOCATION '/hive1';

请你再试一次,如果你还面临这个问题,请告诉我们吗?