Skripts vor der Bereitstellung und nach der Bereitstellung für Fabric Data Warehouse (Vorschau)

Gilt für:✅ Warehouse in Microsoft Fabric

Important

Dieses Feature befindet sich in der Vorschauphase.

Mit Skripts vor der Bereitstellung und nach der Bereitstellung können Sie benutzerdefinierte Transact-SQL Befehle als Teil der Bereitstellung eines Lagers in Fabric ausführen. Verwenden Sie Skripts vor der Bereitstellung und nach der Bereitstellung, um Daten, Seed-Referenzdaten zu bereinigen oder SQL-Sicherheit anzuwenden, die nicht im Schema des Lagers ausgedrückt wird.

In einem Fabric Data Warehouse ist ein Skript vor der Bereitstellung oder nach der Bereitstellung eine freigegebene SQL-Abfrage. Sie können diese Skripts in einem SQL-Datenbankprojekt erstellen und im Fabric Portal festlegen. Die Bezeichnung wird als Metadatum auf Warehouse-Ebene gespeichert und als Teil der .sqlproj-Datei des Warehouse in die Quellcodeverwaltung eingecheckt, sodass sie Git- und Deploymentpipelines ohne manuelles erneutes Anwenden durchläuft.

In diesem Artikel wird erläutert, was Skripts vor der Bereitstellung und nach der Bereitstellung sind, wie sie im Fabric-Portal konfiguriert werden, wie sie sich mit Quellcodeverwaltungs- und Bereitstellungspipelines verhalten und wie sie in Visual Studio Code und SQL Server Management Studio (SSMS) erstellt werden.

Important

Überprüfen Sie vor der Veröffentlichung immer Bereitstellungsskripts und -einstellungen. Testen Sie zunächst in Entwicklungs- und Testumgebungen, um unbeabsichtigten Datenverlust zu verhindern.

Was sind Vor- und Nachbereitstellungsskripte?

Wenn man einen Arbeitsbereich mit der Versionskontrolle verbindet, erscheint jedes Warehouse als SQL-Datenbankprojekt: ein quellgesteuertes Skript der SQL-Objekte, aus denen das Warehouse-Schema besteht (Tabellen, Ansichten, gespeicherte Prozeduren und Funktionen). Jedes Objekt wird als .sql-Datei gespeichert, die die DDL-Syntax (Data Definition Language) seiner Daten enthält, wie etwa CREATE TABLE. Die Objekte beschreiben den gewünschten Zustand des Schemas, und der Bereitstellungsprozess vergleicht diesen gewünschten Zustand mit dem Ziellager und generiert ein differenzielles T-SQL-Skript, das Objekte erstellt, ändert oder abbricht, damit das Ziel dem Projekt entspricht.

Skripts vor der Bereitstellung und nach der Bereitstellung erweitern diesen Prozess mit Transact-SQL, die um die Schemabereitstellung herum ausgeführt wird:

  • Ein Skript vor der Bereitstellung wird ausgeführt , bevor der Schemabereitstellungsplan angewendet wird.
  • Ein Post-Deployment-Skript wird nach Abschluss des Schema-Bereitstellungsplans ausgeführt.

Ein Skript für die Vor- oder Nachbereitstellung ist eine der gemeinsamen Abfragen, die im Ordner Abfragen des Data Warehouse gespeichert sind. Ein Lager unterstützt höchstens ein Skript vor der Bereitstellung und ein Skript nach der Bereitstellung. Die Bezeichnung wird als Metadaten auf Lagerebene gespeichert, anstatt den Skriptinhalt zu duplizieren, sodass der Speicheraufwand vernachlässigbar ist.

Da jedes festgelegte Skript jedes Mal ausgeführt wird, wenn das Lager bereitgestellt wird, erstellen Sie die Transact-SQL, um idempotent zu sein (sicher, wiederholt ausgeführt zu werden).

Tip

Wenn ein Skript idempotent ist, kann man es mehrfach ausführen, ohne Probleme zu verursachen. Du kannst auf mehrere Datenbanken deployen, ohne deren Status vorher bestimmen zu müssen.

Häufige Anwendungsfälle

  • Referenz- und statische Datenverwaltung: Einfügen, Aktualisieren oder Löschen von Zeilen aus Nachschlage-, Konfigurations- oder Referenztabellen nach der Bereitstellung des Schemas.
  • Datenbereinigung: Entfernen veralteter oder temporärer Daten vor oder nach der Anwendung von Schemaänderungen.
  • Umgebungseinrichtung: Anwenden von Einstellungen oder Initialisieren des Zustands, der sich zwischen Entwicklungs-, Test- und Produktionsumgebungen unterscheidet.
  • Metadatengesteuerte Pipelineinitialisierung: Vorbereiten des Lagerzustands, der für nachgeschaltete Pipelineschritte erforderlich ist.
  • SQL-Sicherheit: Warehouse-Tabellendaten und SQL-Sicherheitsfeatures wie Rollen, Benutzer und GRANT/DENY Berechtigungen sind nicht im SQL-Datenbankprojekt enthalten. Verwenden Sie ein Skript nach der Bereitstellung, um diese Objekte nach der Bereitstellung neu zu erstellen, einschließlich der Unterschiede zwischen Test- und Produktionsumgebungen. Beispiele finden Sie unter Beispiel für das Skript nach der Bereitstellung für die SQL-Sicherheit.

SQL-Projektdateistruktur und Syntax

Ein Warehouse-SQL-Projekt referenziert die Pre-Deployment- und Post-Deployment-Skripte in der Projektdatei (.sqlproj) mithilfe der Item-Typen PostDeploy und PreDeploy. Jeder Eintrag verweist auf eine einzelne freigegebene Abfragedatei im Projekt.

Im folgenden Beispiel wird pre-deployment.sql als Skript vor der Bereitstellung und post-deployment.sql als Skript nach der Bereitstellung festgelegt:

<ItemGroup>
  <PreDeploy Include="pre-deployment.sql" />
  <PostDeploy Include="post-deployment.sql" />
</ItemGroup>

Important

Fabric Data Warehouse unterstützt nur eine einzelne Datei für das Skript vor der Bereitstellung und eine einzelne Datei für das Skript nach der Bereitstellung. Das Erstellen eines Skripts aus mehreren Dateien , z. B. durch Verwenden des SQLCMD-Befehls :r zum Verweisen auf andere Dateien, wird nicht unterstützt. Wenn die .sqlproj Datei mehrere Einträge vor der Bereitstellung oder nach der Bereitstellung enthält, schlägt das Git-Update fehl.

Beispielskript nach der Bereitstellung für SQL-Sicherheit

Da SQL-Sicherheitsfeatures nicht im SQL-Datenbankprojekt erfasst werden, ist ein Skript nach der Bereitstellung eine gängige Möglichkeit, diese nach der Bereitstellung neu zu erstellen, nachdem ein Lager bereitgestellt wurde. Schreiben Sie das Skript so, dass es für jede Bereitstellung ausgeführt werden kann.

Im folgenden Beispiel wird eine benutzerdefinierte Datenbankrolle mit dem Namen DataReaders erstellt und dem SELECT-Schema die Berechtigungen dbo erteilt.

-- post-deployment.sql
-- Recreate a role and grant permissions after deployment.
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE name = N'DataReaders')
BEGIN
    CREATE ROLE DataReaders;
END;
GO

GRANT SELECT ON SCHEMA::dbo TO DataReaders;
GO

Note

Fabric Data Warehouse unterstützt nicht jede Transact-SQL Anweisung, die in SQL Server verfügbar ist. Stellen Sie sicher, dass die Anweisungen in Ihren Skripts in Fabric Data Warehouse unterstützt werden.

Konfigurieren von Skripts vor der Bereitstellung und nach der Bereitstellung im Fabric-Portal

Geben Sie im Fabric-Portal eine vorhandene freigegebene Abfrage als Skript vor der Bereitstellung oder nach der Bereitstellung an. Sie können dies über Objekt-Explorer oder über die Einstellungen des Lagerartikels tun.

Sie können eine freigegebene Abfrage nicht gleichzeitig als Skript vor der Bereitstellung und nach der Bereitstellung festlegen.

Aus dem Objekt-Explorer

  1. Erweitern Sie im Warehouse-Editor den Ordner "Abfragen" in Objekt-Explorer.
  2. Klicken Sie mit der rechten Maustaste auf die freigegebene Abfrage, die Sie verwenden möchten.
    • Falls nötig, verschieben Sie eine Abfrage von Meine Anfragen auf eine gemeinsame Abfrage.
  3. Wählen Sie "Bereitstellungsskripts festlegen" aus. Diese Aktion führt Sie zum Bereich für die Elementeinstellungen.
  4. In den Feldern Pre-deployment-Skript und Post-deployment-Skript wählen Sie Choose Script.
  5. Wählen Sie die Option Eine Abfrage als Pre-/Post-Deployment-Skript festlegen aus und wählen Sie dann jeweils eine freigegebene Abfrage aus. Jedes Dropdown-Menü listet alle gemeinsamen Abfragen im Lager auf.

Aus den Gegenstandseinstellungen

  1. Öffne die Einstellungen des Lagers.
  2. Geh zum CI/CD-Bereich .
  3. In den Feldern Pre-deployment-Skript und Post-deployment-Skript wählen Sie Choose Script.
  4. Wählen Sie die Option Eine Abfrage als Vor-/Nachbereitstellungsskript festlegen und wählen Sie dann jeweils eine freigegebene Abfrage aus. Jedes Dropdown-Menü listet alle gemeinsamen Abfragen im Lager auf.

Die getroffenen Auswahlen werden als Metadaten auf Lagerebene gespeichert und zwischen Objekt-Explorer und Elementeinstellungen synchronisiert.

Verhalten von Skripts vor und nach der Bereitstellung bei der Bereitstellung

Mit Git-Integration

Wenn Sie einen Arbeitsbereich mit einem Git-Repository verbinden, werden die Pre-Deployment- und Post-Deployment-Bezeichnungen beim Committen in die Datei .sqlproj des Warehouse serialisiert. Wenn Sie das Lager von Git aktualisieren, wendet Fabric die Änderungen auf das Live-Warehouse an und führt die Skripts in der folgenden Reihenfolge aus:

  1. Das Skript vor der Bereitstellung wird ausgeführt, bevor die Schemaänderungen angewendet werden.
  2. Der Schemabereitstellungsplan wurde angewendet.
  3. Das Skript nach der Bereitstellung wird nach Abschluss der Schemaänderungen ausgeführt.

Bezeichner über Git hin und zurück: Wenn Sie ein Skript im Portal konfigurieren und committen oder es in .sqlproj erstellen und den Arbeitsbereich aktualisieren, erhalten Sie ein konsistentes Ergebnis. Wiederholte Commits und Updates führen weder zu einer Duplizierung noch zu einem Verlust der Konfiguration. Da nur ein Skript vor der Bereitstellung und ein Skript nach der Bereitstellung zulässig sind, ersetzt eine in Git erstellte Konfiguration jede vorhandene Bezeichnung im Lager nach dem Update.

Mit Bereitstellungspipelines

Deployment-Pipelines verwenden die Bezeichnungen Pre-Deployment und Post-Deployment, wenn ein Warehouse in den Entwicklungs-, Test- und Produktionsphasen beworben wird. Die vorgesehenen Skripts werden in jeder Zielumgebung deterministisch ausgeführt, sodass Sie diese verwenden können, um die Umgebungseinrichtung anzuwenden oder die SQL-Sicherheit erneut anzuwenden, wenn Inhalte zwischen Phasen verschoben werden.

In Arbeitsbereichen ohne Quellcodeverwaltung

Die Definition des Warehouse-Elements enthält die Bezeichnungen vor und nach der Bereitstellung, auch wenn der Arbeitsbereich nicht mit der Versionsverwaltung verbunden ist. Der Export des Lagers umfasst die Konfiguration, und der Import stellt die Konfiguration unverändert wieder her.

Erstellen von Skripts vor der Bereitstellung und nach der Bereitstellung in einem SQL-Datenbankprojekt

Anstelle des Fabric-Portals können Sie Skripts vor und nach der Bereitstellung direkt im SQL-Datenbankprojekt des Warehouse erstellen, indem Sie die Erweiterung „SQL Database Projects“ in Visual Studio Code oder die integrierte SQL-Projektumgebung in SQL Server Management Studio verwenden. Die Konfiguration wird im Fabric Portal – sowohl in Objekt-Explorer- als auch elementeinstellungen – nach dem nächsten Git-Update angezeigt.

Visual Studio Code

  1. Installieren Sie die Erweiterung SQL-Datenbankprojekte in Visual Studio Code.
  2. Öffnen Sie das SQL-Datenbankprojekt für Ihr Lager. Wenn Ihr Arbeitsbereich mit Git verbunden ist, klonen Sie das Repository, und öffnen Sie dann den Lagerprojektordner.
  3. Klicken Sie in der Ansicht "Datenbankprojekte " mit der rechten Maustaste auf den Projektknoten, und wählen Sie " Skript vor der Bereitstellung hinzufügen " oder "Skript nach der Bereitstellung hinzufügen" aus.
  4. Geben Sie einen Skriptnamen ohne die Dateierweiterung an. Die Skriptdatei wird dem Projekt hinzugefügt und im Editor geöffnet.
  5. Fügen Sie Dem Skript Ihre Transact-SQL hinzu, und speichern Sie die Datei. Stelle sicher, dass die Datei für das nächste Git-Update im .sharedqueries Ordner gespeichert ist.
  6. Committen Sie die Änderungen und pushen Sie sie in Ihr Git-Repository. Aktualisieren Sie dann den Arbeitsbereich aus der Versionsverwaltung, um die Konfiguration anzuwenden.

SQL Server Management Studio

  1. Verwenden Sie SQL Server Management Studio 22 oder höher, einschließlich der SQL-Datenbankprojekte-Erfahrung.
  2. Öffnen Sie das SQL-Datenbankprojekt für Ihr Lager.
  3. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Projektknoten, und wählen Sie "Skript> aus. Wählen Sie Skript vor der Bereitstellung oder Skript nach der Bereitstellung aus.
  4. Die Skriptdatei wird dem Projekt hinzugefügt und im Abfrage-Editor geöffnet.
  5. Fügen Sie Dem Skript Ihre Transact-SQL hinzu, und speichern Sie die Datei. Stelle sicher, dass du die Datei für das nächste Git-Update im .sharedqueries Ordner speicherst.
  6. Committen Sie die Änderungen und pushen Sie sie in Ihr Git-Repository. Aktualisieren Sie dann den Arbeitsbereich aus der Versionsverwaltung, um die Konfiguration anzuwenden.

Bearbeiten der Projektdatei direkt

In jedem Tool können Sie ein Skript festlegen, indem Sie die .sqlproj Datei bearbeiten und ein einzelnes PreDeploy Element oder PostDeploy Element zu einem ItemGrouphinzufügen:

<ItemGroup>
  <PreDeploy Include="./sharedqueries/pre-deployment.sql" />
  <PostDeploy Include="./sharedqueries/post-deployment.sql" />
</ItemGroup>

Migrieren aus vorhandenen SQL-Projekten

Wenn Sie ein .sqlproj aus SQL Server Data Tools (SSDT) oder Visual Studio migrieren, das bereits Einträge für <PostDeploy> und <PreDeploy> enthält, erkennt der Importprozess diese Einträge und ordnet sie der Fabric-Konfiguration für Aktionen vor und nach der Bereitstellung zu. Da Fabric nur ein Skript vor der Bereitstellung und ein Skript nach der Bereitstellung unterstützt, stellen Sie sicher, dass das Projekt vor dem Importieren höchstens einen Eintrag jedes Typs enthält.

Überlegungen und Einschränkungen

  • Ein Lager unterstützt nur ein einzelnes Skript vor der Bereitstellung und ein einzelnes Skript nach der Bereitstellung. Es unterstützt nicht mehrere Dateien pro Skript.
  • Sie können dieselbe freigegebene Abfrage nicht sowohl als Skript vor der Bereitstellung als auch als Skript nach der Bereitstellung festlegen.
  • Wenn Sie eine freigegebene Abfrage löschen, die als Vorbereitstellungs- oder Nachbereitstellungsskript festgelegt ist, wird die entsprechende Bezeichnung automatisch gelöscht.
  • Wenn Sie eine freigegebene Abfrage ändern, die als Vorbereitstellungs- oder Nachbereitstellungsskript in eine Benutzerabfrage festgelegt ist, wird die entsprechende Bezeichnung automatisch gelöscht.
  • Skripte vor und nach der Bereitstellung laufen bei jeder Data-Warehouse-Bereitstellung. Die Transact-SQL Skripts sollten idempotent sein, sodass wiederholte Ausführungen nicht fehlschlagen oder doppelte Objekte erstellen.
  • Skripts vor der Bereitstellung und nach der Bereitstellung werden zur Erstellungszeit nicht anhand des Datenbankmodells überprüft. Fehler in den Skripts treten erst bei der Bereitstellung zutage, und ein Skriptfehler stoppt die Bereitstellung.
  • Sie können nur Transact-SQL verwenden, die in Fabric Data Warehouse unterstützt wird.
  • Die Identität, die die Bereitstellung ausführt, muss über die erforderlichen Berechtigungen zum Ausführen des Skriptinhalts verfügen.