Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Ein Microsoft Fabric-Arbeitsbereich mit Berechtigungen auf der Ebene Mitwirkender oder höher.
- Ein Lakehouse in diesem Arbeitsbereich mit mindestens einer Delta-Tabelle, die Sie überwachen möchten. Dieses Tutorial verwendet ein Lakehouse namens
SalesDataLakehouse. - Kenntnisse in Fabric-Datenpipelines.
- Vertrautheit mit Fabric Notizbüchern.
Projektmappenstruktur
Die fertige Pipeline weist diese Struktur auf:
-
Skriptaktivität: Führt
sp_get_table_health_metricsfür die Zieltabelle aus und gibt Metriken zum Tabellenzustand als strukturierte Ausgabe zurück. -
Aktivität „If Condition“: Liest
PotentialAnomalyTypedirekt aus der Skriptausgabe und überprüft, ob der Wert größer als null ist. Weitere Informationen zumPotentialAnomalyTypeThema finden Sie unter "Potenzielle Anomalietypcodes". -
Notebookaktivität (im True-Zweig): Führt
OPTIMIZEfü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 .
- Wählen Sie in Ihrem Fabric-Arbeitsbereich + Neues Element>Notebook aus.
- Benennen Sie das Notizbuch "Optimize-Table".
- 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. - Wählen Sie "Erstellen" aus.
Hinzufügen der Parameterzelle
Die erste Zelle definiert die Variablen, die die Pipeline zur Laufzeit überschreibt.
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.
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.
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)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:
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
Wählen Sie in Ihrem Fabric-Arbeitsbereich + Neues Element>Pipeline aus.
Benennen Sie die Pipeline-Check-and-Optimize-Tabelle.
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_nameString SalesDataLakehouseschema_nameString dbotable_nameString 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.
- Wählen Sie auf der Registerkarte "Aktivitäten " die Option "Skript" aus, um es dem Zeichenbereich hinzuzufügen.
- Benennen Sie ihn , um den Tabellenstatus zu überprüfen.
- 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:
Wählen Sie auf der Registerkarte "Aktivitäten " die Option "Wenn Bedingung " aus, um dem Zeichenbereich eine Aktivität hinzuzufügen.
Nennen Sie sie „Anomalie prüfen“.
Zeichnen Sie einen Erfolg-Pfeil (grün) von Tabellenzustand überprüfen zu Anomalie überprüfen.
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.
Ziehen Sie eine Notizbuchaktivität auf den True-Unterbereich.
Nennen Sie sie "OPTIMIZE ausführen".
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_nameString @pipeline().parameters.lakehouse_nameschema_nameString @pipeline().parameters.schema_nametable_nameString @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:
Schritt 6: Überprüfen und Ausführen
Wählen Sie " Überprüfen " auf der Pipelinesymbolleiste aus, um auf Konfigurationsfehler zu überprüfen.
Wählen Sie "Ausführen" aus, um die Pipeline manuell auszuführen.
Überwachen Sie die Ausführung, und bestätigen Sie Folgendes:
-
Ü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_metricsim JSON-Format sehen. -
Anomalieprüfung: wird korrekt ausgewertet, indem
PotentialAnomalyTypedirekt aus der Skriptausgabe ausgelesen wird. -
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 VorgangOPTIMIZEzu überprüfen.
-
Ü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
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 ".