HIVE - INSERT OVERWRITE 与 DROP TABLE + CREATE TABLE + INSERT INTO
HIVE - INSERT OVERWRITE vs DROP TABLE + CREATE TABLE + INSERT INTO
我正在 hive 中执行一些查询的自动脚本,我们发现我们需要时不时地清除 table 中的数据并插入新数据。我们正在考虑什么可以更快?
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
?
快
为了获得最大速度,我建议 1) 首先发布 hadoop fs -rm -r -skipTrash table_dir/*
以快速删除旧数据而不将文件放入垃圾箱,因为 INSERT OVERWRITE 会将所有文件放入垃圾箱并且对于非常大的 table 这会花很多时间。然后 2) 执行 INSERT OVERWRITE
命令。这也会更快,因为您不需要 drop/create table.
更新:
从 Hive 2.3.0 (HIVE-15880) 开始,如果 table 有 TBLPROPERTIES ("auto.purge"="true")
,当 INSERT OVERWRITE
查询是 运行 对 table。此功能仅适用于托管 tables。因此,使用自动清除的 INSERT OVERWRITE 将比 rm -skipTrash
+ INSERT OVERWRITE
或 DROP
+CREATE
+INSERT
工作得更快,因为它将是一个 Hive-only 命令.
一个优势考虑是,如果您的架构发生变化,INSERT OVERWRITE
将失败,而 DROP
+CREATE
+INSERT
则不会。虽然这不太可能适用于大多数情况,但如果您正在制作原型 workflow/table 模式,那么它可能值得考虑。
我正在 hive 中执行一些查询的自动脚本,我们发现我们需要时不时地清除 table 中的数据并插入新数据。我们正在考虑什么可以更快?
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
?
为了获得最大速度,我建议 1) 首先发布 hadoop fs -rm -r -skipTrash table_dir/*
以快速删除旧数据而不将文件放入垃圾箱,因为 INSERT OVERWRITE 会将所有文件放入垃圾箱并且对于非常大的 table 这会花很多时间。然后 2) 执行 INSERT OVERWRITE
命令。这也会更快,因为您不需要 drop/create table.
更新:
从 Hive 2.3.0 (HIVE-15880) 开始,如果 table 有 TBLPROPERTIES ("auto.purge"="true")
,当 INSERT OVERWRITE
查询是 运行 对 table。此功能仅适用于托管 tables。因此,使用自动清除的 INSERT OVERWRITE 将比 rm -skipTrash
+ INSERT OVERWRITE
或 DROP
+CREATE
+INSERT
工作得更快,因为它将是一个 Hive-only 命令.
一个优势考虑是,如果您的架构发生变化,INSERT OVERWRITE
将失败,而 DROP
+CREATE
+INSERT
则不会。虽然这不太可能适用于大多数情况,但如果您正在制作原型 workflow/table 模式,那么它可能值得考虑。