hive-insert overwrite与drop table+create table+insert into

h5qlskok  于 2021-06-28  发布在  Hive
关注(0)|答案(2)|浏览(654)

我在hive中自动编写了一些查询脚本,我们发现需要时间来清除表中的数据并插入新的数据。我们在想什么能更快?

INSERT OVERWRITE TABLE SOME_TABLE
    SELECT * FROM OTHER_TABLE;

或者这样做更快:

DROP TABLE SOME_TABLE;
CREATE TABLE SOME_TABLE (STUFFS);
INSERT INTO TABLE
    SELECT * FROM OTHER_TABLE;

运行查询的开销不是问题。因为我们也有创作剧本。问题是 INSERT OVERWRITE 有十亿行比 DROP + CREATE + INSERT INTO ?

n6lpvg4x

n6lpvg4x1#

为了达到最大速度,我建议发行 hadoop fs -rm -r -skipTrash table_dir/* 首先要快速删除旧数据而不将文件放入垃圾箱,因为插入覆盖会将所有文件放入垃圾箱,对于非常大的表,这将花费大量时间。然后2)做 INSERT OVERWRITE 命令。这将更快,因为您不需要删除/创建表。
更新:
从hive 2.3.0(hive-15880)起,如果表 TBLPROPERTIES ("auto.purge"="true")INSERT OVERWRITE 对表运行查询。此功能仅适用于托管表。因此,插入覆盖和自动清除将比 rm -skipTrash + INSERT OVERWRITE 或者 DROP + CREATE + INSERT 因为这将是一个单一的配置单元唯一的命令。

pjngdqdw

pjngdqdw2#

一个重要的考虑是如果你的模式改变了, INSERT OVERWRITE 会失败,而 DROP + CREATE + INSERT 不会的。虽然这不太可能应用于大多数场景,但如果您正在原型化工作流/表模式,那么它可能值得考虑。

相关问题