我在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
?
2条答案
按热度按时间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
因为这将是一个单一的配置单元唯一的命令。pjngdqdw2#
一个重要的考虑是如果你的模式改变了,
INSERT OVERWRITE
会失败,而DROP
+CREATE
+INSERT
不会的。虽然这不太可能应用于大多数场景,但如果您正在原型化工作流/表模式,那么它可能值得考虑。