Optimieren von Lakehouse-Tabellen basierend auf Integritätsprüfungen

Gilt für:✅ SQL-Analyseendpunkt in Microsoft Fabric

In diesem Tutorial lernen Sie, wie Sie eine Microsoft Fabric-Pipeline erstellen, um eine intelligente Tabellenwartung durchzuführen.

Diese Lösung ruft die sys.sp_get_table_health_metrics gespeicherte T-SQL-Prozedur auf dem SQL-Analyseendpunkt Lakehouse auf, wertet das Ergebnis aus und wird nur ausgeführt OPTIMIZE , wenn die Tabelle tatsächlich Wartung benötigt. Dieser „Check-then-act“-Ansatz verhindert unnötige Rechenkosten bei fehlerfreien Tabellen und stellt gleichzeitig sicher, dass beeinträchtigte Tabellen automatisch gewartet werden.

Warum Wartung notwendig ist

In Lakehouse-Tabellen können sich im Laufe der Zeit zu viele kleine Parquet-Dateien ansammeln, was die Abfrageleistung beim SQL-Analyseendpunkt beeinträchtigt.

Anstatt unabhängig vom Tabellenstatus auf einem festen Zeitplan ausgeführt zu werden OPTIMIZE , trifft diese Pipeline eine fundierte Entscheidung: Sie überprüft zuerst die Integrität der Tabelle und löst nur die Optimierung aus, wenn eine Anomalie erkannt wird.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben:

Projektmappenstruktur

Die fertige Pipeline weist diese Struktur auf:

  1. Skriptaktivität: Führt sp_get_table_health_metrics für die Zieltabelle aus und gibt Metriken zum Tabellenzustand als strukturierte Ausgabe zurück.
  2. Aktivität „If Condition“: Liest PotentialAnomalyType direkt aus der Skriptausgabe und überprüft, ob der Wert größer als null ist. Weitere Informationen zum PotentialAnomalyTypeThema finden Sie unter "Potenzielle Anomalietypcodes".
  3. Notebookaktivität (im True-Zweig): Führt OPTIMIZE für die Tabelle in einem Spark-Notebook aus.

Am Ende dieses Tutorials verfügen Sie über ein Notebook, das Parameter aus der Pipeline übernimmt und eine Tabelle optimiert, wenn es ausgelöst wird.

Schritt 1: Erstellen des Optimierungsnotizbuchs

Das Notizbuch akzeptiert den Zielnamen Lakehouse, Schema und Tabellenname als Parameter aus der Pipeline und führt dann mithilfe von Spark SQL aus OPTIMIZE .

  1. Wählen Sie in Ihrem Fabric-Arbeitsbereich + Neues Element>Notebook aus.
  2. Benennen Sie das Notizbuch "Optimize-Table".
  3. Wählen Sie unter "Standort" das Lakehouse aus, in dem die von Ihnen überprüften Tabellen gespeichert sind. Diese Übung verwendet ein Lakehouse namens SalesDataLakehouse.
  4. Wählen Sie "Erstellen" aus.

Hinzufügen der Parameterzelle

Die erste Zelle definiert die Variablen, die die Pipeline zur Laufzeit überschreibt.

  1. Geben Sie in der ersten Zelle die folgenden Parameter ein. Die Werte sind nicht wichtig, und die Pipeline setzt sie zur Laufzeit außer Kraft.

    # Parameters 
    lakehouse_name = "<LakehouseName>"
    schema_name    = "<SchemaName>"
    table_name     = "<TableName>"
    

    Important

    So funktioniert die Parameterisierung in Fabric-Notebooks: Zur Laufzeit fügt Fabric unmittelbar nach der Parameterzelle eine neue Zelle ein und weist diesen Variablen die von der Pipeline übergebenen Werte neu zu. Die hier festgelegten Werte initialisieren nur die Variablen und verbessern die Lesbarkeit.

  2. Wählen Sie das Zellenmenü (...) aus. >Umschalten der Parameterzelle , um diese Zelle als Parameterzelle zu markieren.

Hinzufügen der ZELLE OPTIMIZE

Der OPTIMIZE Befehl ist ein Spark SQL-Befehl, kein T-SQL-Befehl. Sie müssen sie in Spark-Umgebungen wie Notizbüchern, Spark-Auftragsdefinitionen oder der Lakehouse Maintenance-Schnittstelle ausführen. Der SQL-Analyseendpunkt und der SQL-Abfrage-Editor für Warehouse unterstützen diesen Befehl nicht direkt.

  1. Geben Sie in der zweiten Zelle Folgendes ein:

    full_name = f"{lakehouse_name}.{schema_name}.{table_name}"
    print(f"Optimizing {full_name} ...")
    
    result = spark.sql(f"OPTIMIZE {full_name}")
    result.show(truncate=False)
    
  2. Fügen Sie markdown-Zellen nach Bedarf hinzu, um das Notizbuch für andere Benutzer ordnungsgemäß zu dokumentieren. Ihr fertiges Notizbuch sollte etwa wie folgt aussehen:

    Screenshot eines Fabric-Notebooks mit dem Titel „Optimieren einer Lakehouse-Tabelle, wenn Integritätsprüfungen ergeben, dass dies erforderlich ist“, mit zwei PySpark-Zellen, wobei eine die von der Pipeline bereitgestellten Lakehouse-, Schema- und Tabellenparameter festlegt und die andere einen OPTIMIZE-Befehl für die ausgewählte Lakehouse-Tabelle ausführt.

Note

In diesem Beispiel wird ein Lakehouse mit aktivierten Schemas betrachtet. Passen Sie den dreiteiligen Namen auf full_name entsprechend an, wenn Sie keine Lakehouse-Schemas verwenden.

Schritt 2: Erstellen der Pipeline

  1. Wählen Sie in Ihrem Fabric-Arbeitsbereich + Neues Element>Pipeline aus.

  2. Benennen Sie die Pipeline-Check-and-Optimize-Tabelle.

  3. Wählen Sie den Hintergrund der Pipeline-Canvas aus, und öffnen Sie dann die Registerkarte "Parameter ". Fügen Sie drei Parameter hinzu:

    Name Typ Standardwert
    lakehouse_name String SalesDataLakehouse
    schema_name String dbo
    table_name String FactSales

Schritt 3: Hinzufügen der Skriptaktivität

Die Skriptaktivität wird auf dem SQL-Analyseendpunkt ausgeführt sys.sp_get_table_health_metrics und erfasst das Ergebnis.

Important

Verwenden Sie die Skriptaktivität , nicht die Aktivität der gespeicherten Prozedur . Nur die Skriptaktivität macht das Resultset als strukturierte JSON-Ausgabe verfügbar, die nachgelagerte Aktivitäten analysieren können.

  1. Wählen Sie auf der Registerkarte "Aktivitäten " die Option "Skript" aus, um es dem Zeichenbereich hinzuzufügen.
  2. Benennen Sie ihn , um den Tabellenstatus zu überprüfen.
  3. Auf der Registerkarte Einstellungen:
    • Verbindung: Wählen Sie den SQL-Analyseendpunkt für Ihr Lakehouse aus. Wenn sie nicht aufgeführt ist, wählen Sie unten in der Dropdownliste " Alle durchsuchen " aus, und suchen Sie dann den SQL-Analyseendpunkt Ihres Lakehouse.

    • Skripttyp: Abfrage auswählen.

    • Skript: Wählen Sie "Dynamischen Inhalt hinzufügen" aus, und geben Sie den folgenden Ausdruck ein:

      @concat('EXEC sys.sp_get_table_health_metrics ''',
              pipeline().parameters.schema_name, '.',
              pipeline().parameters.table_name, '''')
      

Dieser Ausdruck erzeugt den SQL-Befehl, der die gespeicherte Prozedur für die Zieltabelle ausführt, z. B.: EXEC sys.sp_get_table_health_metrics 'dbo.FactSales'.

Überprüfen der Skriptausgabe

Führen Sie die Pipeline einmal aus und überprüfen Sie die Ausgabe der Skriptaktivität. Sie sehen ein JSON-Objekt ähnlich wie:

{
  "resultSetCount": 1,
  "resultSets": [
    {
      "rowCount": 1,
      "rows": [
        {
          "PotentialAnomalyType": 3,
          "PotentialAnomalyDescription": "Too many small files...",
          "FileCount": 2688,
          "...": "..."
        }
      ]
    }
  ]
}

Important

Ihr tatsächliches Ergebnis kann je nach Status der Tabelle variieren. Entscheidend ist, dass die von sys.sp_get_table_health_metrics bereitgestellten Spalten zurückgegeben werden.

Schritt 4: Hinzufügen der If-Bedingungsaktivität

Die Aktivität Wenn-Bedingung liest PotentialAnomalyType direkt aus der Ausgabe der Skript-Aktivität und trifft auf Grundlage des Ergebnisses eine Entscheidung. Führen Sie die folgenden Schritte aus:

  1. Wählen Sie auf der Registerkarte "Aktivitäten " die Option "Wenn Bedingung " aus, um dem Zeichenbereich eine Aktivität hinzuzufügen.

  2. Nennen Sie sie „Anomalie prüfen“.

  3. Zeichnen Sie einen Erfolg-Pfeil (grün) von Tabellenzustand überprüfen zu Anomalie überprüfen.

  4. Legen Sie auf der Registerkarte Aktivitäten der Aktivität Wenn-Bedingung den Ausdruck auf Folgendes fest:

    @greater(int(activity('Check Table Health').output.resultSets[0].rows[0]['PotentialAnomalyType']), 0)
    

Dieser Ausdruck liest die erste von sys.sp_get_table_health_metrics zurückgegebene Zeile, wandelt PotentialAnomalyType in eine Ganzzahl um und ergibt true, wenn der Wert größer als null ist, was darauf hinweist, dass in der Zieltabelle eine Anomalie erkannt wurde.

Schritt 5: Hinzufügen der Notizbuchaktivität (True Branch)

Wenn die Aktivität If Condition ausgewählt ist, wählen Sie Bearbeiten (Bleistiftsymbol) neben True aus. Die Arbeitsfläche wechselt zu einer untergeordneten Arbeitsfläche, die auf den Zweig True beschränkt ist.

  1. Ziehen Sie eine Notizbuchaktivität auf den True-Unterbereich.

  2. Nennen Sie sie "OPTIMIZE ausführen".

  3. Auf der Registerkarte Einstellungen:

    • Notebook: Wählen Sie das Optimize-Table-Notebook aus, das Sie in Schritt 1 erstellt haben.

    • Erweitern Sie die Basisparameter, und fügen Sie dann drei Zeilen hinzu:

      Name Typ Value
      lakehouse_name String @pipeline().parameters.lakehouse_name
      schema_name String @pipeline().parameters.schema_name
      table_name String @pipeline().parameters.table_name

Die drei Namenspaltenwerte müssen exakt mit den Variablennamen in der Parameterzelle des Notizbuchs übereinstimmen.

Note

Sie können "False"-Aktivitäten leer lassen. Die If Condition-Aktivität behandelt einen leeren False-Zweig als no-op und meldet die Pipeline als erfolgreich.

Die fertige Pipeline sollte wie folgt aussehen:

Screenshot einer Fabric-Datenpipeline mit einer Skriptaktivität „Check Table Health“, die mit der bedingten Aktivität „Check Anomaly“ verbunden ist. Die True-Verzweigung führt eine Notebook-Aktivität „OPTIMIZE“ aus, während die False-Verzweigung keine Aktivitäten enthält.

Schritt 6: Überprüfen und Ausführen

  1. Wählen Sie " Überprüfen " auf der Pipelinesymbolleiste aus, um auf Konfigurationsfehler zu überprüfen.

  2. Wählen Sie "Ausführen" aus, um die Pipeline manuell auszuführen.

  3. Überwachen Sie die Ausführung, und bestätigen Sie Folgendes:

    1. Überprüfen Sie den Tabellenzustand: Prüfen Sie die Ausgabe dieser Aktivität, wenn sie ausgeführt wird. Sie sollten die Ausgabe der gespeicherten Prozedur sys.sp_get_table_health_metrics im JSON-Format sehen.
    2. Anomalieprüfung: wird korrekt ausgewertet, indem PotentialAnomalyType direkt aus der Skriptausgabe ausgelesen wird.
    3. Führen Sie OPTIMIZE aus (nur wenn PotentialAnomalyType > 0): Wenn die Aktivität Check AnomalyTrue ergibt, prüfen Sie die Eingabe der Aktivität Run OPTIMIZE, um sicherzustellen, dass die richtigen Parameter verwendet werden (Lakehouse-Name, Schema und Tabellenname), und prüfen Sie die Ausgabe, um die Meldungen aus dem Vorgang OPTIMIZE zu überprüfen.

Bereinigen von Ressourcen

Wenn Sie Ressourcen nur für dieses Lernprogramm erstellt haben und sie nicht mehr benötigen, löschen Sie die folgenden Elemente aus Ihrem Arbeitsbereich:

  • Die Check-and-Optimize-Table-Pipeline.
  • Das Notizbuch "Optimize-Table ".