Wie aktualisiere / lösche ich eine Hive-Partition?

75

Wie kann ich eine Partition nach dem Hinzufügen zu einer externen Tabelle in Hive aktualisieren / löschen?

darcyq
quelle

Antworten:

163

Sie können eine Hive-Partition aktualisieren, indem Sie beispielsweise:

ALTER TABLE logs PARTITION(year = 2012, month = 12, day = 18) 
SET LOCATION 'hdfs://user/darcy/logs/2012/12/18';

Dieser Befehl verschiebt weder die alten Daten noch löscht er die alten Daten. Es setzt einfach die Partition auf den neuen Speicherort.

Sie können eine Partition löschen

ALTER TABLE logs DROP IF EXISTS PARTITION(year = 2012, month = 12, day = 18);

Ich hoffe es hilft!

darcyq
quelle
Nur zu Ihrer Information, für Spark SQL funktioniert dies auch nicht, um den Speicherort einer vorhandenen Partition zu aktualisieren, hauptsächlich weil die Spark SQL-API dies nicht unterstützt. Auch über die Hive-CLI müssten Sie use <schema>zuerst ausführen , da dies sonst fehlschlägt, FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter partition. Unable to alter partitions because table or database does not exist.selbst wenn die Tabelle vorhanden ist. Wenn der Tabellenname lautet <schema>.<table>, müssen Sie über die CLI use <schema>zuerst ausgeführt werden, bevor Sie den Partitionsspeicherort ändern.
Marcus
Dies scheint für immer mit einem ORC-Tisch zu hängen
MikeKulls
Ich nehme das zurück, es dauert nur 3 Minuten, um eine leere Partition zu löschen. Normale Hadoop-Leistung.
MikeKulls
15

Darüber hinaus können Sie mehrere Partitionen aus einer Anweisung löschen ( Löschen mehrerer Partitionen in Impala / Hive ).

Auszug aus dem obigen Link:

hive> alter table t drop if exists partition (p=1),partition (p=2),partition(p=3);
Dropped the partition p=1
Dropped the partition p=2
Dropped the partition p=3
OK

EDIT 1:

Sie können Bulk auch mithilfe eines Bedingungszeichens (>, <, <>) löschen, zum Beispiel:

Alter table t 
drop partition (PART_COL>1);
F. Lazarescu
quelle
2

Sie können entweder Dateien in den Ordner kopieren, in dem sich die externe Partition befindet, oder sie verwenden

INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2...)...

Erklärung.

Sergey Zyuzin
quelle
2

Möglicherweise müssen Sie auch die Datenbank mit der Tabelle aktivieren

use [dbname]

Andernfalls wird möglicherweise eine Fehlermeldung angezeigt (auch wenn Sie die Datenbank dh dbname.table angeben).

FAILED Ausführungsfehler, Code 1 von org.apache.hadoop.hive.ql.exec.DDLTask zurückgeben. Partition kann nicht geändert werden. Partitionen können nicht geändert werden, da Tabelle oder Datenbank nicht vorhanden sind.

Alexandr Trubetskov
quelle
Jede Idee, ob es dafür eine Problemumgehung gibt, um dieselbe Operation in auszuführen spark.sql(), die jeweils nur einen Befehl unterstützt (und spark.sql("use <schema>")gefolgt von spark.sql("alter table ...")funktioniert, funktioniert nicht, insbesondere in Fällen, in denen Sie ein Partitionsformat ändern möchten, das beim Hinzufügen nicht zulässig ist Teilung.
Marcus
2
Alter table table_name drop partition (partition_name);
Dev Kumar
quelle
Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können - es gibt bereits andere Antworten, die andere Ansätze verwenden. Kannst du erklären, warum deines anders aussieht?
Nico Haase