Wie kann ich eine Partition nach dem Hinzufügen zu einer externen Tabelle in Hive aktualisieren / löschen?
Antworten:
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!
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);
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.
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.
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.
Alter table table_name drop partition (partition_name);
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 CLIuse <schema>
zuerst ausgeführt werden, bevor Sie den Partitionsspeicherort ändern.