为什么 INSERT INTO 会导致 Hive 中的覆盖?
Why does INSERT INTO cause an overwrite in Hive?
我试图在保留现有数据的同时将行插入 table,但 Hive 会覆盖已经存在的任何数据。执行以下操作后,我希望有 2 行:
1 2
3 4
但在 table.
中只看到 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
。
什么可能导致此覆盖?
嘿,我在最后尝试了同样的方法,并且能够一个接一个地附加数据..
正如您所说,只有当我们指定 OVERWRITE
时,配置单元才会删除以前可用的数据。
您还可以看到该目录现在有两个文件,并且对于每个连续的 INSERT INTO
语句,将在该目录下创建一个新文件。
CREATE TABLE IF NOT EXISTS Test_Table (X1 STRING, X2 STRING) LOCATION '/hive1';
能否再试一次,如果问题仍然存在,请告诉我们?
我找到了罪魁祸首:它是反引号/反引号 (`)。问题已记录 here。
这将执行覆盖:
INSERT INTO TABLE `my_db.test_table`
SELECT '3', '4'
虽然这将追加:
INSERT INTO TABLE my_db.test_table
SELECT '3', '4'
我试图在保留现有数据的同时将行插入 table,但 Hive 会覆盖已经存在的任何数据。执行以下操作后,我希望有 2 行:
1 2
3 4
但在 table.
中只看到 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
。
什么可能导致此覆盖?
嘿,我在最后尝试了同样的方法,并且能够一个接一个地附加数据..
正如您所说,只有当我们指定 OVERWRITE
时,配置单元才会删除以前可用的数据。
INSERT INTO
语句,将在该目录下创建一个新文件。
CREATE TABLE IF NOT EXISTS Test_Table (X1 STRING, X2 STRING) LOCATION '/hive1';
能否再试一次,如果问题仍然存在,请告诉我们?
我找到了罪魁祸首:它是反引号/反引号 (`)。问题已记录 here。
这将执行覆盖:
INSERT INTO TABLE `my_db.test_table`
SELECT '3', '4'
虽然这将追加:
INSERT INTO TABLE my_db.test_table
SELECT '3', '4'