Skip to content
NextLytics
Megamenü_2023_Über-uns

Shaping Business Intelligence

Ob clevere Zusatzprodukte für SAP BI, Entwicklung aussagekräftiger Dashboards oder Implementierung KI-basierter Anwendungen - wir gestalten zusammen mit Ihnen die Zukunft von Business Intelligence. 

Megamenü_2023_Über-uns_1

Über uns

Als Partner mit tiefem Prozess-Know-how, Wissen der neuesten SAP-Technologien sowie hoher sozialer Kompetenz und langjähriger Projekterfahrung gestalten wir die Zukunft von Business Intelligence auch in Ihrem Unternehmen.

Megamenü_2023_Methodik

Unsere Methodik

Die Mischung aus klassischem Wasserfallmodell und agiler Methodik garantiert unseren Projekten eine hohe Effizienz und Zufriedenheit auf beiden Seiten. Erfahren Sie mehr über unsere Vorgehensweise.

Produkte
Megamenü_2023_NextTables

NextTables

Daten in SAP BW out of the Box bearbeiten: Mit NextTables wird das Editieren von Tabellen einfacher, schneller und intuitiver, egal ob Sie SAP BW on HANA, SAP S/4HANA oder SAP BW 4/HANA nutzen.

Megamenü_2023_Connector

NextLytics Connectoren

Die zunehmende Automatisierung von Prozessen erfordert die Konnektivität von IT-Systemen. Die NextLytics Connectoren ermöglichen eine Verbindung Ihres SAP Ökosystems mit diversen open-source Technologien.

IT-Services
Megamenü_2023_Data-Science

Data Science & Engineering

Bereit für die Zukunft? Als starker Partner stehen wir Ihnen bei der Konzeption, Umsetzung und Optimierung Ihrer KI-Anwendung zur Seite.

Megamenü_2023_Planning

SAP Planning

Wir gestalten neue Planungsanwendungen mithilfe von SAP BPC Embedded, IP oder  SAC Planning, die einen Mehrwert für Ihr Unternehmen schaffen.

Megamenü_2023_Dashboarding

Business Intelligence

Mit unserer Expertise verhelfen wir Ihnen auf Basis von Tableau, Power BI, SAP Analytics Cloud oder SAP Lumira zu aussagekräftigen Dashboards. 

Megamenü_2023_Data-Warehouse-1

SAP Data Warehouse

Planen Sie eine Migration auf SAP HANA? Wir zeigen Ihnen, welche Herausforderungen zu beachten sind und welche Vorteile eine Migration bringt.

Business Analytics
Megamenü_2023_Procurement

Procurement Analytics

Transparente und valide Zahlen sind vor allem in Unternehmen mit dezentraler Struktur wichtig. SAP Procurement Analytics ermöglicht die Auswertung von SAP ERP-Daten in SAP BI.

Megamenü_2023_Reporting

SAP HR Reporting & Analytics

Mit unserem Standardmodell für Reporting von SAP HCM mit SAP BW beschleunigen Sie administrative Tätigkeiten und stellen Daten aus verschiedenen Systemen zentral und valide zur Verfügung.

Megamenü_2023_Dataquality

Data Quality Management

In Zeiten von Big Data und IoT kommt der Vorhaltung einer hohen Datenqualität eine enorm wichtige Bedeutung zu. Mit unserer Lösung für Datenqualitätsmanagement (DQM) behalten Sie stets den Überblick.

Karriere
Megamenü_2023_Karriere-2b

Arbeiten bei NextLytics

Wenn Du mit Freude zur Arbeit gehen möchtest und dabei Deine berufliche und persönliche Weiterentwicklung nicht zu kurz kommen soll, dann bist Du bei uns genau richtig! 

Megamenü_2023_Karriere-1

Berufserfahrene

Zeit für etwas Neues? Gehe Deinen nächsten beruflichen Schritt und gestalte Innovation und Wachstum in einem spannenden Umfeld zusammen mit uns!

Megamenü_2023_Karriere-5

Berufseinsteigende

Schluss mit grauer Theorie - Zeit, die farbenfrohe Praxis kennenzulernen! Gestalte bei uns Deinen Einstieg ins Berufsleben mit lehrreichen Projekten und Freude an der Arbeit.

Megamenü_2023_Karriere-4-1

Studierende

Du möchtest nicht bloß die Theorie studieren, sondern Dich gleichzeitig auch praktisch von ihr überzeugen? Teste mit uns Theorie und Praxis und erlebe wo sich Unterschiede zeigen.

Megamenü_2023_Karriere-3

Offene Stellen

Hier findest Du alle offenen Stellenangebote. Schau Dich um und bewirb Dich - wir freuen uns! Falls keine passende Stelle dabei ist, sende uns gerne Deine Initiativbewerbung zu.

Blog
NextLytics Newsletter
Abonnieren Sie jetzt unseren monatlichen Newsletter:
Newsletter abonnieren
 

Databricks-Governance ohne Copy-Paste: YAML Anchors für Admins

In unserem Artikel „Azure Databricks Governance mit Terraform und Databricks-Bundles“ haben wir die Governance von Azure Databricks in drei Phasen unterteilt: Terraform stellt die Cloud-Infrastruktur bereit, Databricks Declarative-Automation-Bundles (DAB) konfigurieren die Berechtigungen der Plattform und das Python-SDK übernimmt die Aufgaben, die die Bundles nicht deklarativ abbilden können. 

Die Governance in Databricks erstreckt sich über drei Berechtigungsebenen: Konto, Arbeitsbereich und Unity Catalog. Dieser Artikel befasst sich insbesondere mit der letzten Ebene (Unity Catalog), auf der der Großteil der täglichen Arbeit zur Vergabe von Berechtigungen stattfindet.

Databricks_permission-levels

Diese Konfiguration funktioniert gut, solange Ihre Plattform nicht wächst. Sobald Ihre Medaillon-Architektur Bronze-, Silber- und Gold-Kataloge mit jeweils mehreren Schemata umfasst, vervielfacht sich eine Sache schnell: die Berechtigungen (Blöcke). Die gleichen READ-Berechtigungen für Workspace-Benutzer oder WRITE-Berechtigungen für Job-Runner werden in jeden Katalog und jedes Schema kopiert. Und genau beim Kopieren und Einfügen bricht die Governance still und leise zusammen. Ändern Sie eine Berechtigung, müssen Sie diese an einem Dutzend Stellen suchen und aktualisieren.

Dieser Artikel stellt eine kleine, native YAML-Funktion vor, die diese Wiederholungen vollständig beseitigt: Anchors. (Anker)
(Kurz zur Erinnerung: YAML ist die menschenlesbare Konfigurationssprache, in der Databricks Asset Bundles geschrieben werden. Jede databricks.yml und jede Ressourcen-Datei im Bundle ist YAML.)

Was sind YAML Anchors and Aliases?

Bevor man etwas auf Databricks anwendet, ist es hilfreich, sich zunächst den Mechanismus an sich anzusehen. YAML verfügt über miteinander verbundene Funktionen zur Wiederverwendung von Inhalten innerhalb einer Datei.
Ein Anchor (&name) markiert einen Knoten, sodass man später darauf verweisen kann. Ein Alias (*name) verwendet dann genau diesen Knoten an einer anderen Stelle wieder. Ein einfaches Beispiel:

default_grant: &read_access
  principal: workspace_users
  privileges: [USE_CATALOG, SELECT]

catalog_a:
  grants: *read_access
catalog_b:
  grants: *read_access

Hier verweisen sowohl catalog_a als auch catalog_b auf denselben Block, der einmal unter &read_access definiert ist. Ändert man den Anchor, ändern sich beide entsprechend.

Wichtig zu verstehen ist, dass all dies eine Eigenschaft von YAML selbst ist. Die Auflösung erfolgt durch den YAML-Parser beim Einlesen der Datei, noch bevor Databricks den Inhalt überhaupt zu Gesicht bekommt. Es ist keine bundle-spezifische „Magie“ im Spiel; Anchors funktionieren in jeder YAML-Datei.

Warum sich Grants in Databricks Bundles ständig wiederholen

Kommen wir nun zum eigentlichen Aufbau. In einer Medaillon-Architektur bildet jede Ebene einen eigenen Katalog: Bronze, Silber, Gold und jeder Katalog benötigt denselben Basiszugriff: Arbeitsbereichsbenutzer können lesen, das Job-Runner-Service-Principle kann Schemata erstellen. Im Klartext sieht ein Bundle letztendlich so aus:

catalogs:
  bronze:
    name: bronze
    grants:
      - principal: workspace_users
        privileges: [USE_CATALOG]
      - principal: job_runner_sp
        privileges: [USE_CATALOG, CREATE_SCHEMA]
  silver:
    name: silver
    grants:
      - principal: workspace_users
        privileges: [USE_CATALOG]
      - principal: job_runner_sp
        privileges: [USE_CATALOG, CREATE_SCHEMA]
  gold:
    name: gold
    grants:
      - principal: workspace_users
        privileges: [USE_CATALOG]
      - principal: job_runner_sp
        privileges: [USE_CATALOG, CREATE_SCHEMA]

Derselbe achtzeilige Code, dreimal hintereinander - und das noch bevor die Schemata unter jedem Katalog ihre eigenen Berechtigungsblöcke (grants:) wiederholen. Stellen Sie sich nun vor, bei einer Governance-Prüfung wird beschlossen, dass der Job-Runner zusätzlich die Berechtigung BROWSE erhalten soll. Sie bearbeiten dieselbe Änderung in drei Katalogen und jedem Schema, in der Hoffnung, dass Sie alle Stellen finden. Wenn Sie eine übersehen, rutscht Gold unbemerkt von Bronze ab. 

Genau diese Art von Fehlern soll „Infrastructure-as-Code“ eigentlich verhindern, doch durch Kopieren und Einfügen wird dieser Fehler im YAML-Code erneut eingeführt.


Sehen Sie sich die Aufzeichnung unseres Webinars an: "Bridging Business and Analytics: The Plug-and-Play Future of Data Platforms"


YAML Anchors in der Praxis: Grants im Bundle ohne Wiederholung

Hier ist dieselbe Konfiguration, umgeschrieben mit einem Anchor. Definieren Sie den grants:-Block einmalig, vergeben Sie ihm einen Namen mit “&” und verweisen Sie dann in jedem Katalog mit “*” darauf:

_common: &catalog_grants
  - principal: workspace_users
    privileges: [USE_CATALOG]
  - principal: job_runner_sp
    privileges: [USE_CATALOG, CREATE_SCHEMA]

catalogs:
  bronze:
    name: bronze
    grants: *catalog_grants
  silver:
    name: silver
    grants: *catalog_grants
  gold:
    name: gold
    grants: *catalog_grants

Die acht wiederholten Zeilen befinden sich nun an genau einer Stelle. Die Governance-Überprüfung, die BROWSE hinzufügt? Eine einzige Änderung an &catalog_grants und Bronze, Silber und Gold übernehmen sie alle. Es besteht keine Gefahr, dass eine Ebene von den anderen abweicht.

Anchors verwenden einen ganzen Block genau so wieder, wie er definiert ist. Das hat eine Konsequenz, die es wert ist, ausdrücklich erwähnt zu werden: Eine grants:-Liste wird als Ganzes wiederverwendet. YAML-Anchorswerden nicht an eine Liste angehängt. Wenn also ein Katalog einen zusätzlichen Principal benötigt, definieren Sie einen zweiten Anchor, anstatt den ersten zu „erweitern“.
(Wenn Sie das überspringen, landen Sie wieder beim Kopieren und Einfügen des Blocks mit einer geänderten Zeile - genau das, was Anchors eigentlich vermeiden sollen).

Anchors lassen sich auch mit Databricks-Bundle-Variablen kombinieren. Der verankerte Block kann Platzhalter wie ${var...} enthalten, sodass die Struktur über den Anchor wiederverwendet wird, während umgebungsspezifische Werte weiterhin aus Ihrer Variablen-Datei stammen:

_common: &catalog_grants
  - principal: ${var.group_workspace_users}
    privileges: ${var.catalog_privilege_use}

Anchors für die Struktur, Variablen für die Werte. Diese Kombination ist das Muster, das man verinnerlichen sollte. Sie ist auch der Grund dafür, dass ein einziges Bundle in mehreren Umgebungen eingesetzt werden kann: Die gleichen, an Anchor gebundenen Blöcke werden unverändert in DEV, QA und PROD bereitgestellt, während Variablen je nach Umgebung die richtigen Katalognamen und Berechtigungen einfügen.

before-after-YAML_anchor

YAML Anchors vs. Databricks Bundle-Variablen

An dieser Stelle stellt sich eine Frage: Ermöglichen die Databricks-Bundle-Variablen nicht bereits die Wiederverwendung? Sie haben in der gesamten Konfiguration ${var.catalog_privilege_use} und ${resources.catalogs.silver.name} gesehen. Sie scheinen auf dem gleichen Prinzip zu basieren. Warum also zusätzlich Anchors?

Weil sie in unterschiedlichen Phasen wirken. YAML-Anchors werden vom YAML-Parser in dem Moment aufgelöst, in dem die Datei gelesen wird. Bundle-Variablen (${...}) werden später von der Databricks-CLI aufgelöst, wenn diese das Bundle zusammen- und bereitstellt. Anchors werden zuerst expandiert; die Variablenersetzung erfolgt danach, im bereits expandierten Dokument.

Aus dieser Reihenfolge ergibt sich eine klare Faustregel:

  • Anchors zur Strukturierung verwenden: eine vollständige Liste der Berechtigungen (grants), eine gemeinsame Clusterkonfiguration

  • sowie Variablen für Werte: einen Katalognamen, eine Berechtigungsgruppe und den Umgebungswert.

Anchors und Variablen ergänzen sich. Ein verankerter Block voller ${var...}-Platzhalter ist die ideale Lösung: Der Anchor sorgt dafür, dass jeder Katalog die gleiche Struktur erhält, während die Variablen dafür sorgen, dass die tatsächlichen Namen in allen Umgebungen umgebungsabhängig bleiben.
Takeaway:

  • Wenn Sie einen Block wiederholen, greifen Sie auf einem Anchor zurück.

  • Wenn Sie einen Wert wiederholen, greifen Sie auf eine Variable zurück.

Wenn man diese durcheinanderbringt, versucht, einen variablen Punkt an einem Block festzulegen, oder Werte, die ein Anchor enthalten soll, hardcodet, werden Konfigurationen anfällig.

Häufige Fallstricke bei YAML Anchors in Databricks Bundles

Anchors sind ein tolles Tool, aber es lohnt sich, ein paar Dinge zu wissen, bevor man sich auf sie verlässt.

  • Anchors gelten nur für den jeweiligen Dateibereich. Ein in schemas.yml definierter Anchor kann nicht aus catalogs.yml referenziert werden. Der Alias wird einfach nicht aufgelöst. Aus diesem Grund sieht man in einem echten Bundle mit mehreren Dateien manchmal, dass ein scheinbar „gleicher“ Block zweimal definiert ist, einmal pro Datei. Das ist kein Versehen, sondern liegt an der Geltungsbereichsregel. Wenn Sie eine echte dateiübergreifende Wiederverwendung wünschen, ist das die Aufgabe von Bundle-Variablen, nicht von Anchors.

  • Die Lesbarkeit hat ihre Grenzen. Ein Alias wie *general_privileges ist nur dann verständlich, wenn der Leser *general_privileges schnell finden kann. Sind die Anchors über eine lange Datei verstreut, muss jeder Prüfer scrollen, um die Definition zu finden. Der “DRY-Vorteil” wird so zu einem Aufwand für das Verständnis.

  • Führen Sie die Fehlerbehebung (Debug) anhand des erweiterten Dokuments durch, nicht anhand des Quellcodes. Was Sie geschrieben haben, entspricht nicht ganz dem, was Databricks bereitstellt. Der Parser hat zunächst alle Aliase aufgelöst. Wenn eine Berechtigung falsch erscheint, führen Sie databricks bundle validate aus und überprüfen Sie die vollständig aufgelöste Ausgabe. Das ist die Version, auf die es tatsächlich ankommt.

  • Verankere keine Elemente, die nur einmal vorkommen. Ein Anchor, auf den nur einmal verwiesen wird, führt zu Umwegen, ohne einen Vorteil zu bieten. Anchors machen sich erst durch Wiederholungen bezahlt. Wenn ein Block nicht wiederholt wird, lass ihn inline stehen.

YAML Anchors: Best Practices für Databricks-Teams

Wenn Anchors in einem Bundle untergebracht werden sollen, das von mehreren Personen gepflegt wird, sorgt ein wenig Disziplin dafür, dass sie ein Gewinn bleiben und nicht zu einem Rätsel werden.

  • Legen Sie eine Namenskonvention für Anchors fest, die den Geltungsbereich und den Zweck deutlich macht. Bezeichnungen wie &catalog_grants oder &schema_read sind wesentlich aussagekräftiger als &block1. Der Alias sollte einem Anwender bereits auf den ersten Blick vermitteln, was ihn erwartet, ohne dass er bis zur Definition scrollen muss.

  • Sorgen Sie dafür, dass Anchor Definitionen leicht auffindbar sind. Definieren Sie sie am Anfang der Datei oder in einem deutlich gekennzeichneten Konventionsblock, damit es einen offensichtlichen Ort gibt, an dem man nachsehen kann (_common).  Ein Anchor, der zwischen zwei nicht zusammenhängenden Ressourcen versteckt ist, wird leicht übersehen.

  • Denken Sie daran, dass eine Änderung an einem gemeinsam genutzten Anchor eine weitreichende Änderung darstellt. Durch die Bearbeitung von &catalog_grants werden bronze, silver und gold Kataloge gleichzeitig aktualisiert. Das ist zwar nützlich, sollte aber vor dem Commit sorgfältig geprüft werden.

Und führen Sie vor jeder Bereitstellung immer eine Validierung durch. Führen Sie databricks bundle validate in der CI aus, damit die vollständig aufgelöste Konfiguration bei jeder Änderung überprüft wird: derselbe umgebungsbezogene, genehmigungspflichtige Ansatz, den wir in Teil 1 dieses Artikels durchgesprochen haben. Anchors verringern die Fehleranfälligkeit; ein Validierungsschritt fängt die Fehler ab, die dennoch durchrutschen.

Databricks-Governance mit YAML Anchors vereinfachen: Unser Fazit

YAML-Anchors tauchen weder in den Databricks-Release-Notes noch in einem Governance-Framework auf. Sie sind eine kleine, native Funktion der Konfigurationssprache selbst. Aber genau deshalb sind sie für Administratoren so wichtig. Wenn Ihre Medallion-Architektur von einer Handvoll Ressourcen auf Bronze-, Silber- und Gold-Kataloge mit jeweils zugrunde liegenden Schemata, Volumes und Berechtigungen anwächst, besteht das eigentliche Risiko darin, dass die Wiederholungen unbemerkt aus dem Gleichgewicht geraten. Anchors bündeln diese Wiederholungen zu einer single source of truth, sodass eine Änderung an der Governance nur noch eine einzige Bearbeitung statt eines Dutzends erfordert.

Zur Erinnerung: Anchors für die Struktur, Variablen für Werte und Validierung vor jedem Deployment. Bei konsequenter Anwendung sorgen Anchors für kürzere Bundles, übersichtlichere Reviews und eine einheitliche Governance des Unity Catalogs über alle Umgebungen hinweg, was ja der eigentliche Sinn dieser deklarativen Vorgehensweise ist.

Damit schließen wir unseren Überblick darüber ab, wie Databricks-Asset-Bundles auch in großem Maßstab wartbar bleiben. Wenn Sie eine Plattform-Governance aufbauen und einen Partner suchen, der die Tücken bereits kennt, helfen wir Ihnen gerne weiter.

 

 

FAQ - YAML-Anchors für Databricks Governance

Hier finden Sie einige der häufig gestellten Fragen zur YAML-Anchors in Databricks Governance.

Was sind YAML-Anchors und Aliases? Anchors und Aliases sind ein natives YAML-Feature, um Inhalte innerhalb einer Datei wiederzuverwenden. Ein Anchor (&name) markiert einen Block, sodass er an anderer Stelle über einen Alias (*name) referenziert werden kann. Sie sind Teil des YAML-Standards selbst und kein Databricks-spezifisches Feature. Sie funktionieren also in jeder YAML-Datei, auch in der Konfiguration von Databricks Bundles.
Warum sollten Databricks-Admins YAML-Anchors nutzen? In einer Medallion-Architektur mit Bronze-, Silver- und Gold-Katalogen und vielen Schemas werden dieselben Grant-Blöcke über jede Ressource hinweg kopiert. Mit Anchors definiert man einen solchen Block einmal und referenziert ihn überall. Eine Governance-Änderung ist damit ein einziger Edit statt einem Dutzend. Das senkt das Risiko, dass eine Ebene unbemerkt aus dem Tritt gerät.
Was ist der Unterschied zwischen YAML-Anchors und Databricks Bundle-Variablen? Sie greifen auf unterschiedlichen Stufen. YAML-Anchors werden vom YAML-Parser aufgelöst, sobald die Datei gelesen wird, noch bevor die Databricks CLI die Bundle-Variablen (${var...}) einsetzt. Die Faustregel: Anchors für die Struktur (ein ganzer Grant-Block), Variablen für die Werte (Katalognamen, Privilegien, Environment). Beide lassen sich gut kombinieren. Ein per Anchor definierter Block kann Variablen-Platzhalter enthalten.
Können YAML-Anchors über mehrere Dateien eines Bundles hinweg genutzt werden? Nein. Anchors sind dateigebunden: Ein in einer Datei definierter Anchor kann nicht aus einer anderen referenziert werden. Deshalb definieren Bundles mit mehreren Dateien denselben Block mitunter mehrfach. Für die dateiübergreifende Wiederverwendung nutzt man Bundle-Variablen statt Anchors.
Kann ein YAML-Anchor einen einzelnen Eintrag zu einer bestehenden Liste hinzufügen? Nein. Eine grants:-Liste wird als Ganzes wiederverwendet. Anchors hängen nichts an eine Liste an. Wenn ein Katalog oder Schema einen zusätzlichen Principal braucht, definiert man einen zweiten Anchor, statt den ersten zu „erweitern".
Wie kann ich vor dem Deployment prüfen, wie Anchors aufgelöst werden? Führen Sie databricks bundle validate aus. Der Befehl prüft die vollständig aufgelöste Konfiguration, also den Stand, nachdem alle Anchors und Aliases ersetzt wurden. So können Sie bestätigen, dass das Deployment-Ergebnis Ihre Absicht entspricht, bevor Sie nach QA oder PROD ausrollen.

,

avatar

Thomas Kranzkowski

Thomas ist Data & AI Berater mit mehr als 8 Jahren Erfahrung in den Bereichen Data Engineering, Machine Learning und Cloud-Plattformen. Er konzipiert und entwickelt skalierbare Daten- und KI-Lösungen für Branchen wie Healthcare, Biotech, Logistik, Energie und Fertigung. In seiner Freizeit ist er bei jedem Wetter gerne draußen unterwegs - beim Wandern, Radfahren, Schwimmen, Stand-up-Paddling oder im Winter auf dem Eis.

Sie haben eine Frage zum Blog?
Fragen Sie Thomas Kranzkowski

Gender Hinweis Aufgrund der besseren Lesbarkeit wird im Text das generische Maskulinum verwendet. Gemeint sind jedoch immer alle Menschen.
Databricks-Governance ohne Copy-Paste: YAML Anchors für Admins
13:13

Blog - NextLytics AG 

Welcome to our blog. In this section we regularly report on news and background information on topics such as SAP Business Intelligence (BI), SAP Dashboarding with Lumira Designer or SAP Analytics Cloud, Machine Learning with SAP BW, Data Science and Planning with SAP Business Planning and Consolidation (BPC), SAP Integrated Planning (IP) and SAC Planning and much more.

Informieren Sie mich über Neuigkeiten

Verwandte Beiträge

Letzte Beiträge