Erstellen von gespeicherten Prozeduren für DataFrames in Java

Mit der Snowpark-API können Sie gespeicherte Prozeduren für Ihren kundenspezifischen Lambda-Ausdruck in Java erstellen. Sie können diese gespeicherten Prozeduren aufrufen, um die Daten in Ihrem DataFrame zu verarbeiten.

Sie können Folgendes erstellen:

Erstellen einer temporären gespeicherten Prozedur

Sie können eine temporäre Prozedur erstellen, die nur für die aktuelle Sitzung gilt. Die temporäre Prozedur kann Folgendes sein:

  • Eine anonyme Prozedur, die Sie per Referenz aufrufen können (Call-by-Reference), indem Sie z. B. eine Variable vom Typ com.snowflake.snowpark_java.StoredProcedure, die sie repräsentiert, an den Code übergeben, der die Prozedur aufruft.

  • Eine benannte Prozedur mit einem von Ihnen zugewiesenen Namen. Sie können die Prozedur von anderem Code innerhalb der Sitzung aus über den Namen aufrufen.

Um eine temporäre Prozedur zu erstellen, registrieren Sie sie mit einer der registerTemporary-Methoden von com.snowflake.snowpark_java.SProcRegistration. Die Methode ist mehrfach überladen, um eine unterschiedliche Anzahl von Prozedurargumenten zu unterstützen. Um eine SProcRegistration-Instanz zu erhalten, rufen Sie die Methode sproc der Klasse com.snowflake.snowpark_java.Session auf.

Wenn Sie registerTemporary aufrufen, können Sie Folgendes als Argument übergeben:

  • Den Namen der Prozedur (wenn es sich um eine benannte Prozedur handelt)

  • Die Prozedur selbst als Lambda-Ausdruck

  • Parameter-Datentypen als einzelnen Wert oder als Array der Klasse com.snowflake.snowpark_java.types.DataType Lassen Sie dieses Argument weg, wenn die Prozedur, die Sie erstellen, keine Parameter hat.

    Diese sollten den in der Prozedur definierten Parametertypen entsprechen.

  • Geben Sie den Datentyp als com.snowflake.snowpark_java.types.DataType-Klasse zurück.

Sie können die Prozedur mit einer storedProcedure-Methode der Klasse com.snowflake.snowpark_java.Session aufrufen.

Erstellen einer anonymen temporären Prozedur

Um eine anonyme temporäre Prozedur zu erstellen, registrieren Sie sie als temporäre Prozedur, ohne einen Namen anzugeben. Snowflake erstellt einen versteckten Namen für seine eigene Verwendung.

Der Code im folgenden Beispiel ruft die Methode SProcRegistration.registerTemporary auf, um eine anonyme Prozedur aus einem Lambda-Ausdruck zu erstellen. Der Prozedur werden ein Session-Objekt und eine Ganzzahl als Argumente übergeben. Die Methode registriert einen Typ DataTypes.IntegerType als einzigen Parametertyp und einen Typ DataTypes.IntegerType als Rückgabetyp.

Der Prozedur selbst werden ein Session-Objekt und eine Ganzzahl als Argumente übergeben. Das Session-Argument repräsentiert einen impliziten Parameter, den der Aufrufer nicht als Argument übergeben muss.

Session session = Session.builder().configFile("my_config.properties").create();

StoredProcedure sp =
  session.sproc().registerTemporary(
    (Session spSession, Integer num) -> num + 1,
    DataTypes.IntegerType,
    DataTypes.IntegerType
  );
Copy

Der Code im folgenden Beispiel ruft die anonyme Prozedur auf und übergibt die Variablen sp und 1 als Argumente. Beachten Sie, dass das Session-Objekt ein implizites Argument ist, das nicht übergeben werden muss, wenn Sie die Prozedur aufrufen.

session.storedProcedure(sp, 1).show();
Copy

Erstellen einer benannten temporären Prozedur

Um eine benannte temporäre Prozedur zu erstellen, registrieren Sie sie als temporäre Prozedur und übergeben ihren Namen als eines der Argumente.

Der Code im folgenden Beispiel ruft die Methode registerTemporary auf, um eine benannte temporäre Prozedur namens increment aus einem Lambda-Ausdruck zu erstellen, wobei der Name der Prozedur als Argument übergeben wird. Die Methode registriert einen Typ DataTypes.IntegerType als einzigen Parametertyp und einen Typ DataTypes.IntegerType als Rückgabetyp.

Der Prozedur selbst werden ein Session-Objekt und eine Ganzzahl als Argumente übergeben. Das Session-Argument repräsentiert einen impliziten Parameter, den der Aufrufer nicht als Argument übergeben muss.

Session session = Session.builder().configFile("my_config.properties").create();

String procName = "increment";

StoredProcedure tempSP =
  session.sproc().registerTemporary(
    procName,
    (Session session, Integer num) -> num + 1,
    DataTypes.IntegerType,
    DataTypes.IntegerType
  );
Copy

Der Code im folgenden Beispiel ruft die Prozedur increment auf und übergibt den Prozedurnamen und 1 als Argumente. Beachten Sie, dass das Session-Objekt ein implizites Argument ist, das nicht übergeben werden muss, wenn Sie die Prozedur aufrufen.

session.storedProcedure(procName, 1).show();
Copy

Erstellen einer permanenten gespeicherten Prozedur

Sie können eine permanente gespeicherte Prozedur erstellen, die Sie von jeder Sitzung aus aufrufen können, auch aus einem Snowflake-Arbeitsblatt heraus.

Um eine permanente Prozedur zu erstellen, registrieren Sie sie mit einer registerPermanent-Methode der Klasse com.snowflake.snowpark_java.SProcRegistration. Die Methode ist mehrfach überladen, um eine unterschiedliche Anzahl von Prozedurargumenten zu unterstützen.

Wenn Sie registerPermanent aufrufen, übergeben Sie Folgendes als Argumente:

  • Den Namen der Prozedur

  • Die Prozedur selbst als Lambda-Ausdruck

  • Parameter-Datentypen als einzelnen Wert oder als Array der Klasse com.snowflake.snowpark_java.types.DataType Lassen Sie dieses Argument weg, wenn die Prozedur, die Sie erstellen, keine Parameter hat.

    Diese sollten den in der Prozedur definierten Parametertypen entsprechen.

  • Den Rückgabedatentyp als eine com.snowflake.snowpark_java.types.DataType-Klasse

  • Einen vorhandenen Stagingbereich, in den Snowflake die Dateien kopieren soll, die beim Kompilieren der Prozedur entstehen.

    Snowflake kopiert alle zugehörigen Daten, einschließlich Abhängigkeiten und Lambda-Funktionen. Dies muss ein permanenter Stagingbereich sein (nicht temporär für eine Sitzung), da diese gespeicherte Prozedur außerhalb der aktuellen Sitzung aufgerufen werden kann. Wenn der Vorgang später abgebrochen wird, müssen Sie die zugehörigen Dateien manuell aus dem Stagingbereich entfernen.

  • Einen booleschen Wert, der angibt, ob diese Prozedur mit Aufruferrechten ausgeführt werden soll.

    Weitere Informationen zu Aufruferrechten und Eigentümerrechten finden Sie unter Understanding Caller’s Rights and Owner’s Rights Stored Procedures.

Der Code im folgenden Beispiel ruft die Methode registerPermanent auf, um eine permanente Prozedur namens add_hundred aus einem Lambda-Ausdruck zu erstellen.

Die Methode registriert einen Typ DataTypes.IntegerType als einzigen Parametertyp und einen Typ DataTypes.IntegerType als Rückgabetyp. Sie gibt einen Stagingbereich namens sproc_libs für die Prozedur und deren Abhängigkeiten an. Sie legt auch fest, dass die Prozedur mit Aufruferrechten ausgeführt werden soll.

Der Prozedur selbst werden ein Session-Objekt und eine Ganzzahl als Argumente übergeben. Das Session-Argument repräsentiert einen impliziten Parameter, den der Aufrufer nicht als Argument übergeben muss.

Session session = Session.builder().configFile("my_config.properties").create();

String procName = "add_hundred";
String stageName = "sproc_libs";

StoredProcedure sp =
    session.sproc().registerPermanent(
        procName,
        (Session session, Integer num) -> num + 100,
        DataTypes.IntegerType,
        DataTypes.IntegerType,
        stageName,
        true
    );
Copy

Der Code im folgenden Beispiel ruft die Prozedur add_hundred über eine storedProcedure-Methode der Klasse com.snowflake.snowpark_java.Session auf. Der Aufruf übergibt als Argumente den Prozedurnamen und 1. Beachten Sie, dass das im Handler als Argument verwendete Session-Objekt ein implizites Argument ist, das Sie beim Aufruf der Prozedur nicht übergeben müssen.

session.storedProcedure(procName, 1).show();
Copy