web-dev-qa-db-fra.com

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

Je fais un script automatique de quelques requêtes dans Hive et nous avons constaté que nous avons besoin de temps pour effacer les données d'une table et insérer la nouvelle. Et nous pensons à ce qui pourrait être plus rapide?

INSERT OVERWRITE TABLE SOME_TABLE
    SELECT * FROM OTHER_TABLE;

ou est plus rapide à faire comme ceci:

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

La surcharge de l'exécution des requêtes n'est pas un problème. En raison de la création du script. La question est, le INSERT OVERWRITE avec des milliards de lignes est plus rapide que DROP + CREATE + INSERT INTO?

10
Thiago Baldim

Pour une vitesse maximale, je suggérerais 1) d'émettre hadoop fs -rm -r -skipTrash table_dir/* D'abord pour supprimer rapidement les anciennes données sans mettre les fichiers dans la corbeille car INSERT OVERWRITE mettra tous les fichiers dans la corbeille et pour un très grand tableau, cela prendra beaucoup de temps. Ensuite, 2) exécutez la commande INSERT OVERWRITE. Cela sera également plus rapide car vous n'avez pas besoin de supprimer/créer de table.

MISE À JOUR:

Depuis Hive 2.3.0 (Hive-15880), si la table a TBLPROPERTIES ("auto.purge"="true") les données précédentes de la table ne sont pas déplacées vers la Corbeille lorsque la requête INSERT OVERWRITE Est exécutée sur la table. Cette fonctionnalité s'applique uniquement aux tables gérées. Ainsi, INSERT OVERWRITE avec purge automatique fonctionnera plus rapidement que rm -skipTrash + INSERT OVERWRITE Ou DROP + CREATE + INSERT car ce sera un commande Hive uniquement.

12
leftjoin

Une considération Edge est que si votre schéma change, INSERT OVERWRITE échouera, tandis que DROP + CREATE + INSERT ne le sera pas. Bien qu'il soit peu probable que cela s'applique dans la plupart des scénarios, si vous prototypez des schémas de workflow/table, cela peut valoir la peine d'être considéré.

3
Brendan