Snowflake DCM Projects

Snowflake DCM Projects (Database Change Management Projects) ermöglichen einen deklarativen Ansatz für die Verwaltung von Snowflake-Objekten als Code. Sie definieren den gewünschten Zielzustand Ihrer Datenbanken, Schemas, Tabellen und anderen Objekte in den Definitionsdateien, und Snowflake ermittelt und verwendet die erforderlichen Änderungen, um diesen Zustand zu erreichen. Dies ermöglicht versionskontrollierte, wiederholbare Bereitstellungen in verschiedenen Umgebungen, wie z. B. Entwicklung, Staging und Produktion, unter Verwendung eines Erst-Planen-dann-Bereitstellen-Workflows, der bei Infrastructure-as-Code-Tools üblich ist.

Wenn Ihre Definitionen sich wiederholende Muster enthalten, können Sie Ihren Code mithilfe von Jinja-Vorlagen parametrisieren, einschließlich Wörterbücher, Schleifen, Bedingungen und Makros.

Der allgemeine Workflow für das Management eines DCM project ist wie folgt:

  1. Erstellen Sie DCM project-Dateien (manifest.yml- und SQL-Definitionsdateien) in einem Snowflake-Arbeitsbereich, einem externen Git-Repository oder einem lokalen Verzeichnis.

  2. Erstellen Sie ein neues DCM project für jede Zielumgebung.

  3. Definieren Sie Snowflake-Objekte in DCM project-Dateien.

    Konvertieren Sie Ihre bestehenden SQL-Bereitstellungsskripte mithilfe des DEFINE-Schlüsselworts (für unterstützte Objekttypen).

  4. (Optional) Fügen Sie gemeinsame oder alternative Vorlagenvariablen und Makros hinzu.

  5. Führen Sie einen DCM PLAN-Befehl aus, um eine Bereitstellung zu simulieren und eine Vorschau der Änderungen anzuzeigen.

  6. Stellen Sie die Projektversion bereit, um Änderungen in Snowflake zu übernehmen.

  7. Überwachen Sie die Projektausführungen.

  8. Iterieren Sie Ihr DCM-Projekt. Aktualisieren Sie die Projektdateien, überprüfen Sie die Planausgabe, und stellen Sie bei Bedarf neue Versionen bereit.

Mit diesem Lebenszyklus können Sie Datenbankänderungen auf kontrollierte, versionierte und überprüfbare Weise erstellen, testen, bereitstellen und überwachen.

Die folgende Abbildung veranschaulicht den oben beschriebenen DCM Projects-Lebenszyklus.

DCM-Projektlebenszyklus

Wichtige Begriffe

Im Folgenden finden Sie die wichtigsten Begriffe, die Sie kennen sollten, wenn Sie mit DCM Projects arbeiten.

Deklarative Definitionen

In DCM Projects definieren Sie den gewünschten Status Ihrer Snowflake-Umgebung, z. B. welche Tabellen, Schemas oder Rollen vorhanden sein sollen, unabhängig vom aktuellen Status der Objekte. Sie geben nicht jeden Schritt an, um sie zu erstellen oder zu ändern. Sie beschreiben, was Sie wollen, und Snowflake erkennt, wie Sie dies umsetzen können.

Insbesondere nutzt DCM Projects DEFINE-Anweisungen mit Vorlagen-Features. Dadurch werden Projektdateien für verschiedene Umgebungen wiederverwendbar und anpassbar. Die Reihenfolge und der Speicherort vonDEFINE-Anweisungen innerhalb eines Projekts haben keinen Einfluss auf die Ergebnisse. Snowflake sammelt und sortiert alle Anweisungen, bevor die Änderungen angewendet werden, sodass Sie sich nicht manuell um die Sequenzierung oder die Abhängigkeiten kümmern müssen.

DCM-Projektdateien

Ein DCM project basiert auf einer Menge von SQL- undYAML-Quelldateien, die normalerweise in einem Git-Repository oder in Ihrem lokalen Arbeitsbereich verwaltet werden. Sie definieren Snowflake-Objekte, deren Attribute, Beziehungen und Einschränkungen für ein DCM project in Ihren Projektdefinitionsdateien (SQL-Dateien). Sie aktualisieren Ihre Projektdateien in einem Entwicklungsarbeitsbereich. Änderungen werden in Snowflake erst wirksam, wenn Sie sie über ein DCM project-Objekt bereitstellen.

DCM-Projektobjekt

Ein DCM project ist ein Objekt auf Schemaebene in Snowflake, mit dem Sie die in DCM project-Dateien definierten Objekte bereitstellen und verwalten können. Sie benötigen ein DCM project-Objekt für jede Zielumgebung.

Das DCM project-Objekt wird zur Ausführung von DCM-Befehlen verwendet und speichert die unveränderlichen Artefakte und Definitionsdateien aller ausgeführten Bereitstellungen.

Obwohl ein DCM project ein Objekt auf Schemaebene ist, können Sie damit Objekte in anderen Datenbanken erstellen und verwalten. Sie können auch ein DCM project ausführen, um einen Testlauf der Änderungen an Ihrem Workflow durchzuführen, sodass Sie eine Vorschau der Änderungen anzeigen können, bevor Sie sie bereitstellen.

Anforderungen

  • Verwenden Sie Snowsight, SnowflakeCLI,SQL oder Cortex CLI zum Verwalten von DCM Projects.

  • Sie benötigen eine Datenbank und ein Schema, in dem Sie Ihre DCM project-Objekte erstellen können.

  • Speichern Sie Ihre DCM project-Definitionen lokal oder im Snowflake-Arbeitsbereich.

  • Verwenden Sie Git für die Zusammenarbeit, für die Versionierung und zum Synchronisieren von Änderungen.

  • Wenn Sie lokale Definitionen mit Snowflake CLI ausführen möchten, benötigen Sie auch die Berechtigung, einen temporären Stagingbereich im Schema Ihres DCM project-Zielobjekts zu erstellen.

Hinweise und Einschränkungen

  • Projektgröße

    • Derzeit unterstützt DCM Projects bis zu 1.000 Quelldateien und 10.000 gerenderte Objektdefinitionen oder Berechtigungszuweisungen.

      Bei mehr als 1.000 Dateien oder 10.000 Definitionen kann es zu Leistungseinbußen und in einigen Fällen zu Ausführungsfehlern kommen.

      Die Konsolidierung von Definitionen in weniger Dateien führt im Allgemeinen zu schnelleren Ausführungszeiten von PLAN- und DEPLOY-Befehlen.

      Dieses Limit wird während des Zeitraums der öffentlichen Vorschau angehoben, da sich Leistung und Skalierbarkeit weiter verbessern.

  • Changeset (Änderungssatz)

    Sowohl PLAN- als auch DEPLOY-Befehle listen alle DDL-Änderungen innerhalb der plan_result.json-Datei auf. Das Changeset listet die durchgeführten oder geplanten Operationen auf (CREATE, ALTER, DROP) sowie die einzelnen betroffenen Attribute wie Kommentar, Zeitplan und Timeout.

    Wichtig

    Während der Vorschauphase von DCM Projects ist nicht garantiert, dass das Änderungsset jede einzelne Änderung über alle Eigenschaften jedes Objekts hinweg erfasst.

  • Vorlagen

    • Da Definitionsdateien Jinja2-Vorlagen sind, gelten alle Einschränkungen für Jinja2-Vorlagen.

    • DCM-Vorlagenvariablen sind nicht für sensible Informationen wie Anmeldeinformationen gedacht. Die gerenderten SQL-Definitionen blenden keine Werte aus, die durch Umgebungsvariablen eingefügt wurden.

Wichtige Anwendungsfälle für DCM Projects

In diesem Abschnitt werden die wichtigsten Anwendungsfälle für DCM Projects beschrieben und wie sie dazu beitragen, die Herausforderungen zu bewältigen, denen Datenunternehmen in großem Umfang gegenüberstehen. Diese Anwendungsfälle lassen sich je nach Verantwortung des Teams in zwei allgemeine Kategorien einteilen:

DCM Projects für die Infrastrukturverwaltung

DCM Projects helfen bei der Bewältigung der folgenden Herausforderungen, auf die Plattformteams häufig treffen:

Herausforderungen für Plattformteams

Wenn Plattformteams eine standardisierte Infrastruktur für mehrere Geschäftsbereiche bereitstellen und warten möchten, können sie DCM Projects verwenden, um einen Standardsatz von Objekten im Code als SQL-Dateien zu definieren. Und mit Jinja kann diese Vorlage parametrisiert (z. B. nach Teamnamen) und mehrfach bereitgestellt werden.

Beispiel: Erstellen eines dedizierten DCM project für jede Geschäftseinheit

Ein Ansatz besteht darin, ein dediziertes DCM project für jede Geschäftseinheit zu erstellen, wobei alle Projekte auf dieselben parametrisierten Definitionsdateien verweisen, wie im folgenden definitions.sql-Beispiel gezeigt:

DEFINE DATABASE {{team_name}}_DB;

DEFINE ROLE {{team_name}}_ADMIN;

DEFINE WAREHOUSE {{team_name}}_WH WITH
  warehouse_size = '{{wh_size}}'
  auto_suspend = 300;

GRANT OWNERSHIP ON DATABASE {{team_name}}_DB TO ROLE {{team_name}}_ADMIN;

GRANT OWNERSHIP ON WAREHOUSE {{team_name}}_WH TO ROLE {{team_name}}_ADMIN;

GRANT ROLE {{team_name}}_ADMIN TO ROLE SYSADMIN;

Führen Sie das DCM project mit dem folgenden Befehl aus.

EXECUTE DCM PROJECT FINANCE_INFRA PLAN
  USING (team_name => 'Finance', wh_size => 'LARGE')
FROM
  ...

Beispiel: Erstellen eines einzelnen DCM project für mehrere Geschäftsbereiche

Bei diesem Ansatz verwalten Sie die Infrastruktur für mehrere Geschäftsbereiche in einem DCM project durch die Verwendung von Schleifen in Ihrer Jinja-Vorlage, wie im folgenden definitions.sql-Beispiel gezeigt:

{% for team_name in teams %}

  DEFINE DATABASE {{team_name}}_DB;
  DEFINE ROLE {{team_name}}_ADMIN;
  DEFINE WAREHOUSE {{team_name}}_WH
    WITH
      warehouse_size = '{{wh_size}}'
      auto_suspend = 300;

  GRANT OWNERSHIP ON DATABASE {{team_name}}_DB TO ROLE {{team_name}}_ADMIN;
  GRANT OWNERSHIP ON WAREHOUSE {{team_name}}_WH TO ROLE {{team_name}}_ADMIN;
  GRANT ROLE {{team_name}}_ADMIN TO ROLE SYSADMIN;

{% endfor %}

Führen Sie das DCM project mit dem folgenden Befehl aus.

EXECUTE DCM PROJECT FINANCE_INFRA PLAN
  USING (teams => ['Finance', 'HR', 'Engineering'], wh_size => 'MEDIUM')
FROM
  ...

Dies erleichtert es Plattformteams und Administratoren, Änderungen vorzunehmen wie:

  • Neues Team zur Liste hinzufügen, um die bestehende Infrastrukturvorlage für dieses Team bereitzustellen.

  • Ein Team aus der Liste entfernen, um die Infrastruktur dieses Teams zu löschen.

  • Neue READ_ONLY-Rolle für alle Teams hinzufügen.

  • Ändern bestimmter Konfigurationen wie z. B. Berechtigungszuweisungen oder Warehouse-Größe über alle Teams hinweg oder für ein bestimmtes Team.

  • PLAN ausführen, um den aktuellen Status mit den erwarteten Standards zu vergleichen oder erneut bereitzustellen, um die Standards wiederherzustellen.

DCM Projects für Datenpipelines

DCM Projects helfen bei der Bewältigung der folgenden Herausforderungen, vor denen Feature-Teams häufig stehen:

Herausforderungen für Feature-Teams

Geschäftsbereiche, die ihre Datenpipelines einfach erstellen und verwalten möchten, können DCM Projects verwenden, um deren Geschäftslogik zu definieren, zu testen, bereitzustellen und zu iterieren.

Sie können Folgendes tun:

  • Verwalten Sie Snowflake-Objekttypen wie Tabellen, dynamische Tabellen, Ansichten, Warehouses, Rollen, Berechtigungen, Datenmetrikfunktionen und Erwartungen – alles in einem Projekt.

  • Testen und stellen Sie inkrementelle Änderungen an Pipelines bereit. Sie können Konfigurationen ändern, Transformationslogik implementieren und Spalten und Ansichten hinzufügen.

  • Zeigen Sie eine Vorschau der Datenbeispiele an, um die Transformationslogik zu validieren, bevor Sie Objekte bereitstellen.

  • Stellen Sie dieselbe Pipeline-Definition in mehreren Umgebungen bereit.

  • Testen Sie die Erwartungen an die Datenqualität in Umgebungen vor der Produktion, bevor Sie Änderungen in der Produktion vornehmen.

DCM Projects bietet zusätzliche Funktionen für die Erstellung und Verwaltung von Datenpipelines. Weitere Informationen dazu finden Sie unter DCM Projects für Datenpipelines.