HIVE - INSERT OVERWRITE vs DROP TABLE + CREATE TABLE + INSERT INTO

Thi*_*dim 10 hive create-table

我正在hive中做一些自动脚本的几个查询,我们发现我们需要时间清理表中的数据并插入新的数据.我们在想什么可能更快?

INSERT OVERWRITE TABLE SOME_TABLE
    SELECT * FROM OTHER_TABLE;
Run Code Online (Sandbox Code Playgroud)

或者更快这样做:

DROP TABLE SOME_TABLE;
CREATE TABLE SOME_TABLE (STUFFS);
INSERT INTO TABLE
    SELECT * FROM OTHER_TABLE;
Run Code Online (Sandbox Code Playgroud)

运行查询的开销不是问题.由于我们也有创建脚本o.问题是,INSERT OVERWRITE十亿行的速度比DROP + CREATE + INSERT INTO

lef*_*oin 12

为了获得最大速度,我建议1)hadoop fs -rm -r -skipTrash table_dir/*首先发布快速删除旧数据而不将文件放入垃圾箱,因为INSERT OVERWRITE会将所有文件放入垃圾箱,对于非常大的表格,这将花费大量时间.然后2)做INSERT OVERWRITE命令.这也会更快,因为您不需要删除/创建表.

更新:

从Hive 2.3.0(HIVE-15880)开始,如果表中有TBLPROPERTIES ("auto.purge"="true")以前的表数据,INSERT OVERWRITE则在对表运行查询时不会将其移动到"废纸篓".此功能仅适用于托管表.因此,使用自动清除的INSERT OVERWRITE将比rm -skipTrash+ INSERT OVERWRITEDROP+ CREATE+ 更快地工作,INSERT因为它将是一个仅Hive命令.


Bre*_*dan 5

一个边缘的考虑是,如果你的架构更改,INSERT OVERWRITE就会失败,而DROP+ CREATE+INSERT不会。虽然这不太可能适用于大多数情况,但如果您正在对工作流/表模式进行原型设计,那么它可能值得考虑。