Wie update partition Metadaten im Bienenstock , wenn partition Daten Händisch gelöscht von HDFS
Was ist der Weg, um automatisch aktualisieren Sie die Metadaten von Hive-Tabellen?
Wenn neue partition, die Daten Hinzugefügt wurden, um HDFS (ohne alter table add partition, Befehl-Ausführung) . dann können wir die Synchronisierung der Metadaten, indem Sie den Befehl 'msck reparieren'.
Was zu tun ist, wenn eine Menge von partitionierten Daten gelöscht wurden, aus HDFS (ohne die Ausführung von alter table drop partition-Leitung-Ausführung).
Was ist der Weg zu syncup der Hive metatdata?
Du musst angemeldet sein, um einen Kommentar abzugeben.
BEARBEITEN : Beginnend mit Hive-3.0.0
MSCK
können nun entdecken Sie neue Partitionen zu erstellen oder zu entfernen, fehlende Partitionen (oder beide) unter Verwendung der folgenden syntax :Realisiert wurde dies in HIVE-17824
Als richtig angegeben, indem HakkiBuyukcengiz,
MSCK REPAIR
nicht Partitionen löschen, wenn der entsprechende Ordner auf HDFS wurde manuell gelöscht, es gibt nur noch Partitionen, wenn neue Ordner sind erstellt.Auszug aus offiziellen Dokumentation :
Dies ist, was ich normalerweise nicht in Anwesenheit von
external
Tabellen, wenn mehrere Partitionen, Ordner manuell gelöscht, die auf HDFS und ich möchte schnell aktualisieren der Partitionen :DROP TABLE table_name
)(ablegen einer externen Tabelle löscht nicht die zugrunde liegende partition Dateien)
CREATE EXTERNAL TABLE table_name ...
)MSCK REPAIR TABLE table_name
)Je nach Anzahl der Partitionen kann dieser Vorgang eine lange Zeit. Die andere Lösung ist die Verwendung
ALTER TABLE DROP PARTITION (...)
für jede partition gelöscht-Ordner, aber das kann mühsam sein, wenn man mehrere Partitionen wurden gelöscht.MANAGED_TABLE
?Versuchen Sie es mit
Sicherstellung der Tisch ist auf "extern" stellen, löschen Sie alle Partitionen, dann führen Sie die Tabelle reparieren:
Wenn msck Reparatur einen Fehler löst, dann laufen hive aus dem terminal:
hive --hiveconf hive.msck.path.validation=ignore
oder
set hive.msck.path.validation=ignore;