Verwendung von gespeicherten Verfahren in Snowflake

Verwendung von gespeicherten Verfahren in Snowflake

  • Orchestrierung
6 Minuten Lesezeit Aktualisiert Oct 29, 2020

Auf einen Blick: Gespeicherte Prozeduren in Snowflake ermöglichen es Benutzern, Sequenzen von Befehlen für Batch-Verarbeitung und Ereignisbehandlung mit JavaScript für Variablenverwaltung und Fehlerbehandlung auszuführen. Ein Tutorial zeigt, wie man Verfahren erstellt, um Bestellpreise zu aktualisieren.

  • Gespeicherte Prozeduren erleichtern batchartige Operationen.
  • JavaScript ist erforderlich, um gespeicherte Prozeduren in Snowflake zu erstellen.

Snowflake unterstützt gespeicherte Prozeduren. Speicherprozeduren erlauben es, eine Reihe von Befehlen zu schreiben und sie für spätere Nutzung zu speichern.

Wann sollte man ein gespeichertes Verfahren verwenden

Wir haben zuvor benutzerdefinierte Funktionen (UDFs) behandelt, die man in einer Spalte verwendet. Eine gespeicherte Prozedur läuft von selbst. Mit anderen Worten: Sie geht ab und "tut etwas", wie zum Beispiel eine Tabelle zu aktualisieren. Deshalb sind gespeicherte Prozeduren gut für Batch-ähnliche Aktionen. Man kann gespeicherte Prozeduren auch bedingt an Datenbankereignisse verknüpfen, ähnlich wie bei anderen Datenbankprodukten. Data Engineers können auch eine Datenpipeline mit gespeicherten Prozeduren erstellen. (Ein Thema, das wir in den folgenden Beiträgen ausführlich behandeln werden.)

JavaScript für gespeicherte Prozeduren

Snowflake-gespeicherte Prozeduren müssen in JavaScript geschrieben sein. Es ist sinnvoll, dass man neben SQL eine Programmiersprache verwenden muss, da SQL keine Variablenzuweisung unterstützt. Man würde Variablen erstellen, um Berechnungen usw. durchzuführen. Mach dir keine Sorgen, wenn du JavaScript nicht kennst – du kannst einfach Standardcode kopieren und SQL an die richtige Stelle setzen. SQL ist wirklich der einzige Teil, der größtenteils variiert. Es gibt also nicht viel, das du verstehen musst. Snowflake-JavaScript ist minimales JavaScript. Es erlaubt es nicht, externe Bibliotheken der Sprache zu importieren. Du kannst also Arrays, Variablen, einfache Objekte erstellen und es gibt eine Fehlerbehandlung. Aber du könntest zum Beispiel keine mathematischen Funktionen aus der Math-Bibliothek verwenden

Zeile-für-Zeile-Tutorial: Gespeichertes Verfahren

Wir fügen hier ein einfaches Beispiel hinzu und erklären jede Zeile des Codes. (Sie benötigen also keine Beispieldaten.) Sehen Sie sich die untenstehende Funktion an. Beachten Sie Folgendes:

  • Du gibst Parameter in die Funktion Funktionsname (Parametertyp) ein
  • Man ruft die Funktion auf, indem man Aufruf Funktionsname(Parameter) schreibt.
  • Die Funktion muss einen Wert zurückgeben, selbst wenn sie nur ein Update durchführt. Andernfalls erhält man das Fehlerergebnis NULL in einer nicht nullbaren Spalte. Das liegt daran, dass der Arbeitsblatt-Editor in Snowflake etwas anzeigen muss, selbst wenn es ein Nullwert (Nan) ist.
  • Das Grundverfahren besteht darin, execute() zu verwenden, um SQL-Code auszuführen, den du in einer Zeichenfolge gespeichert hast. Datenbankprogrammierer wissen, dass dadurch ein sogenanntes Resultset erzeugt wird. Du musst also den zuerst zurückgegebenen Wert in den Scope ziehen, indem du next() aufrufst. Es gibt ein Ergebnisset mit einer Select-Anweisung, delete, insert und sogar update – auch wenn du nicht erwarten würdest, dass diese Werte zurückgeben.
  • Wenn die SQL-Anweisung mehr als eine Zeile zurückgibt, wie bei einem SELECT, würdest du eine Zeit (rs.next()) verwenden, um die Ergebnisse in einer Schleife durchzugehen.
  • Aus welchem Grund auch immer können die Parameter Kleinbuchstaben sein, müssen aber im JavaScript-Code Großbuchstaben sein. Du bekommst einen Fehler, wenn du versuchst, Kleinbuchstaben zu verwenden.
    create or replace procedure setprice(ORDERNUMBER varchar(100))
    returns float 
    not null
    language javascript
    as
    $$
  
     
    sql_command = "update orders set price = 2 where ordernumber = " + ORDERNUMBER   ;
    
   
    var stmt = snowflake.createStatement(
           {
           sqlText: sql_command
           }
        );
    var res = stmt.execute();
    res.next()
    
    price = res.getColumnValue(1);
    return price;
     
  
    $$
    ;
 
 call setprice(489)

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus Orchestrierung

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.