DCM Projects-Dateien und -Vorlagen¶
Ein|dcm-object| erfordert eine Manifestdatei und eine oder mehrere SQL Objektdefinitionsdateien. Diese Dateien werden normalerweise in einem Git-Repository oder Ihrem lokalen Arbeitsbereich gespeichert und verwaltet.
Manifest-Datei
Gibt an, welche Dateien mit Objektdefinitionen eingebunden werden sollen.
Definiert Konfigurationen für verschiedene Umgebungen mit Variablen der Vorlage.
Objektdefinitionsdateien
Definieren Sie eine Gruppe von Snowflake-Objekten, die Sie zusammen in DCM project verwalten möchten.
Der allgemeine Workflow zum Erstellen von DCM project-Dateien ist:
Erstellen eines DCM project-Ordners zum Speichern Ihrer Definitionsdateien¶
Für ein neues DCM project erstellen Sie einen Ordner zum Speichern Ihrer Manifest-Datei (manifest.yml) und SQL Objektdefinitionsdateien.
Der Befehl snow init mit der DCM_PROJECT-Vorlage erstellt Beispieldefinitionsdateien in Ihrem Projektverzeichnis. Sie können diese Dateien öffnen und bearbeiten, um Ihr DCM project zu definieren.
DCM Projects folgen der standardisierten Ordnerstruktur:
DCM Projects-Objektdefinitionsdateien müssen unter
sources/definitions/platziert werden.Die optionalen globalen Makrodateien können unter
sources/macros/platziert werden.Die Benennung und Verschachtelung von Dateien innerhalb dieser Projektverzeichnisse ist flexibel.
Gespeicherte Ausgabeartefakte von DCM-Befehlen werden immer in
out/geschrieben.Wenn Sie zusätzliche Skripte oder Projektdateien haben, die Sie für DCM-Befehle verwenden möchten, können Sie diese unter
sourceshinzufügen (z. B. dbt-Projektdateien).Wenn Sie andere benutzerdefinierte Skripte haben, die Sie im Projektordner speichern möchten und die nicht von DCM Projects-Befehlen verwendet und nicht lokal hochgeladen werden sollen, fügen Sie diese in einem Ordner außerhalb der
sources-Ordner hinzu.Die CLI-Befehle laden nur Dateien innerhalb der
sources-Ordner hoch.
Bemerkung
Wenn Sie Git verwenden, fügen Sie out/ zu Ihrer .gitignore-Datei hinzu, um zu vermeiden, dass lokale Ausgabedateien an Git übertragen werden.
Beispiel für eine DCM project-Ordnerstruktur:
Manifest-Datei erstellen¶
Jedes DCM project erfordert eine manifest.yml-Datei. Sie enthält die wesentlichen Konfigurationsdetails des Projekts und ermöglicht es, den Projektordner als DCM project zu identifizieren.
Verwenden Sie die Manifest-Datei, um zu steuern, welche DCM project-Objekte und -Rollen bei der Bereitstellung in verschiedenen Zielumgebungen verwendet werden sollen und um Gruppen von Vorlagenwerten zu verwalten.
Die Manifest-Datei ist eine YAML-Datei, die die folgenden Eigenschaften enthält:
Eigenschaft |
Erforderlich |
Beschreibung |
|---|---|---|
|
Erforderlich |
Version des Manifest-Schemas. Die aktuelle Version ist 2. |
|
Erforderlich |
Typ des Projekts. Auf |
|
Optional |
Wenn Sie mehr als ein Ziel haben, geben Sie das Standardziel an. Die Snowflake CLI und Arbeitsbereiche verwenden das Standardziel, wenn Sie kein Ziel über ein |
|
Erforderlich |
Im Abschnitt |
|
Optional |
Im Abschnitt |
Projektziele¶
Jedes Ziel in der Manifest-Datei enthält die folgenden Eigenschaften:
Eigenschaft |
Beschreibung |
|---|---|
|
Der Bezeichner des Snowflake-Kontos für dieses Ziel. |
|
Der vollqualifizierte Name des DCM project-Objekts, z. B. Verwenden Sie den SQL-Befehl SHOW DCM PROJECTS, um ihn zu finden. |
|
Die Rolle mit OWNERSHIP für dieses Projektobjekt. Verwenden Sie den SQL-Befehl SHOW DCM PROJECTS oder DESCRIBE DCM PROJECT, um ihn zu finden. |
|
Der Name der im Abschnitt |
Projektdefinitionen und Projektobjekten zuordnen¶
DCM Projects-Definitionsdateien sind nicht streng an ein bestimmtes DCM project-Objekt gebunden. Sie können denselben Satz von Definitionen für die Bereitstellung in mehreren Projekten verwenden, entweder in verschiedenen Snowflake-Konten oder indem Sie auf verschiedene Konfigurationsprofile verweisen. Zum Beispiel können dieselben Definitionsdateien in einem Repository-Zweig in DEV- und PROD-Konten bereitgestellt werden, wie in der folgenden Abbildung gezeigt.
Auf ähnliche Weise können Sie ein DCM Projects-Objekt ausführen, indem Sie auf Definitionsdateien aus verschiedenen Pfaden verweisen. Zum Beispiel kann IhreCI/CD-Automatisierung Definitionen aus Ihrem Hauptzweig bereitstellen, und Sie können einen PLAN aus Ihren lokalen Definitionsdateien für dasselbe Projekt manuell ausführen, um zu prüfen, wie sich Ihre Definitionen von der letzten Bereitstellung unterscheiden. Sie können diesen Ansatz auch für manuelle Ad-hoc-Bereitstellungen von anderen Zweigen oder lokalen Pfaden verwenden.
Konfiguration von Projektvorlagen¶
Im Folgenden sehen Sie die allgemeine Struktur der Vorlagenkonfiguration in der Manifest-Datei. Sie können entweder nur defaults oder nur configurations oder beides einstellen.
Eigenschaft |
Beschreibung |
|---|---|
|
Die Werte der gemeinsam genutzten Variablen in Schlüssel-Wert-Paaren, die für alle Konfigurationen gelten, um Wiederholungen zu vermeiden. |
|
Die für das Projekt zu verwendenden Vorlagenkonfigurationen. Einzelne Konfigurationen können Standardwerte mit konfigurationsspezifischen Werten überschreiben. Weitere Informationen dazu, wie Variablen aufgelöst werden, finden Sie unter :ref:` Konfigurationen<label-dcm_projects_configurations>`. |
|
Der Name der Vorlagenkonfiguration. Bei Konfigurationsnamen wird Groß-/Kleinschreibung nicht berücksichtigt. |
|
Der Name der Variablen. Variablennamen sollten den ` Regeln für die Benennung von Python-Variablen<https://www.w3schools.com/python/python_variables_names.asp>`_ folgen. Alle Variablen in Projektdefinitionen müssen entweder in den Standardeinstellungen, in der ausgewählten Konfiguration oder zur Laufzeit deklariert werden. Wenn Sie möchten, dass Zeichenfolgenvariablen leer aufgelöst werden, geben Sie diese als |
|
Der Wert der Variablen. Werte können Zeichenfolgen, Zahlen, Boolesche Werte, Listen oder Wörterbücher sein. Wörterbücher können im Manifest definiert, aber zur Laufzeit nicht überschrieben werden. |
Beispiel: manifest.yml¶
Dies ist ein Beispiel für eine DCM project-Manifest-Datei (manifest.yml), die drei Konfigurationen enthält: DEV, STAGE und PROD mit Vorlagenvariablen und deren Standardwerten:
Erstellen von Objektdefinitionsdateien¶
Eine DCM project-Definitionsdatei ist eine Vorlage, die in gültige SQL-Anweisungen zum Verwalten von Snowflake-Objekten aufgelöst wird. Jedes DCM project erfordert mindestens eine Definitionsdatei.
Sie können Ihre Objektdefinitionen und Berechtigungen über mehrere Dateien und Ordner hinweg organisieren. Snowflake empfiehlt, eine Struktur zu wählen, die die Geschäftslogik des Projekts repräsentiert (z. B. Bronze, Silber und Gold), anstatt nach Objekttyp zu gruppieren.
Definitionsdateien können nur DEFINE-,GRANT- oder ATTACH-Anweisungen enthalten. Andere SQL-Befehle werden nicht unterstützt.
Für einen schnellen Einstieg in die Arbeit mit DCM Projects können Sie Ihre bestehenden SQL-Bereitstellungsskripte mithilfe des DEFINE-Schlüsselworts für Ihre bestehende DDLs (für unterstützte Objekttypen) konvertieren.
Die DEFINE-Anweisung funktioniert wie der CREATE OR ALTER <objekt>-Befehl, jedoch mit den folgenden wesentlichen Unterschieden:
Die Reihenfolge und der Speicherort von DEFINE-Anweisungen spielt keine Rolle. Snowflake sammelt und sortiert während der Ausführung des Projekts alle Anweisungen aus allen Definitionsdateien.
Wenn Sie eine DEFINE-Anweisung entfernen, löscht Snowflake das entsprechende Objekt, wenn Sie das Projekt das nächste Mal bereitstellen.
Es wird nur eine Teilmenge von Snowflake-Objekten unterstützt. Weitere Details dazu finden Sie unter Unterstützte Objekttypen in DCM Projects.
Alle Objekte müssen mit einem vollqualifizierten Namen im Format
database.schema.object_namedefiniert werden.
Definitionsdateien können verschiedene Jinja2-Vorlagenoptionen und erweiterte Vorlagen-Features enthalten, mit denen Sie Folgendes tun können:
Passen Sie Dateiinhalte zur Laufzeit mithilfe von Vorlagenvariablen an.
Verwenden Sie die Jinja2-Syntax für Logik wie Schleifen und Bedingungen.
Machen Sie Definitionsdateien für verschiedene Szenarios wiederverwendbar und anpassbar.
Vorlagen für die Objektdefinition¶
DCM Projects unterstützen das Jinja2-Framework für Vorlagen von SQL-Anweisungen. Sie können Variablen deklarieren und Werte mit der Jinja2-Syntax entweder von Konfigurationsprofilen aus, im Befehl EXECUTE DCM PROJECT oder innerhalb von Jinja zuordnen. Sie können Schleifen auch durch Wertelisten, Groß-/Kleinschreibungsanweisungen, wiederverwendbare Funktionen und mehr konstruieren. Weitere Informationen dazu finden Sie in der `Jinja2-Dokumentation<https://jinja.palletsprojects.com/en/stable/>`_.
Zu den unterstützten Jinja2-Funktionen gehören:
Zeichenfolgen-Ersetzungen
Listen
Wörterbücher und verschachtelte Wörterbücher
Bedingungen (IF-Anweisungen)
Schleifen
Globale und dateibasierte Makros
Im Ordner
sources/macrosdefinierte Makros können für alle Definitionsdateien verwendet werden.Makros, die in einer Datei definiert sind, können innerhalb der Datei verwendet werden.
Zu den nicht unterstützten Jinja2-Funktionen gehören:
Bemerkung
Der _Snow-Bezeichner ist für die zukünftige Verwendung reserviert und kann nicht als Variablen- oder Makroname verwendet werden
Wichtig
Verwenden Sie keine DCM Projects-Vorlagenvariablen für Objektdefinitionen, die sensible Informationen oder Anmeldeinformationen enthalten. Die gerenderten SQL-Definitionen blenden keine Werte aus, die durch Umgebungsvariablen eingefügt wurden.
Ebenso sollten Sie keine personenbezogenen Daten, sensiblen Daten, exportkontrollierten Daten oder andere regulierte Daten als Metadaten eingeben, z. B. Dateinamen, Konfigurations- und Variablennamen, wenn Sie den Snowflake-Dienst nutzen. Weitere Informationen dazu finden Sie unter `Metadatenfelder in Snowflake<https://docs.snowflake.com/en/sql-reference/metadata>`_.
Nachfolgend sehen Sie ein Beispiel einer DCM project-Definitionsdatei, die Jinja2-Vorlagen verwendet:
Das folgende Beispiel zeigt eine DCM project-Manifest-Datei (manifest.yml), die zwei Konfigurationen definiert: DEV und PROD.
Rendern dieser Warehouse-Definition mit der DEV-Konfiguration (wird automatisch über die templating_config des Ziels oder zur Laufzeit ausgewählt) wird aufgelöst in:
Makros¶
Makrodateien sind beliebigeSQL-Dateien, die sich im Ordner macros und seinen Unterordnern befinden. Sie können nur Makros enthalten.
Beispiel für die Verzeichnisstruktur eines DCM project mit Makrodateien ist:
Ähnlich wie bei Funktionen in regulären Programmiersprachen helfen Makros dabei, häufig verwendete Codeelemente in wiederverwendbaren Funktionen zu organisieren, um so Wiederholungen zu vermeiden und das DRY-Prinzip (nicht sich selbst wiederholen) zu befolgen. Makros in DCM Projects funktionieren auf die gleiche Weise wie `Jinja2-Makros<https://jinja.palletsprojects.com/en/stable/templates/#macros>`_ mit den folgenden Ausnahmen:
Dedizierter Speicherort für Makrodateien im Ordner
macros.Makros, die in Makrodateien definiert sind, sind automatisch auch in anderen Quelldateien sichtbar. Das Jinja-Tag `import<https://jinja.palletsprojects.com/en/stable/templates/#import>`_ ist nicht zulässig.
Doppelte Definition eines Makros mit demselben Namen wird erkannt und abgelehnt.
Automatischer Import von globalen Makros¶
Während des Renderns der Definitionsdatei werden die Quelldateien auf mögliche Makroaufrufe durchsucht. Wenn ein aufgerufenes Makro in einer Makrodatei definiert ist, wird das implizite ` […] Import-Tag<https://jinja.palletsprojects.com/en/stable/templates/#import>`_ automatisch hinzugefügt, sodass kein expliziter Import erforderlich ist.
Ähnlich wie bei `Jinja2-Makros<https://jinja.palletsprojects.com/en/stable/templates/#macros>`_ können Sie ein lokales Makro definieren, indem Sie ihm einen Unterstrich voranstellen. Ein lokales Makro kann nur in der Datei verwendet werden, in der es deklariert ist, und ist für andere Dateien nicht sichtbar.
Kommentare zur Vorlage¶
In SQL-Befehlen können Sie -- vor Ihrem Code hinzufügen, um die Zeile auszukommentieren. Jinja verarbeitet weiterhin Variablen innerhalb des SQL-Codes, lässt aber die SQL-Kommentare aus.
Beispielsweise der folgende Jinja-Code:
Wird gerendert als:
Auskommentierte Befehle werden in SQL nicht ausgeführt. Sie können Kommentare zu Vorlagen verwenden, um Jinja-Vorlagen zu debuggen, ohne Ihren SQL-Code zu beeinträchtigen.
Um Jinja-Code beim Rendern zu ignorieren, fügen Sie # innerhalb von öffnenden und schließenden Klammern hinzu, wie im folgenden Beispiel gezeigt:
Konfigurationen¶
Wenn Sie Vorlagen in Ihren Objektdefinitionen verwenden, haben Sie die folgenden Optionen:
Weisen Sie Variablen zur Laufzeit Werte zu.
Definieren Sie verschiedene Konfigurationsprofile unter
templating: configurations:in dermanifest.yml. Jedes Ziel kann übertemplating_configauf eine Konfiguration verweisen. Weitere Details dazu finden Sie unter Konfiguration von Projektvorlagen.Wenn Konfigurationsprofile definiert sind und ein Ziel eines über
templating_configreferenziert, wird die Konfiguration automatisch angewendet, wenn Sie dieses Ziel verwenden. Weitere Beispiele finden Sie unter DCM project planen.Der primäre Anwendungsfall für Konfigurationsprofile in DCM Projects sollte auf verschiedene Umgebungen abzielen. Mit Konfigurationsprofilen können Sie Folgendes tun:
Stellen Sie denselben Code in mehreren Umgebungen bereit.
Testen Sie den Produktionscode in einer Nicht-Produktions-Umgebung in reduziertem Umfang.
Verwalten mehrerer isolierter Umgebungen im selben Konto
Nicht alle Vorlagenkonfigurationen müssen von einem Zielprofil referenziert werden. Sie können nicht verwendete Konfigurationen behalten, um die Vorlagenkonfiguration für Ihr Ziel zu wechseln.
Definieren Sie gemeinsame Standardwerte unter
templating: defaults:, um die Wiederholung allgemeiner Variablen in verschiedenen Konfigurationen zu vermeiden. Weitere Details dazu finden Sie unter Konfiguration von Projektvorlagen.Überschreiben Sie bestimmte Variablen mit Einmalwerten zur Laufzeit unter Verwendung des
--variable-Flag in der CLI.
Variablen werden mit einer dreistufigen Hierarchie aufgelöst: Globale Standardwerte < Konfigurationsvariablen < Laufzeit-Ausführungsvariablen.
Wörterbücher¶
DCM Projects-Vorlagen unterstützen Wörterbücher als Variablenwerte und ermöglichen so eine strukturierte Konfiguration für komplexe Bereitstellungen mit mehreren Mandanten oder mehreren Ressourcen.
Durch Gruppieren zusammengehöriger Konfigurationsdetails in Wörterbüchern erhalten Sie Folgendes:
Granulare Kontrolle: Wenden Sie bestimmte Einstellungen, wie z. B. Warehouse-Größen, Aufbewahrungsrichtlinien und Berechtigungen, auf einzelne Ressourcen an, ohne für jede Variante eine eigene Logik zu schreiben.
Saubere Code-Basis: Ersetzen Sie sich wiederholende, fest codierte Skripte durch dynamische Schleifen, die sich je nach Konfiguration anpassen.
Skalierbarkeit: Richten Sie neue Teams oder Ressourcen ein, indem Sie Einträge zu Ihrer Konfiguration hinzufügen, anstatt die Bereitstellungspipelines umzustrukturieren.
Bemerkung
Wörterbücher können im Manifest definiert, aber zur Laufzeit nicht mit dem --variable-Flag oder SQL``USING CONFIGURATION (…)`` überschrieben werden. Nur skalare Werte und Listen können zur Laufzeit überschrieben werden.
Beispiel für die Anwendung eines Wörterbuchs: Bereitstellung in einer Umgebung mit mehreren Mandanten¶
Stellen Sie sich eine Plattform vor, die von mehreren Abteilungen gemeinsam genutzt wird, z. B. Marketing, Finanzen und HR, mit jeweils unterschiedlichen Compliance- und Computeanforderungen. Mit Wörterbüchern definieren Sie eine einzige Konfiguration, die die Anforderungen der einzelnen Teams erfasst.
Manifest-Beispiel:
Definitionsbeispiel:
Ihre SQL-Vorlage durchläuft dieses Wörterbuch in einer Schleife. Es erstellt automatisch Schemas, weist die korrekte Aufbewahrungsrichtlinie zu und erstellt je nach Bedingung zusätzliche Ressourcen nur für die Teams, die diese anfordern.
