为什么insert into会导致配置单元中的覆盖?

0md85ypi  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(670)

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

1 2
3 4

但只能看到一排( 3 4 )在table上。

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'
;

根据配置单元语言手册,覆盖只能在 INSERT OVERWRITE ,而不是 INSERT INTO . 什么会导致覆盖?

uhry853o

uhry853o1#

我找到了罪魁祸首:是反引号(`)。这里提到了这个问题。
这将执行覆盖:

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

这将附加:

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

uurv41yg2#

嘿,我也尝试了同样的方法,并且能够得到一个又一个附加的数据。。
正如你所说,只有当我们指定 OVERWRITE 配置单元将删除以前可用的数据。

您还可以看到,该目录现在将有两个文件,并且对于每个连续的 INSERT INTO 语句将在目录下创建一个新文件。

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

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

相关问题