hive insert into 插入数据后表中原来的数据丢失了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive insert into 插入数据后表中原来的数据丢失了相关的知识,希望对你有一定的参考价值。

我想要对一个表进行插入操作,这里面原本是有数据的,然后我用

insert into table_a
select * from table_b;
完成后查询有table_b的数据
然后
insert into table_a
select * from table_c;
在查询,发现table_b的数据不见了,只有table_c的数据了。
我打开了两个hive来插入的,先把table_b的插入完成后,再插入table_c的数据,请问这是怎么回事啊。

您好,问下您是否在表名加了这种``号?
如果是建议你使用以下这种方式处理转义字符,可以正常insert into`DatabaseName`.`TableName`
例如,insert into `db`.`tableA` select t.a, t.b from tableB t
问题原因:使用`DatabaseName.TableName`时语法解析为OVERWRITE,该问题为apache社区问题。在当前版本的hive中还未修复。
参考技术A 目测你这个在插入之前估计重新创建过表吧!! 参考技术B 是不是写overwrite了还是中间有跑过创建表的DDL了

使用insert into和insert overwrite插入数据的区别Hive or Odps

1、创建一个测试表insert_test

#标识创建表insert_test,默认新增id列,并插入一条数据1
CREATE TABLE insert_test AS SELECT 1 AS id;

2、插入数据

使用insert into插入数据:

INSERT INTO insert_test SELECT 2 AS id; --insert into 可以重复插入数据

执行两次上述命令,发现会重复插入行:

使用insert orverwrite插入数据:

INSERT OVERWRITE TABLE insert_test SELECT 2 AS id;  --insert overwrite 会将表中的数据先清空,然后在插入

3、总结

insert into:

  • 会保留之前的数据,继续插入,并且不会去重。

insert overwrite:

  • 会将之前的数据清空,然后再插入。

4、扩展Like和As关键字的区别


使用关键字Like创建表:

CREATE TABLE insert_table_copy_like LIKE insert_test;


使用关键字As创建表:

CREATE TABLE insert_table_copy_as AS SELECT * FROM insert_test WHERE 1=1;

二者的用途和区别:

  • Like:用来创建的完整表结构和全部索引,但是不会复制源表数据。
  • As :用来创建相同表结构并复制源表数据,也可以选择字段,创建出来的table缺少源表的索引信息,只有表结构相同,没有索引。

补充:Oracle支持as,也是只有表结构没有索引,Oracle不支持like;

以上是关于hive insert into 插入数据后表中原来的数据丢失了的主要内容,如果未能解决你的问题,请参考以下文章

使用insert into和insert overwrite插入数据的区别Hive or Odps

使用insert into和insert overwrite插入数据的区别Hive or Odps

Hive 动态分区

✨[面试进阶]INSERT INTO 和 INSERT OVERWRITE 的区别?(Hive篇)✨

✨[面试进阶]INSERT INTO 和 INSERT OVERWRITE 的区别?(Hive篇)✨

Hive insert 字段表错位踩坑