Freigeben über


REPAIR TABLE

Gilt für:durch Häkchen mit „Ja“ markiert Databricks SQL durch Häkchen mit „Ja“ markiert Databricks Runtime

Mit diesem Befehl werden Partitionen für Tabellen repariert oder geändert.

Verwenden Sie die SYNC METADATA Klausel mit Delta Lake, um den Katalogdienst basierend auf Tabellenmetadaten zu aktualisieren oder Apache Iceberg-Metadaten für Tabellen zu generieren, die für Iceberg-Lesevorgänge aktiviert sind. Verwenden Sie SYNC METADATA nicht, wenn Sie Partitionen für Nicht-Delta-Lake-Tabellen ändern.

Die unterstützte Funktionalität hängt davon ab, ob Tabellen im Unity-Katalog oder im Hive-Metaspeicher registriert sind und ob Tabellen vom Delta Lake unterstützt werden.

Syntax

[ MSCK ] REPAIR TABLE table_name
{
    [ {ADD | DROP | SYNC} PARTITIONS] | SYNC METADATA
}

Für Häkchen ja Databricks SQL Häkchen gesetzt ja Databricks Runtime 12.2 LTS und höher, MSCK ist optional

Parameter

  • table_name

    Der Name der Tabelle. Wenn die Tabelle nicht gefunden werden kann, löst Azure Databricks den Fehler TABLE_OR_VIEW_NOT_FOUND aus.

  • ADD oder DROP oder SYNCPARTITIONS

    Gilt für:Häkchen ja Databricks SQL Häkchen gesetzt ja Databricks Runtime 10.4 LTS und höher

    Beim Erstellen einer Nicht-Delta-Tabelle mit der PARTITIONED BY-Klausel werden Partitionen generiert und im Hive-Metastore registriert. Wenn Sie die partitionierte Tabelle jedoch aus vorhandenen Daten erstellen, werden die Partitionen nicht automatisch im Hive-Metastore registriert. Führen Sie MSCK REPAIR TABLE aus, um die Partitionen zu registrieren.

    Eine weitere Möglichkeit zum Wiederherstellen von Partitionen ist die Verwendung ALTER TABLE von RECOVER PARTITIONS.

    Wenn die Tabelle zwischengespeichert wird, löscht der Befehl die zwischengespeicherten Daten der Tabelle und alle Nachfolger, die darauf verweisen. Der Cache füllt sich, wenn das nächste Mal auf die Tabelle oder die Abhängigkeiten zugegriffen wird.

    • Der Befehl ADD fügt dem Sitzungskatalog neue Partitionen für alle Unterordner im Basistabellenordner hinzu, die nicht zu Tabellenpartitionen gehören. ADD ist das Standardargument, wenn keine andere Option angegeben wird.
    • DROP löscht alle Partitionen aus dem Sitzungskatalog, die über nicht vorhandene Speicherorte im Dateisystem verfügen.
    • SYNC ist die Kombination aus DROP und ADD.
  • SYNC METADATA

    Nur Delta Lake.

    Wenn die Konfiguration spark.databricks.delta.catalog.update.enabled auf true festgelegt ist, werden Metadatenaktualisierungen der Zieltabelle automatisch mit dem Katalogdienst synchronisiert. Andernfalls ist möglicherweise eine manuelle Synchronisierung mit REPAIR TABLE table_name SYNC METADATA erforderlich.

    Liest das Transaktionsprotokoll der Zieltabelle und aktualisiert die Metadateninformationen im Katalogdienst. Um diesen Befehl auszuführen, müssen Sie über MODIFY und SELECT Berechtigungen für die Zieltabelle und USE SCHEMAUSE CATALOG Berechtigungen für das übergeordnete Schema und den Katalog verfügen.

    Dieses Argument funktioniert mit dem Hive-Metaspeicher in Databricks Runtime 16.1 und höher. Für Hive-Metastore-Tabellen benötigen Sie die Berechtigungen USAGE und MODIFY.

    Wenn Delta UniForm aktiviert ist (erfordert Unity-Katalog), SYNC METADATA löst manuelle Konvertierung aktueller Delta-Metadaten in Iceberg-Metadaten aus und synchronisiert die neueste Iceberg-Version für den Unity Catalog Iceberg-Endpunkt. Siehe Lesen von Delta-Tabellen mit Iceberg-Clients.

    Sie können REPAIR TABLE table_name SYNC METADATA verwenden, um das Unity Catalog-Berechtigungsmodell auf flache Klone anzuwenden, die Sie aus einem Fremdkatalog lesen, der mit dem Hive-Metastore-Verbund erstellt wurde. Weitere Informationen finden Sie unter Arbeiten mit flachen Klonen.

Beispiele (Nicht-Delta Lake-Tabellen)

-- create a partitioned table from existing data /tmp/namesAndAges.parquet
> CREATE TABLE t1 (name STRING, age INT) USING parquet PARTITIONED BY (age)
  LOCATION "/tmp/namesAndAges.parquet";

-- SELECT * FROM t1 does not return results
> SELECT * FROM t1;

-- run MSCK REPAIR TABLE to recovers all the partitions
> MSCK REPAIR TABLE t1;

-- SELECT * FROM t1 returns results
> SELECT * FROM t1;
    name age
  ------- ---
  Michael  20
   Justin  19
     Andy  30

Beispiel (Unity Catalog-Tabelle)

-- run MSCK REPAIR TABLE t1 SYNC METADATA to update the metadata info to Unity Catalog service
> MSCK REPAIR TABLE t1 SYNC METADATA