Bereitstellen und Verwalten von DCM Projects

Unter diesem Thema wird beschrieben, wie Sie DCM Projects zum Verwalten von Snowflake-Umgebungen erstellen und bereitstellen, auch als Konten.

Das Verwalten eines DCM project umfasst die folgenden Schritte:

  1. Vorbereiten Ihres Snowflake-Kontos für ein DCM project.

  2. Definieren von Projektkonfiguration und Objekten in Projektdateien.

  3. Erstellen eines DCM Projects-Objekts.

  4. Planen, um vorgeschlagene Änderungen vor der Bereitstellung in der Vorschau anzuzeigen.

  5. Bereitstellen des Projekts.

  6. Verwalten des Projekts, indem Sie den Prozess überwachen, aktualisieren und bei Bedarf wiederholen.

Sie können kontinuierlich inkrementelle Änderungen an Ihrem Projekt sowie umfangreiche Änderungen der Kontoinfrastruktur vornehmen.

Es wird empfohlen, kontinuierlich inkrementelle Änderungen und Ergänzungen für Ihr Projekt bereitzustellen, anstatt von 0 auf 100 umfangreiche Änderungen der Kontoinfrastruktur in einer einzigen Bereitstellung zu ändern.

Vorbereitungen für ein DCM project

Zum Start eines DCM Projects benötigt Ihr Snowflake-Konto die folgenden Voraussetzungen:

  • Eine Datenbank und ein Schema, in denen Sie Ihr DCM Projects-Objekt erstellen können

  • Eine Rolle mit Berechtigungen zum Erstellen eines DCM Projects-Objekts und mit Zugriff, um Abfragen auf einem Warehouse auszuführen

  • Für Snowflake CLI eine Rolle mit Berechtigungen zum Erstellen eines temporären Stagingbereichs

In diesem Abschnitt werden die Aufgaben beschrieben, die Sie zur Vorbereitung für DCM Projects erledigen müssen:

Bemerkung

Das `snowflake-labs DCM-Repository<https://github.com/Snowflake-Labs/snowflake_dcm_projects>`_ _ wird ständig mit Ressourcen aktualisiert, um Ihnen den Einstieg zu erleichtern.

  • Quickstarts und Demo-Projekte: Ein Repository, das Sie in einen Snowflake-Arbeitsbereich oder einen lokalen Ordner klonen können, um DCM Projects-Befehle auszuprobieren und DCM Projects-Fähigkeiten zu erkunden.

  • Beispiel-GitHub-Aktionen und -Workflows: CI/CD-Pipeline-Vorlagen mit Snowflake CLI zum Testen und Bereitstellen von DCM-Projekten.

Benutzeroberflächen-Tools

Sie haben die folgenden Optionen für die Weboberfläche von DCM Projects.

Benutzeroberflächen-Tool

Am besten geeignet für

Snowsight

Ein Arbeitsbereich in Snowsight ist eine native Snowflake-Cloud-IDE in Ihrem Konto.

  • Sie können die DCM-Definitionsdateien ganz einfach über die UI erstellen oder hochladen.

  • Stellen Sie eine Verbindung mit einem Git-Repository her, um Änderungen abzurufen und zu übertragen.

  • Überprüfen, bearbeiten und debuggen Sie Definitionsdateien.

  • Führen Sie DCM PLAN- undDEPLOY-Befehle unter Verwendung der Arbeitsbereichs-UI aus.

  • Durchsuchen Sie den Datenbankkatalog, um DCM project-Objekte und deren Konfiguration, verwaltete Objekte und den Bereitstellungsverlauf zu sehen.

  • Wählen Sie ein Zielprofil aus, um das verknüpfte DCM project und die Vorlagenkonfiguration automatisch zu verwenden.

Lokale IDE mit Snowflake CLI

Die vertrauteste und personalisierte Benutzeroberfläche für Software-Ingenieure.

  • Erstellen und bearbeiten Sie Definitionsdateien lokal.

  • Stellen Sie eine Verbindung mit einem Git-Repository her, um Änderungen abzurufen und zu übertragen.

  • Übersichtliche Snowflake CLI-Befehle mit Verzeichniskontext und optionalen Flags.

  • Formatierte Ausgabe und eine Option zum Speichern als .json-Datei.

  • Option zur Nutzung der Cortex Code-CLI für agentenbasierte oder unterstützte Entwicklung.

  • Informationen zur Installation und Ausführung von Snowflake CLI in Ihrer lokalen IDE finden Sie unter Snowflake CLI für DCM Projects.

Cortex Code

Ein Agenten-AI-Tool für Snowflake. Weitere Informationen dazu finden Sie unter Cortex Code für DCM Projects.

  • AI-gestütztes oder agentenbasiertes Erstellen von lokalen Definitionsdateien.

  • AI-gestützte oder agentenbasierte Code-Validierung und Debugging durch Ausführen von statischen Analysen und DCM PLAN-Befehlen.

SQL-Befehle

  • Führen Sie SQL-Befehle von der |sf-cli|REPL, Arbeitsbereichen, Notebooks oder Arbeitsblättern aus.

  • Passen Sie Befehle mit zusätzlichen Argumenten an.

  • Dieselben Befehle funktionieren für alle Snowflake-SQL-Schnittstellen.

Cortex Code für DCM Projects

Cortex Code ist ein Agenten-AI-Tool für Snowflake. Mit der DCM-Fähigkeit kann Cortex Code DCM Projects autonom erstellen, migrieren, debuggen und bereitstellen. Es kann auch Schritt für Schritt nebenher arbeiten.

Bemerkung

Cortex Code mit der DCM-Fähigkeit ist derzeit nur über die Cortex Code CLI verfügbar. Sie ist nicht in Snowsight-Arbeitsbereichen verfügbar.

Die Cortex Code DCM-Fähigkeit ermöglicht Folgendes:

  • Neues DCM project von Grund auf erstellen, einschließlich der Manifest-Datei, der Ordnerstruktur und der Definitionsdateien.

  • DEFINE-Anweisungen, Jinja-Vorlagen und Makros verfassen und bearbeiten.

  • Befehle PLAN, DEPLOY, REFRESH, TEST und PREVIEW ausführen.

  • Planausgabe interpretieren, Fehler diagnostizieren und Korrekturen vorschlagen.

  • Bereitstellungsartefakte herunterladen und prüfen.

  • Ein bestehendes DCM project navigieren und erklären.

Um mit der Cortex Code DCM-Fähigkeit zu beginnen, führen Sie die folgenden Schritte aus:

  1. Installieren Sie die Cortex Code CLI wie unter Installieren von Cortex Code beschrieben.

  2. Starten Sie Cortex Code in Ihrem Terminal.

  3. Verwenden Sie die $dcm-Fähigkeitsreferenz oder verwenden Sie den Begriff DCM in Ihrer Eingabeaufforderung in natürlicher Sprache, um mit Ihrem DCM Projects per Chat zu interagieren.

Beispiel:

  • „Erstell ein neues DCM-Projekt für unsere Analysepipeline“

  • „Plane mein Projekt für das PROD-Ziel

  • „Warum ist mein letzter Plan fehlgeschlagen?“

  • „Füge eine neue dynamische Tabellendefinition für Kundenausgaben hinzu“

Snowflake CLI für DCM Projects

Snowflake CLI ist eine Befehlszeilenschnittstelle für Snowflake. Es ist ein Tool, mit dem Sie mit Ihrem Snowflake-Konto von Ihrem lokalen IDE aus interagieren können.

  1. DCM-Projekte erfordern Snowflake CLI Version 3.16 oder höher. Installieren oder aktualisieren Sie die Snowflake CLI wie unter Installieren von Snowflake CLI beschrieben.

  2. Konfigurieren Sie die Verbindung zu Ihrem Snowflake-Konto wie unter Konfigurieren der Snowflake CLI und Verbinden mit Snowflake beschrieben. Prüfen Sie, ob die Verbindung funktioniert:

    snow connection test
    
  3. Navigieren Sie zum lokalen Verzeichnis Ihres Git-Repository-Klons. Beispiel:

    cd ./Quickstarts/DCM_Quickstart_1
    
  4. Snowflake CLI DCM-Befehle anzeigen, die Ihnen zur Verfügung stehen:

    snow dcm --help
    

Git-Integration

Stellen Sie eine Verbindung zum Git-Repository her, in dem Ihre DCM project-Definitionsdateien gespeichert sind.

  1. Erstellen Sie einen neuen Arbeitsbereich aus einem Git-Repository.

  2. Erstellen oder wählen Sie einen Git-Zweig für Ihre geplanten Änderungen aus.

    Snowflake klont Dateien aus diesem Zweig in Ihren Arbeitsbereichseditor.

  3. Navigieren Sie zu dem Ordner, in dem Sie Ihre DCM project-Definitionsdateien haben oder diese erstellen möchten.

Erstellen Sie eine DCM project, wenn:

Erforderliche Rollen und Berechtigungen

Die Rolle des Benutzers, der ein DCM project-Objekt erstellt, muss die folgenden Rollen und Berechtigungen haben:

  • CREATE DCM PROJECT ON SCHEMA-Berechtigung:

    GRANT CREATE DCM PROJECT ON SCHEMA <schema_name> TO ROLE <role_name>;
    

Erstellen Sie eine DCM project, wenn:

Erstellen Sie ein DCM project-Objekt mithilfe einer der folgenden Optionen:

CREATE [OR REPLACE] DCM PROJECT [IF NOT EXISTS] <my_project>
[COMMENT = 'my comment'];

Zugriffssteuerung und Rollenberechtigungen

Sie können eine rollenbasierte Zugriffskontrolle (RBAC) des DCM project-Objekts der Schema-Ebene mit READ, MONITOR oder OWNERSHIP-Berechtigungen festlegen.

Diese Berechtigungen sind unabhängig von der Zugriffssteuerung für Definitionsdateien, die in einem Arbeitsbereich, Stagingbereich oder Repository gespeichert sind.

Berechtigung

Beschreibung

Zulässige Operationen

READ

  • Zeigt an, ob das DCM project existiert.

  • Listet die vom DCM project bereitgestellten Objekte und Berechtigungen auf, die für die Rolle des Benutzers sichtbar sind.

    Das bedeutet, dass Sie sowohl READ für das DCM project und READ für die Objekte selbst benötigen.

  • SHOW DCM PROJECTS LIKE ‚%project‘

  • DESCRIBE DCM PROJECT <project>

  • SHOW ENTITIES IN DCM PROJECT <project>

MONITOR

  • Ermöglicht den Zugriff auf den vollständigen Bereitstellungsverlauf, einschließlich aller Artefakte.

  • Gibt der Rolle die Möglichkeit, Produktionsbereitstellungen zu analysieren, zu debuggen oder zu überprüfen, ohne dass Änderungen direkt bereitgestellt werden können.

  • Alle READ-Berechtigungen

  • DESCRIBE DCM PROJECT <project> (mit Quelle und Bereitstellungspfad der letzten Bereitstellung)

  • INFORMATION_SCHEMA.DCM_DEPLOYMENT_HISTORY (project_name => ‚db.schema.project‘)

  • SHOW DEPLOYMENTS IN DCM PROJECT <project>

  • LIST Alle Dateien in der Bereitstellung

  • GET Beliebiger Zugriff auf Dateien innerhalb des DCM project

OWNERSHIP

  • Die Rolle, mit der das DCM project erstellt wird, ist der Eigentümer dieses Projekts.

  • Ermöglicht der Rolle das Bereitstellen von Änderungen.

  • Gibt der Rolle die Möglichkeit, die Eigentümerschaft des Projekts auf eine andere Rolle zu übertragen, wenn das Projekt noch nicht bereitgestellt wurde.

  • Alle MONITOR-Berechtigungen

  • EXECUTE DCM PROJECT <project> PLAN

  • EXECUTE DCM PROJECT <project> DEPLOY

  • EXECUTE DCM PROJECT <project> PREVIEW

  • EXECUTE DCM PROJECT <project> REFRESH

  • EXECUTE DCM PROJECT <project> TEST

  • DROP DCM PROJECT <project>

  • ALTER DCM PROJECT <project>

  • GRANT READ on DCM PROJECT <project> TO ROLE <role2>

  • GRANT MONITOR on DCM PROJECT <project> TO ROLE <role2>

Bemerkung

Wie andere Snowflake-Befehle auch respektiert EXECUTE DCM PROJECT, wenn Berechtigungen aus Sekundärrollen für den Benutzer, der den Befehl ausführt, aktiviert sind. Führen Sie USE SECONDARY ROLES NONE; aus, so dass Sie keine Berechtigungen von anderen Rollen als der Rolle des Projekteigentümers nutzen. Dadurch wird sichergestellt, dass die Bereitstellung in verschiedenen Umgebungen konsistent ist, wenn sie von verschiedenen Service-Benutzern mit derselben Primärrolle ausgeführt wird.

Eigentümerschaft an DCM-verwalteten Objekten

Die Rolle, mit der ein DCM project bereitgestellt wird, hat standardmäßig die OWNERSHIP-Berechtigung für alle bereitgestellten Objekte.

Die Projektdefinitionen können GRANT OWNERSHIP-Anweisungen für andere Rollen enthalten. Snowflake empfiehlt, dass die DCM project-Eigentümerrolle die Eigentümerschaft für DCM-verwaltete Objekte nur an eine andere untergeordnete Rolle, die sie ebenfalls innehat, gewährt. Dann kann das Projekt dieses Objekt weiterhin verwalten, da die Projekteigentümerrolle die Berechtigungen der neuen Objekteigentümerrolle „erbt“.

Wenn die DCM project-Eigentümerrolle die Eigentümerschaft für DCM-verwaltete Objekte auf eine andere Rolle überträgt, die es nicht selbst besitzt, kann das Projekt dieses bereitgestellte Objekt nicht mehr verwalten, da die Eigentümerrolle des Projekts nicht mehr die Eigentümerschaft hat. Nachfolgende Bereitstellungen werden fehlschlagen. Die Objektdefinition muss aus dem Projekt entfernt werden oder die Eigentümerschaft muss wieder an die Rolle des Projektbesitzers zurückgegeben werden.

Wenn Sie vorhandene Objekte migrieren möchten, damit sie von einem DCM project verwaltet werden sollen, muss die Eigentümerrolle des DCM project-Objekts außerdem über Eigentümerrechte (direkt oder geerbt durch andere Rollen) für das Objekt verfügen, das vom DCM project verwaltet werden soll.

Bemerkung

Wenn es sich um ein migriertes Objekt handelt, empfehlen wir das Hinzufügen der entsprechenden GRANT OWNERSHIP-Anweisung auch für die Projektdefinitionen, um sicherzustellen, dass der aktuelle Status und DCM project-Definitionen synchronisiert sind.

DCM project definieren

Ein DCM project basiert auf einer Manifest-Datei und einem oder mehreren SQL-Objektdefinitionsdateien. Diese Dateien werden normalerweise in einem Git-Repository oder Ihrem lokalen Arbeitsbereich gespeichert und verwaltet.

  • Manifest-Datei

    • Gibt eine oder mehrere Zielumgebungen mit entsprechenden Kontobezeichnern, DCM project-Objekte, Eigentümerrollen für diese Objekte und optionale Vorlagenkonfigurationen an.

    • Gibt optional die Standardwerte für Vorlagen und eine oder mehrere Konfigurationen mit Werten für Vorlagenvariablen an.

  • Objektdefinitionsdateien

    • Definieren Sie eine Gruppe von Snowflake-Objekten, Berechtigungen und Erwartungen, die Sie in diesem DCM project gemeinsam verwalten möchten.

Informationen zum Einrichten eines DCM project-Ordners und der Definitionsdateien und zur Verwendung von Vorlagen zur Definition Ihres DCM project finden Sie unter Erstellen eines DCM project-Ordners zum Speichern Ihrer Definitionsdateien.

DCM project planen

Beim Planen eines DCM project wird ein Probelauf durchgeführt, um die Änderungen vor der Bereitstellung in der Vorschau anzuzeigen. Snowflake vergleicht Ihre Projektdefinitionsdateien mit vorhandenen Objekten und zeigt an, welche Objekte erstellt, geändert oder gelöscht werden. An Ihrem Konto werden keine Änderungen vorgenommen.

Verwenden Sie die Planung, um Änderungen vor der Bereitstellung eines DCM-Projekts zu überprüfen und zu validieren. Sie können Optionen wie Konfigurationen oder ein Ausgabepfad für Planergebnisse angeben.

Der PLAN imitiert die DEPLOY-Befehl so weit wie möglich, außer dass tatsächlich keine DDL-Anweisungen ausgeführt werden.

Wichtig

Führen Sie vor der Bereitstellung immer den Befehl PLAN für Ihre Projekte aus, um sicherzustellen, dass keine Fehler bei Syntax, Vorlagen, Objektabhängigkeiten, Zugriffsrechte usw. auftreten. Überprüfen Sie die Planausgabe, um Fehler zu debuggen, eine Vorschau des gerenderten Jinja mit den bereitgestellten Variablen sowie eine Vorschau der Änderungen anzuzeigen, die nach der Bereitstellung vorgenommen werden.

Der Plan führt die folgenden Schritte aus:

  1. Rendert alle Jinja-Vorlagen mit dem ausgewählten Konfigurationsprofil oder den Werten, die zur Laufzeit bereitgestellt wurden.

  2. Vergleicht alle Definitionen mit dem aktuellen Status von Entitäten, die im Rahmen der letzten Bereitstellung definiert wurden.

  3. Konvertiert alle definierten Anweisungen in CREATE-, ALTER-, DROP-, GRANT- und REVOKE-Anweisungen.

  4. Sortiert alle Anweisungen basierend auf ihren Abhängigkeiten.

  5. Kompiliert alle Anweisungen.

Bemerkung

Obwohl PLAN fast alle möglichen Fehler abfängt, die während der Bereitstellung auftreten können, garantiert dies keine erfolgreiche Bereitstellung.

Führen Sie den Befehl PLAN aus

Der Befehl PLAN benötigt die folgenden Informationen als Eingabe:

  • Der Pfad zur Manifest-Datei

    Die CLI liest das Ziel aus dem Manifest (default_target oder --target-Flag). Für SQL-Befehle müssen der Pfad zur Manifest-Datei und der Projektname angegeben werden.

  • Definierte Werte für Jinja-Variablen (optional).

  • templating_config des Ziels wählt automatisch das Konfigurationsprofil aus. Für SQL-Befehle verwenden Sie die USING CONFIGURATION-Klausel, um das Profil anzugeben.

  • Ein oder mehrere Werte des Konfigurationsprofils, die überschrieben werden sollen (optional).

Im Folgenden finden Sie Beispiele für die Ausführung des PLAN-Befehls.

Führen Sie den Befehl snow dcm plan in Ihrem lokalen IDE-Terminal oder als Teil eines Git-Workflows aus.

Beispiel für einen CLI-Befehl, um ein DCM-Projekt aus einem lokalen Verzeichnis zu planen:

cd ./Quickstarts/DCM_Project_Quickstart_1/
snow dcm plan

Beispiel für einen CLI-Befehl, um ein DCM-Projekt aus einem Snowflake-Stagingbereich oder Git-Repository-Klon zu planen:

snow dcm plan --target PROD_US --save-output

Beispiel für einen CLI-Befehl, um ein DCM-Projekt mit optionalen Argumenten zu planen:

snow dcm plan
--variable "wh_size='MEDIUM'" --variable "teams = ['TEAM_A', 'TEAM_B']"
--save-output

Variablen in doppelten Anführungszeichen mit zusätzlichen einfachen Anführungszeichen sind für Zeichenfolgenwerte erforderlich. Wertelisten erfordern eckige Klammern.

Snowflake-CLI-Befehle

Pfad zur Definitionsdatei

Sie haben die folgenden Optionen, um auf den Speicherort der Manifest- und Definitionsdateien zu verweisen.

  • Von einem Arbeitsbereichspfad

    Die Snowsight-Benutzeroberfläche listet automatisch alle DCM project-Definitionen innerhalb des aktuellen Arbeitsbereichs auf. Sie können einen dieser Pfade auswählen, und die Arbeitsbereiche werden ihn für die Ausführung von DCM-Befehlen verwenden.

    Wenn Sie SQL-Befehle in Arbeitsbereichen manuell ausführen möchten, können Sie auch in jedem Ihrer Arbeitsbereiche auf diesen Pfad verweisen.

    Tipp: Über das 3-Punkt-Menü hinter jeder Datei in Ihrem Arbeitsbereich können Sie den vollständigen Pfad zu dieser Datei in Ihren SQL-Code kopieren.

    Beispiel für einen SQL-Befehl, um ein DCM-Projekt von einem Arbeitsbereichspfad aus zu planen:

    EXECUTE DCM PROJECT DCM_PROJECT_DEV
      PLAN
      USING CONFIGURATION DEV
    FROM
      'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1'
    
  • Von einem lokalen Git-Repository-Klon auf Ihrer Festplatte

    Wählen Sie das Verzeichnis aus, das Ihre manifest.yml-Datei enthält, bevor Sie den CLI-Befehl in Ihrer lokalen IDE ausführen. Alternativ können Sie auch ein anderes lokales Verzeichnis angeben, welches das Manifest und die Definitionen enthält, die Sie verwenden möchten.

    Beispiel für einen CLI-Befehl, um ein DCM project aus dem aktuellen Verzeichnis eines lokalen Git-Repositorys zu planen:

    cd ./Quickstarts/DCM_Project_Quickstart_1/
    
    snow dcm plan
    
    snow dcm plan --target PROD
    

    Beispiel für einen CLI-Befehl, um ein DCM project aus einem anderen Verzeichnis in einem lokalen Git-Repository-Klon zu planen:

    snow dcm plan DCM_PROJECT_DEV --configuration DEV --from ./Quickstarts/DCM_Project_Quickstart_2/
    
  • Von Ihrem Remote-Repository in einem Workflow

    Dieselbe CLI-Syntax kann verwendet werden, wenn die DCM-Befehle in einem CI/CD-Workflow ausgeführt werden.

    Beispiel für einen CI/CD-Workflow, um ein DCM project von einem lokalen Git-Repository-Klon zu planen:

    steps:
      - name: Clone Repo
        uses: actions/checkout@v4
      - name: Setup SnowCLI
        uses: snowflakedb/snowflake-cli-action@v2.0
      - name: Run PLAN
        run: |
          cd ./Quickstarts/DCM_Project_Quickstart_1/
          snow dcm plan --target PROD --save-output
    
  • Von einem Stagingbereich oder Git-Repository-Klon in Snowflake

    Für den Fall, dass Sie eine Prozedur oder Aufgabe innerhalb von Snowflake ausführen möchten, die DCM-Befehle ausführt, kann dieser SQL-Befehl auf einen absoluten Pfad zu einem Snowflake-Stagingbereich oder einem Git-Repository-Klon innerhalb des Kontos verweisen.

    Bei Git-Repository-Klone sollten Sie möglichst zuerst ALTER GIT REPOSITORY FETCH ausführen, um die neueste Version zu haben.

    '@...'-Pfade können nur bei der Ausführung von DCM SQL-Befehlen verwendet werden.

    Beispiel für einen SQL-Befehl, um ein DCM-Projekt aus einem Stagingbereich oder Git-Repository-Klon in Snowflake zu planen:

    EXECUTE DCM PROJECT DCM_PROJECT_DEV
      PLAN
      USING CONFIGURATION DEV
    FROM
      '@DCM_DEMO.DEPLOY.DCM_DEMO/branches/main/Quickstarts/DCM_Project_Quickstart_1/'
    

Planausgabe

Bemerkung

Während der Vorschauphase kann sich das genaue Ausgabeformat ändern.

Die Standardausgabe des Plans enthält die folgenden Informationen zur Ausführung des Plans im JSON-Format:

version: 2
metadata:
  timestamp: <timestamp>
  query_id: <query_id>
  project_name: <project_name>
  user: <user>
  role_name: <role_name>
  command: <command>
  changes:
    - kind: <kind>
        "attribute_name": <attribute_name>,
        "value": <value>
        "changes": [
          {
            "kind": <kind>,
            "attribute_name": <attribute_name>,
            "value": <value>
          }
        ]
      }
    ]
  }
}

Eigenschaft

Beschreibung

version

Schemaversion des Ausgabeformats. Version 2 ist die neueste und einzige unterstützte Version.

metadata

Kontextinformationen zur Ausführung.

metadata.timestamp

ISO 8601-Zeitstempel, wann der Befehl ausgeführt wurde.

metadata.query_id

Eindeutiger Bezeichner der Abfrage, die diesen Plan erzeugt hat.

metadata.project_name

Vollqualifizierter Name des DCM-Projektobjekts.

metadata.user

Name des Benutzers, der den Befehl ausgeführt hat.

metadata.role_name

Aktive Rolle, die zur Ausführung des Befehls verwendet wird.

metadata.command

Der ausgeführte Befehl: PLAN oder DEPLOY.

changeset

Ein Array von Änderungseinträgen. Jeder Eintrag steht für ein Objekt, das erstellt, geändert oder gelöscht werden würde oder wurde. Ein leeres Array bedeutet, dass die Projektdefinitionen bereits mit dem Konto synchronisiert sind.

changeset[].type

Die geplante Aktion für das Objekt. Mögliche Werte: CREATE, ALTER, DROP.

changeset[].object_id

Identifiziert das Zielobjekt.

changeset[].object_id.domain

Der Snowflake-Objekttyp.

changeset[].object_id.name

Name des Objekts.

changeset[].object_id.fqn

Vollqualifizierter Name des Objekts.

changeset[].object_id.database

Datenbank, die das Objekt enthält. Wird bei Objekten auf Kontoebene weggelassen.

changeset[].object_id.schema

Schema, welches das Objekt enthält. Wird bei Objekten auf Datenbank- und Kontoebene weggelassen.

changeset[].changes

Ein Array von Änderungsdeskriptoren, die die spezifischen Attributänderungen genau angeben.

changeset[].changes[].kind

Der Typ der Änderung. Mögliche Werte: set, changed, unset, nested, collection. Der Wert von kind bestimmt die verbleibenden Schlüssel des Objekts.

changeset[].changes[].attribute_name

Name des Attributs, das festgelegt oder geändert wird. Vorhanden, wenn kind gleich set, changed oder unset.

changeset[].changes[].value

Der neue Wert für das Attribut. Vorhanden, wenn kind gleich set oder changed.

changeset[].changes[].prev_value

Der vorherige Wert des Attributs vor der Änderung. Nur vorhanden, wenn kind changed ist.

changeset[].changes[].collection_name

Name der Sammlung, die geändert wird (zum Beispiel columns, constraints, privileges, expectations). Nur vorhanden, wenn kind collection ist.

changeset[].changes[].id_label

Label, das zur Identifizierung von Elementen innerhalb der Sammlung verwendet wird (z. B.``name``). Nur für bestimmte Sammlungen vorhanden.

changeset[].changes[].changes

Ein verschachteltes Array von Deskriptoren für Sammlungselemente. Nur vorhanden, wenn kind collection ist.

changeset[].changes[].changes[].kind

Der Typ der Änderung des Sammlungselements. Mögliche Werte: added, removed, modified.

changeset[].changes[].changes[].item_id

Identifiziert das Element innerhalb der Sammlung. Kann je nach Sammlungstyp eine Zeichenfolge oder ein Objekt sein.

changeset[].changes[].changes[].changes

Ein Array weiterer Änderungsdeskriptoren für dieses Element. Vorhanden für added- und modified-Elemente. Nie vorhanden bei removed-Elementen.

Ein Beispiel für eine Planausgabe:

{
  "version": 2,
  "metadata": {
    "timestamp": <timestamp>,
    "query_id": <query_id>,
    "project_name": <project_name>,
    "user": <user>,
    "role_name": <role_name>,
    "command": <command>
  },
  "changeset": [
    {
      "type": "CREATE",
      "object_id": {
        "domain": "TABLE",
        "name": "CUSTOMER_SUMMARY",
        "fqn": "MY_DB.ANALYTICS.CUSTOMER_SUMMARY",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": [
        {
          "kind": "set",
          "attribute_name": "warehouse_size",
          "value": "XSMALL"
        },
        {
          "kind": "set",
          "attribute_name": "query",
          "value": "SELECT customer_id, SUM(amount) AS total FROM orders GROUP BY customer_id"
        }
      ]
    },
    {
      "type": "ALTER",
      "object_id": {
        "domain": "DYNAMIC_TABLE",
        "name": "ORDER_DETAILS",
        "fqn": "MY_DB.ANALYTICS.ORDER_DETAILS",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": [
        {
          "kind": "changed",
          "attribute_name": "warehouse_size",
          "value": "SMALL",
          "prev_value": "XSMALL"
        },
        {
          "kind": "collection",
          "collection_name": "columns",
          "id_label": "name",
          "changes": [
            {
              "kind": "added",
              "item_id": "DISCOUNT_AMOUNT",
              "changes": [
                {
                  "kind": "set",
                  "attribute_name": "data_type",
                  "value": "NUMBER(10,2)"
                }
              ]
            },
            {
              "kind": "modified",
              "item_id": "ORDER_STATUS",
              "changes": [
                {
                  "kind": "changed",
                  "attribute_name": "data_type",
                  "value": "VARCHAR(50)",
                  "prev_value": "VARCHAR(20)"
                }
              ]
            },
            {
              "kind": "removed",
              "item_id": "LEGACY_FLAG"
            }
          ]
        }
      ]
    },
    {
      "type": "DROP",
      "object_id": {
        "domain": "VIEW",
        "name": "OLD_REPORT_VIEW",
        "fqn": "MY_DB.ANALYTICS.OLD_REPORT_VIEW",
        "database": "MY_DB",
        "schema": "ANALYTICS"
      },
      "changes": []
    }
  ]
}

DCM project bereitstellen

Wenn Sie ein DCM project bereitstellen, werden die folgenden Aktionen ausgeführt:

  • Objekte, die definiert sind, aber noch nicht existieren, werden erstellt.

  • Objekte, die bereits existieren, sich aber von der aktuellen Definition unterscheiden, werden geändert.

  • Objekte, die bereits wie definiert existieren, werden übersprungen.

  • Objekte, die bereits existieren, aber nicht mehr definiert sind, werden gelöscht.

Das gleiche Verhalten gilt für Zuweisungen und damit verbundene Datenqualitätserwartungen, die im Projekt definiert sind.

Wichtig

Um einen unbeabsichtigten Datenverlust zu vermeiden, sollten Sie immer PLAN ausführen und die Ausgabe überprüfen, bevor Sie DEPLOY ausführen.

Für jedes DCM project kann immer nur eine Instanz bereitgestellt werden. Es können nicht mehrere Konfigurationsprofile nebeneinander existieren. Wenn Sie Konfiguration B mit demselben DCM project bereitstellen, werden alle Objekte aus anderen früheren Konfigurationen gelöscht, die nicht in B definiert sind.

Erstellen Sie ein DCM project für jede Zielumgebung. Das DCM project für jede Umgebung kann dann auf die gleichen Definitionsdateien verweisen, wird aber unabhängig mit unterschiedlichen Werten für jede Variable bereitgestellt, wie suffix => 'DEV_JS', sodass sie unabhängig voneinander im selben Snowflake-Konto existieren können.

Sie können die Werte für ausgewählte Variablen zur Laufzeit überschreiben, wenn Sie ein vordefiniertes Profil mit einer geringfügigen Abweichung verwenden möchten.

Beispiel:

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY
  USING CONFIGURATION DEV (suffix=>'DEV_USER', user=>'JANEDOE')
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/DCM_Project_Quickstart_1';
snow dcm deploy DCM_PROJECT_DEV --configuration DEV --variable "suffix='DEV_USER'" --variable "user='JANEDOE'"

Jeder Bereitstellungsversuch (erfolgreich, fehlgeschlagen oder abgebrochen) hat eine Bereitstellungsnummer, zum Beispiel DEPLOYMENT$1. Optional können Sie eine eindeutige Zeichenfolge als Alias für die Bereitstellung angeben, um einzelne Bereitstellungen zu benennen, für bessere Beobachtbarkeit im Bereitstellungsverlauf. Betrachten Sie den Bereitstellungs-Alias wie eine Commit-Meldung für Ihre Codeänderung.

Jeder DEPLOY-Befehl führt zuerst einen internen PRE-PLAN als Teil der Bereitstellung aus. Wenn der PRE-PLAN erfolgreich ist, wird DEPLOY direkt danach ausgeführt. Es gibt keine Option, um diesen internen Planschritt abzufangen oder zu überprüfen. PRE-PLAN wird ausgeführt, um das Risiko eines Fehlers während der Bereitstellung weiter zu verringern. Wenn ein DEPLOY fehlschlägt, können Sie in der Fehlermeldung sehen, ob es während PRE-PLAN oder im Schritt DEPLOY fehlgeschlagen ist. Fehler während des Schritts PRE-PLAN sind ähnlich wie bei PLAN – es wird keine DDL-Änderung ausgeführt.

Wichtig

Fehler während des Schritts DEPLOY können zu einer teilweisen Ausführung der definierten Änderungen führen. Dies kann möglicherweise dazu führen, dass sich einige der verwalteten Objekte in einem undefinierten Zustand befinden. In den meisten Fällen wird der definierte Zielzustand wieder hergestellt, wenn Sie die Ursache beheben und DEPLOY erneut ausführen.

Der Zielpfad für die DEPLOY-Ausgabedatei kann nicht angepasst werden. Bereitstellungsartefakte werden immer im DCM project gespeichert.

Führen Sie den Befehl DEPLOY aus

Um den DEPLOY-Befehl auszuführen, stellen Sie die folgenden Eingaben bereit:

  • Der Pfad zur Manifest-Datei.

  • Ein Konfigurationsprofil muss benannt werden, wenn im Manifest Konfigurationsprofile definiert sind.

  • Optional können Werte für das Konfigurationsprofil die Standardwerte überschreiben.

  • Optional ein Bereitstellungs-Alias.

Im Folgenden finden Sie Beispiele für die Ausführung des DEPLOY-Befehls.

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1';

Beispiel für einen SQL-Befehl, um ein DCM project bereitzustellen, wenn Sie Jinja mit Konfigurationsprofilen verwenden, aber wh_size und teams überschreiben:

EXECUTE DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  DEPLOY AS "testing 2 teams"
  USING CONFIGURATION DEV (wh_size => 'MEDIUM', teams => ['TEAM_A', 'TEAM_B'])
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/live/Quickstarts/DCM_Project_Quickstart_1';

Unter Planausgabe finden Sie die Standardausgabestruktur des Plans.

DCM project verwalten

Anzeigen aller von einem DCM project verwalteten Objekte

Mit dem Befehl SHOW ENTITIES IN DCM PROJECT können Sie eine Liste aller Snowflake-Objekte anzeigen, die derzeit von einem bestimmten DCM project verwaltet werden. Dies bietet eine Liste mit vollqualifizierten Namen für alle Objekte. Um die Ergebnisse zu sehen, benötigen Sie die READ-Berechtigung für das DCM project und Anzeigeberechtigungen für das verwaltete Objekt selbst.

Bemerkung

Das Ergebnis stimmt nicht unbedingt mit den Objekten der letzten Bereitstellung überein. Objekte, die manuell gelöscht oder vom Projekt getrennt wurden, werden im Ergebnis nicht aufgelistet.

Sie können LIKE verwenden, um nach Namen zu suchen, oder verwenden Sie einen Flow-Operator, um das Resultset weiter zu verarbeiten oder zu filtern.

Ebenso können Sie SHOW GRANTS und SHOW FUTURE GRANTS anzeigen, die definiert sind und mit diesem Projekt bereitgestellt werden.

Beispiele, um alle Objekte anzuzeigen, die derzeit von einem DCM project verwaltet werden:

SHOW ENTITIES LIKE '%DASHBOARD%' IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

SHOW ENTITIES IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV
  ->> SELECT * FROM $1 WHERE "object_type" = 'DYNAMIC_TABLE';

SHOW [FUTURE] GRANTS IN DCM PROJECT DCM_DEMO.PROJECTS.DCM_PROJECT_DEV;

Objekte von einem DCM project trennen

Verwenden Sie den Befehl ALTER <Objekt> mit der Klausel UNSET DCM PROJECT, um ein Objekt zu trennen, das bereitgestellt wurde und nun von einem DCM project verwaltet wird. Der Befehl entfernt die Zuordnung zwischen dem Objekt und dem DCM project, ohne das Objekt zu löschen. Sie können diesen Befehl verwenden, wenn Sie die Verwaltung eines Objekts durch ein anderes DCM project starten möchten.

Stellen Sie sicher, dass Sie die zugehörige DEFINE-Anweisung aus Ihren Projektdefinitionsdateien entfernen, bevor Sie sie erneut bereitstellen. Andernfalls wird das Objekt wieder in das DCM project integriert.

Beispiel für einen SQL-Befehl zum Trennen eines Objekts von einem DCM project:

ALTER TABLE MY_DB.MY_SCH.MY_TABLE
  UNSET DCM PROJECT;

Sie können gewährte Berechtigungen oder Erwartungen nicht von einem DCM-Projekt trennen.

DCM project löschen

Wenn ein DCM project-Objekt gelöscht wird, bleiben alle verwalteten Entitäten, Berechtigungen und Erwartungen als „nicht verwaltet“ bestehen.

Wichtig

Löschen oder Ersetzen eines DCM project-Objekts führt dazu, dass Sie alle Artefakte des Bereitstellungsverlaufs verlieren, die das Objekt enthält.

DROP DCM PROJECT [IF EXISTS] <my_project>;

DCM project-Bereitstellung automatisieren

Best Practices für CI/CD

Befolgen Sie diese Vorgehensweisen, wenn Sie Bereitstellungen mit CI/CD-Pipelines automatisieren:

  • Ein DCM project, das auf eine nicht produktive Umgebung abzielt, sollte einer anderen Rolle gehören als ihr Gegenstück in der Produktion, um versehentliche Bereitstellungen in der Produktion zu vermeiden.

  • Ein DCM project, das auf eine Produktionsumgebung abzielt, sollte einer speziellen Rolle für Produktionsbereitstellungen mit speziell zugeschnittenen Zugriffsrechten gehören, die gerade ausreichen, um alle Objekte im Projekt bereitzustellen.

    • Vermeiden Sie die Verwendung allgemeiner Administratorrollen für DCM project-Eigentümerschaft. Weisen Sie solche Rollen nur Service-Benutzern zu, nicht einzelnen Entwicklern.

    • Weisen Sie die dedizierte Rolle für die Produktionsbereitstellung nur Service-Benutzern zu, nicht einzelnen Entwicklern.

    • Beschränken Sie die Eigentümerschaft auf die Bereitstellungsrolle für die Produktion, um die Unveränderlichkeit der kritischen Infrastruktur oder der Datenprodukte sicherzustellen.

      Wenn die dedizierte Rolle für die Bereitstellung der Produktion anderen Rollen die Eigentümerschaft an Produktionsobjekten gewährt, können Benutzer, denen diese Rollen zugewiesen wurden, die Produktionsobjekte weiterhin ändern oder löschen.

Beispiele für GitHub-Aktionen

Dieser Abschnitt enthält Beispiele für GitHub-Aktions-Workflows, die typische CI/CD-Muster für DCM Projects veranschaulichen. Die gleichen Konzepte gelten auch für andere Git-basierte Plattformen wie Azure DevOps, GitLab CI/CD oder Bitbucket-Pipelines – nur die Workflow-Syntax unterscheidet sich.

Jedes Beispiel enthält Bausteine, die Sie auf der Grundlage Ihrer Pipeline-Einrichtung, der Umgebungstopologie und der Anforderungen der Organisation anpassen und kombinieren können.

Die Beispiel-Workflows demonstrieren die folgenden Muster, die auf jedes DCM CI/CD-Setup anwendbar sind:

  • Manifest-gesteuerte Konfiguration Jeder Workflow liest account_identifier, project_owner und project_name aus den Manifest-Zielen. Dadurch bleibt die Umgebungskonfiguration an einem Ort gespeichert und es wird vermieden, dass sie über GitHub-Geheimnisse hinweg dupliziert wird.

  • Schutz vor Datenlöschung Der Bereitstellungs-Workflow analysiert plan_result.json auf destruktive DROP-Operationen für Objekte, die Daten enthalten, wie Datenbanken, Schemas, Tabellen und Stagingbereiche, und blockiert die Bereitstellung, wenn welche gefunden werden.

  • Sequenzielle Heraufstufung vom Stagingbereich zur Produktion Die Bereitstellung der Produktion beginnt erst, nachdem die Bereitstellung des Stagingbereichs erfolgreich war, die dynamischen Tabellen aktualisiert wurden und die Datenqualitätstest bestanden wurden.

  • Parsen der strukturierten Planausgabe Workflows verwenden jq, um die Anzahl der Operationen und Objektdomänen aus plan_result.json zu extrahieren, was das Erstellen kundenspezifischer Zusammenfassungen und Prüfungen vereinfacht.

  • AI-gestützte Zusammenfassungen snow cortex complete generiert Zusammenfassungen der Ergebnisse des Post-Hook-Skripts und die Aktualisierungsausgabe der dynamischen Tabelle für die GitHub-Aktions-Jobzusammenfassung in natürlicher Sprache.

Bevor Sie diese Beispiel-Workflows ausführen, müssen die folgenden Voraussetzungen erfüllt sein:

  • Speichern Sie die DCM project-Dateien in einem Git-Repository.

  • Erteilen Sie Benutzerberechtigungen zum Erstellen und Ausführen von GitHub-Aktionen.

  • Konfigurieren Sie GitHub-Geheimnisse für die Anmeldeinformationen des Snowflake Service-Benutzers (SNOWFLAKE_USER, SNOWFLAKE_PASSWORD oder ein persönliches Zugriffstoken).

  • Konfigurieren Sie GitHub-Variablen für den Pfad zum DCM project-Ordner (DCM_PROJECT_PATH).

  • Konfigurieren Sie GitHub-Umgebungen für jedes Manifest-Ziel (z. B. DCM_STAGE, DCM_PROD_US).

Hinweise zum Einrichten einer Snowflake-Verbindung in GitHub-Aktionen finden Sie in der ersten Hälfte des Blogeintrags: `Ein praktischer Leitfaden zu GitHub-Aktionen CI/CD<https://medium.com/@uche.nkadi/automate-your-dbt-project-on-snowflake-a-practical-guide-to-github-actions-ci-cd-a366b6e061e5>`_.

Im `snowflake-labs DCM -Repository<https://github.com/Snowflake-Labs/snowflake_dcm_projects/GitHub_workflows>`_ finden Sie einige GitHub-Aktions-Workflows, die den gesamten CI/CD-Lebenszyklus für DCM Projects abdecken.

Alle Beispiel-Workflows lesen die Snowflake account_identifier- und``project_owner``-Rolle direkt aus den Manifest-Zielen mit yq, sodass die umgebungsspezifische Konfiguration in der versionskontrollierten manifest.yml und nicht in duplizierten GitHub-Geheimnissen existiert. Nur die Anmeldeinformationen des Service-Benutzers werden als Geheimnisse gespeichert.

Beispiel-Workflow: Verbindungen und Berechtigungen überprüfen

Dieser Workflow überprüft, ob sich der GitHub Aktions-Service-Benutzer mit jeder im Manifest definierten Zielumgebung verbinden kann. Verwenden Sie dies, wenn Sie ein neues Repository einrichten, ein neues Konto einrichten oder Authentifizierungsprobleme debuggen. Der Workflow führt die folgenden Schritte aus:

  • Analysiert dynamisch alle Zielnamen aus manifest.yml.

  • Verwendet eine GitHub-Aktionsmatrix-Strategie, um jedes Ziel parallel zu testen.

  • Überprüft für jedes Ziel die Snowflake-Verbindung, meldet das verbundene Konto, den Benutzer und die Rolle und prüft, ob die verbundene Rolle mit dem DCM project-Eigentümer übereinstimmt.

  • Berichtet, ob das DCM project-Objekt bereits existiert und ob der Dienstbenutzer über Bereitstellungsberechtigungen verfügt.

Beispiel-Workflow: Vorschau von Änderungen bei Pull-Anfrage

  • Workflow-Konfigurationsdatei: DCM_1_Test_PR_to_main.yml

  • Trigger: Pull-Anfrage für main-Zweig geöffnet, synchronisiert oder wieder geöffnet

Dieser Workflow führt einen PLAN sowohl für das Staging- als auch für das Produktionsziel als Integrationstest für jede Pull-Anfrage aus. Er liefert den Prüfern eine Zusammenfassung der geplanten Änderungen direkt auf der Pull-Anfrage. Der Workflow führt die folgenden Schritte aus:

  • Führt snow dcm plan für die STAGE- und PROD-Ziele parallel aus.

  • Analysiert plan_result.json, um CREATE-, ALTER- und DROP-Operationen zusammenzufassen, gruppiert nach Objektdomäne.

  • Lädt Planartefakte zur späteren Überprüfung hoch.

  • Postet einen konsolidierten Kommentar an die Pull-Anfrage mit der Planzusammenfassung für beide Umgebungen.

  • Die Prüfung schlägt fehl, wenn ein PLAN fehlschlägt und die Zusammenführung blockiert.

Beispiel-Workflow: Änderungen in Staging und Produktion bereitstellen

Dieser Workflow implementiert eine sequenzielle Heraufstufungs-Pipeline. Änderungen werden zuerst im Stagingbereich bereitgestellt, durchgängig validiert und erst dann in die Produktion übernommen. Wenn ein Stage fehlschlägt, wird die Pipeline angehalten, ohne dass die Produktion beeinflusst wird.

Sequenz der Staging-Bereitstellung:

  1. Plan: Führt snow dcm plan aus und fasst das Changeset zusammen.

  2. Erkennung von Datenlöschungen: Analysiert die Planausgabe und blockiert die Pipeline, wenn sie DROP-Operationen für Datenbanken, Schemas, Tabellen oder Stagingbereiche enthält.

  3. Bereitstellung: Führt snow dcm deploy aus.

  4. Post-Skripte: Führt optional SQL Post-Hook-Skripte mit Jinja-Variableneinschleusung unter Verwendung von snow sql aus.

  5. Dynamische Tabellen aktualisieren: Führt snow dcm refresh aus, um eine neue Transformationslogik anzuwenden.

  6. Testerwartungen: Führt snow dcm test aus, um die Erwartungen an die Datenqualität zu überprüfen.

Sequenz der Bereitstellung in der Produktion:

Die gleichen sechs Schritte werden für das Produktionsziel wiederholt, aber erst, wenn alle Staging-Jobs bestanden wurden.

Nachdem alle Jobs abgeschlossen sind, veröffentlicht der Workflow eine endgültige Statuszusammenfassung für die ursprüngliche Pull-Anfrage.

Bemerkung

Der Bereitstellungs-Workflow verwendet snow cortex complete, um von Menschen lesbare Zusammenfassungen für Post-Hook-Skriptergebnisse und die Aktualisierungsausgabe von dynamischen Tabellen in GitHub-Aktions-Jobzusammenfassungen zu generieren.

Beispiel-Workflow: Testen der Erwartungen im Stagingbereich

Dieser Workflow bietet eine bedarfsgesteuerte Möglichkeit, die Datenqualität in der Stagingumgebung zu überprüfen, ohne eine vollständige Bereitstellung auszulösen. Verwenden Sie ihn, um die Erwartungen nach manuellen Datenänderungen oder vorgelagerten Datenaktualisierungen zu überprüfen, oder als regelmäßige Qualitätsprüfung. Der Workflow führt die folgenden Schritte aus:

  • Aktualisiert alle dynamischen Tabellen, die vom Staging-DCM project verwaltet werden.

  • Führt alle Datenqualitätserwartungstests aus, die mit Tabellen, dynamischen Tabellen und Ansichten im Projekt verbunden sind.

  • Berichtet, wer den Status bestanden oder nicht bestanden hat, mit Details zu den nicht erfüllten Erwartungen.

Häufig gestellte Fragen (FAQ)

Wie kann ich ein vorhandenes Objekt umbenennen?
  1. Führen Sie einen ALTER-Befehl außerhalb des DCM-Projekts aus.

  2. Ändern Sie die Definition.

  3. Führen Sie einen PLAN aus, um zu überprüfen, ob die neue Definition mit dem neuen Status übereinstimmt (keine Änderung in PLAN).

  4. Führen Sie DEPLOY aus, um den neuen Status zu speichern.

Wie stelle ich Objekte bereit, die noch nicht von DEFINE-Anweisungen unterstützt werden?

Sie können CREATE IF NOT EXISTS oder CREATE OR REPLACE-Anweisungen in einem separaten SQL-Skript nach der Ausführung Ihres DCM-Projektplans oder der Bereitstellung ausführen.

Beide Optionen unterstützen Jinja2-Vorlagen und Testläufe (Testlauf rendert die Jinja-Vorlage, überprüft aber nicht eine erfolgreiche SQL-Kompilierung).

Beispiel:

EXECUTE DCM PROJECT my_project
  PLAN ...
USING ...
FROM ...

EXECUTE IMMEDIATE
FROM
  'snow://workspace/USER$.PUBLIC.DEFAULT$/versions/head/DCM_Project_Quickstart_1/hooks/post_hook.sql'
  USING (db => 'DEV')
  dry_run = TRUE      -- shows the rendered Jinja but does not verify successful compilation
;