Im zweiten Teil der Blogreihe zur Ankündigung von SQL Scripting untersuchen wir die Verwaltungsaufgabe, die wir in Teil eins besprochen haben – wie man eine Groß-/Kleinschreibung ignorierende Regel auf jede STRING-Spalte in einer Tabelle anwendet. Wir gehen dieses Beispiel Schritt für Schritt durch, erklären die verwendeten Funktionen und erweitern es über eine einzelne Tabelle hinaus, um ein ganzes Schema abzudecken.
Sie können auch mitverfolgen in diesem Notebook.
Databricks unterstützt eine breite Palette sprachabhängiger, Groß-/Kleinschreibung ignorierender und Akzentzeichen ignorierender Kollationen. Es ist einfach, diese Funktion für neue Tabellen und Spalten zu verwenden. Aber was ist, wenn Sie ein bestehendes System haben, das überall upper() oder lower() in Prädikaten verwendet und die Leistungsverbesserungen nutzen möchte, die mit einer nativen, Groß-/Kleinschreibung ignorierenden Kollation verbunden sind, während Ihre Abfragen vereinfacht werden? Das erfordert etwas Programmierung; jetzt können Sie alles in SQL erledigen.
Verwenden wir das folgende Testschema:
Die Reihenfolge basiert auf den ASCII-Codepunkten, wobei alle Großbuchstaben allen Kleinbuchstaben vorangestellt sind. Können Sie das beheben, ohne upper() oder lower() hinzuzufügen?
Unser erster Schritt ist, der Tabelle mitzuteilen, dass sie ihre Standardkollation für neu hinzugefügte Spalten ändern soll. Sie können Ihre lokalen Variablen mit Parameter-Markern füttern, die das Notebook automatisch erkennt und Widgets hinzufügt. Sie können auch EXECUTE IMMEDIATE verwenden, um eine dynamisch zusammengestellte ALTER TABLE Anweisung auszuführen.
Jedes SQL-Skript besteht aus einer BEGIN .. END (compound) Anweisung. Lokale Variablen werden zuerst innerhalb einer compound Anweisung definiert, gefolgt von der Logik.
Dies ist alles nur eine Reihe von linearen Anweisungen. Bisher konnten Sie all dies mit SQL Session-Variablen ohne die compound Anweisung schreiben. Sie haben auch noch nicht viel erreicht. Schließlich wollten Sie die Kollation für vorhandene Spalten ändern. Dazu müssen Sie:
Kurz gesagt, Sie müssen die INFORMATION_SCHEMA.COLUMNS Tabelle durchlaufen.
SQL Scripting bietet vier Möglichkeiten zum Schleifen und zur Steuerung von Schleifendurchläufen.
Wenden Sie nun die FOR Schleife auf unser Kollationsskript an. Die Abfrage ruft die Spaltennamen aller String-Spalten der Tabelle ab. Der Schleifenkörper ändert nacheinander die Kollation jeder Spalte:
Lassen Sie uns überprüfen, ob die Tabelle korrekt aktualisiert wurde:
Bisher alles gut. Unser Code ist funktional vollständig, aber Sie sollten Delta anweisen, die von Ihnen geänderten Spalten zu analysieren, um vom File Skipping zu profitieren. Sie möchten dies nicht pro Spalte tun. Sammeln Sie sie stattdessen alle und erledigen Sie die Arbeit nur, wenn tatsächlich eine String-Spalte vorhanden war, für die die Kollation geändert wurde. Entscheidungen, Entscheidungen ...
SQL Scripting bietet drei Möglichkeiten, SQL-Anweisungen bedingt auszuführen.
Für unser Kollationsskript reicht ein einfaches IF THEN END IF aus. Sie müssen auch die Menge der Spalten sammeln, auf die ANALYZE angewendet werden soll, und einige Funktionen höherer Ordnung verwenden, um die Spaltenliste zu erstellen:
Das, was Sie bisher geschrieben haben, funktioniert für einzelne Tabellen. Was ist, wenn Sie alle Tabellen in einem Schema bearbeiten möchten? SQL Scripting ist vollständig komponierbar. Sie können zusammengesetzte Anweisungen, bedingte Anweisungen und Schleifen innerhalb anderer SQL Scripting-Anweisungen verschachteln.
Was Sie hier tun werden, ist zweigeteilt:
Dieser Fehler ist verständlich. Sie haben mehrere Möglichkeiten, fortzufahren:
Eine Schlüsselkompetenz von SQL Scripting ist die Fähigkeit, Ausnahmen abzufangen und zu behandeln. Bedingungshandler werden im Deklarationsteil einer zusammengesetzten Anweisung definiert und gelten für jede Anweisung innerhalb dieser Zusammensetzung, einschließlich verschachtelter Anweisungen. Sie können bestimmte Fehlerbedingungen anhand des Namens, bestimmte SQLSTATEs, die mehrere Fehlerbedingungen behandeln, oder alle Fehlerbedingungen behandeln. Innerhalb des Körpers des Bedingungshandlers können Sie die Anweisung GET DIAGNOSTICS verwenden, um Informationen über die behandelte Ausnahme abzurufen und beliebige SQL-Skripte auszuführen, die Sie für angemessen halten, z. B. das Protokollieren des Fehlers in einem Log oder das Ausführen einer alternativen Logik zu der, die fehlgeschlagen ist. Sie können dann eine neue Fehlerbedingung SIGNAL, die ursprüngliche Bedingung RESIGNAL oder einfach die zusammengesetzte Anweisung, in der der Handler definiert ist, verlassen und mit der nächsten Anweisung fortfahren.
In unserem Skript möchten wir jede Anweisung überspringen, für die die Anweisung ALTER TABLE DEFAULT COLLATION nicht angewendet wurde, und den Namen des Objekts protokollieren.
Oben haben Sie ein administratives Skript rein in SQL entwickelt. Sie können auch ELT-Skripte schreiben und diese in Jobs umwandeln. SQL Scripting ist ein wirklich mächtiges Werkzeug, das Sie nutzen sollten.
Ob Sie ein bestehender Databricks-Benutzer sind oder von einem anderen Produkt migrieren, SQL Scripting ist eine Funktion, die Sie nutzen sollten. SQL Scripting folgt dem ANSI-Standard und ist vollständig kompatibel mit OSS Apache Spark™. SQL Scripting wird im Detail in SQL Scripting | Databricks Documentation beschrieben.
Sie können auch dieses Notebook verwenden, um sich selbst davon zu überzeugen.
(Dieser Blogbeitrag wurde mit KI-gestützten Tools übersetzt.) Originalbeitrag
