Création de procédures stockées pour DataFrames dans Java

En utilisant l’API Snowpark, vous pouvez créer des procédures stockées pour votre expression lambda personnalisée dans Java. Vous pouvez appeler ces procédures stockées pour traiter les données de votre site DataFrame.

Vous pouvez créer :

Création d’une procédure stockée temporaire

Vous pouvez créer une procédure temporaire qui ne durera que pour la session en cours. La procédure temporaire peut être :

  • Une procédure anonyme que vous pouvez appeler par référence, par exemple en passant une variable de type com.snowflake.snowpark_java.StoredProcedure la représentant au code qui appelle la procédure.

  • Une procédure nommée avec un nom que vous attribuez. Vous pouvez appeler la procédure par son nom à partir d’autres codes au sein de la session.

Pour créer une procédure temporaire, vous l’enregistrez avec l’une des méthodes registerTemporary de com.snowflake.snowpark_java.SProcRegistration. La méthode est surchargée plusieurs fois pour prendre en charge différents nombres d’arguments de procédure. Pour obtenir une instance de SProcRegistration, appelez la méthode sproc de la classe com.snowflake.snowpark_java.Session.

Lorsque vous appelez registerTemporary, vous pouvez transmettre les arguments suivants :

  • Le nom de la procédure (lorsqu’il s’agit d’une procédure nommée).

  • La procédure elle-même en tant qu’expression lambda.

  • Les types de données des paramètres sous forme d’un seul ou d’un tableau de la classe com.snowflake.snowpark_java.types.DataType. Omettez cet argument si la procédure que vous créez n’a pas de paramètres.

    Ceux-ci doivent correspondre aux types de paramètres définis dans la procédure.

  • Renvoyer le type de données sous la forme d’une classe com.snowflake.snowpark_java.types.DataType.

Vous pouvez appeler la procédure avec une méthode storedProcedure de la classe com.snowflake.snowpark_java.Session.

Création d’une procédure temporaire anonyme

Pour créer une procédure temporaire anonyme, vous l’enregistrez en tant que procédure temporaire sans spécifier de nom. Snowflake créera un nom caché pour son propre usage.

Le code de l’exemple suivant appelle la méthode SProcRegistration.registerTemporary pour créer une procédure anonyme à partir d’une expression lambda. La procédure prend comme arguments un objet Session et un nombre entier. La méthode enregistre un DataTypes.IntegerType comme type de paramètre unique et un DataTypes.IntegerType comme type de retour.

La procédure elle-même prend pour arguments un objet Session et un nombre entier. L’argument Session représente un paramètre implicite que les appelants n’ont pas besoin de passer en tant qu’argument.

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

Le code de l’exemple suivant appelle la procédure anonyme, en passant la variable sp et 1 comme arguments. Notez que l’objet Session est un argument implicite que vous n’avez pas besoin de transmettre lorsque vous appelez la procédure.

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

Création d’une procédure temporaire nommée

Pour créer une procédure temporaire nommée, vous l’enregistrez en tant que procédure temporaire, en lui transmettant son nom comme l’un des arguments.

Le code de l’exemple suivant appelle la méthode registerTemporary pour créer une procédure temporaire nommée increment à partir d’une expression lambda, en passant le nom de la procédure comme argument. La méthode enregistre un DataTypes.IntegerType comme type de paramètre unique et un DataTypes.IntegerType comme type de retour.

La procédure elle-même prend pour arguments un objet Session et un nombre entier. L’argument Session représente un paramètre implicite que les appelants n’ont pas besoin de passer en tant qu’argument.

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

Le code de l’exemple suivant appelle la procédure increment, en lui transmettant le nom de la procédure et 1 comme arguments. Notez que l’objet Session est un argument implicite que vous n’avez pas besoin de transmettre lorsque vous appelez la procédure.

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

Création d’une procédure stockée permanente

Vous pouvez créer une procédure stockée permanente que vous pouvez appeler à partir de n’importe quelle session, y compris à partir d’une feuille de calcul Snowflake.

Pour créer une procédure permanente, vous l’enregistrez avec une méthode registerPermanent de la classe com.snowflake.snowpark_java.SProcRegistration. La méthode est surchargée plusieurs fois pour prendre en charge différents nombres d’arguments de procédure.

Lorsque vous appelez registerPermanent, vous transmettez les arguments suivants :

  • Nom de la procédure.

  • La procédure elle-même en tant qu’expression lambda.

  • Les types de données des paramètres sous forme d’un seul ou d’un tableau de la classe com.snowflake.snowpark_java.types.DataType. Omettez cet argument si la procédure que vous créez n’a pas de paramètres.

    Ceux-ci doivent correspondre aux types de paramètres définis dans la procédure.

  • Le type de données de retour sous forme de classe com.snowflake.snowpark_java.types.DataType.

  • Une zone de préparation existante vers laquelle Snowflake doit copier les fichiers résultant de la compilation de la procédure.

    Snowflake copiera toutes les données connexes, y compris les dépendances et les fonctions lambda. Il doit s’agir d’une zone de préparation permanente (et non d’une zone temporaire de session), car cette procédure stockée peut être invoquée en dehors de la session en cours. Si la procédure est abandonnée par la suite, vous devez supprimer manuellement les fichiers connexes de la zone de préparation.

  • Valeur booléenne indiquant si cette procédure doit être exécutée avec les droits de l’appelant.

    À propos des droits de l’appelant et des droits du propriétaire, consultez Understanding Caller’s Rights and Owner’s Rights Stored Procedures.

Le code de l’exemple suivant appelle la méthode registerPermanent pour créer une procédure permanente appelée add_hundred à partir d’une expression lambda.

La méthode enregistre un DataTypes.IntegerType comme type de paramètre unique et un DataTypes.IntegerType comme type de retour. Il précise une zone de préparation appelée sproc_libs pour la procédure et ses dépendances. Il précise également que la procédure doit être exécutée avec les droits de l’appelant.

La procédure elle-même prend pour arguments un objet Session et un nombre entier. L’argument Session représente un paramètre implicite que les appelants n’ont pas besoin de passer en tant qu’argument.

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

Le code de l’exemple suivant appelle la procédure add_hundred à l’aide d’une méthode storedProcedure de la classe com.snowflake.snowpark_java.Session. L’appel transmet le nom de la procédure et 1 comme arguments. Notez que l’objet Session utilisé comme argument dans le gestionnaire est un argument implicite que vous ne devez pas transmettre lorsque vous appelez la procédure.

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