【问题标题】:Why does INSERT INTO cause an overwrite in Hive?为什么 INSERT INTO 会导致 Hive 中的覆盖?
【发布时间】:2018-04-09 08:11:04
【问题描述】:

我试图在保留现有数据的同时将行插入表中,但 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。 什么可能导致这种覆盖?

【问题讨论】:

    标签: hive insert overwrite


    【解决方案1】:

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

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

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

    您能否再试一次,如果您仍然遇到问题,请告诉我们?

    【讨论】:

    • 谢谢!看起来它实际上是 Hive 中的一个错误。查看我的答案中的链接。
    【解决方案2】:

    我找到了罪魁祸首:它是反引号/反引号 (`)。该问题已记录在here

    这将执行覆盖:

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

    虽然这会追加:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多