Notes de version de la bibliothèque Snowpark pour Python pour 2024

Cet article contient les notes de version Snowpark Library for Python, y compris les éléments suivants, le cas échéant :

  • Changements de comportement

  • Nouvelles fonctionnalités

  • Corrections de bogues pour les clients

Snowflake utilise la version sémantique pour les mises à jour Snowpark Library for Python.

Version 1.13.0 (2024-02-26)

La version 1.13.0 de la bibliothèque Snowpark ajoute de nouvelles fonctionnalités.

Nouvelles fonctionnalités

  • Ajout de la prise en charge d’un argument facultatif date_part dans la fonction last_day.

  • SessionBuilder.app_name définira le query_tag après la création de la session.

  • Ajout de la prise en charge des fonctions de test locales suivantes :

    • current_timestamp

    • current_date

    • current_time

    • strip_null_value

    • upper

    • lower

    • length

    • initcap

Améliorations

  • Ajout d’une logique de nettoyage lors de l’arrêt de l’interpréteur pour fermer toutes les sessions actives.

Corrections de bogues

  • Correction d’un bogue dans DataFrame.to_local_iterator où l’itérateur pouvait produire des résultats erronés si une autre requête était exécutée avant la fin de l’itérateur en raison d’un mauvais niveau d’isolation.

  • Correction d’un bogue qui tronquait les noms de tables dans les messages d’erreur lors de l’exécution d’un plan avec les tests locaux activés.

  • Correction d’un bogue qui faisait que Session.range renvoyait un résultat vide lorsque la plage était grande.

Version 1.12.1 (2024-02-08)

La version 1.12.1 de la bibliothèque Snowpark ajoute de nouvelles fonctionnalités.

Améliorations

  • Utilisez split_blocks=True par défaut lors de la conversion to_pandas pour une allocation optimale de la mémoire. Ce paramètre est transmis à pyarrow.Table.to_pandas, ce qui permet à PyArrow de diviser l’allocation de mémoire en blocs plus petits et plus faciles à gérer au lieu d’allouer un seul bloc contigu. Il en résulte une meilleure gestion de la mémoire lorsque l’on traite des ensembles de données plus importants.

Corrections de bogues

  • Correction d’un bogue dans DataFrame.to_pandas qui provoquait une erreur lors de l’évaluation d’un dataframe avec une colonne IntergerType avec des valeurs nulles.

Version 1.12.0 (2024-01-29)

La version 1.12.0 de la bibliothèque Snowpark ajoute de nouvelles fonctionnalités.

Changements de comportement (compatible API)

  • Lors de l’analyse des types de données au cours d’une opération to_pandas , nous nous appuyons sur la valeur de précision GS pour résoudre les problèmes de précision des grandes valeurs entières. Cela peut affecter les utilisateurs lorsqu’une colonne qui était précédemment renvoyée en tant que int8 est renvoyée en tant que int64. Les utilisateurs peuvent remédier à ce problème en spécifiant explicitement des valeurs de précision pour leur colonne de retour.

  • Comportement aligné pour Session.call dans le cas des procédures stockées de table où l’exécution de Session.call ne déclencherait pas une procédure stockée à moins qu’une opération collect() ne soit effectuée.

  • StoredProcedureRegistration ajoute désormais automatiquement snowflake-snowpark-python en tant que dépendance du paquet sur la version locale de la bibliothèque du client. Une erreur est générée si le serveur ne peut pas prendre en charge cette version.

Nouvelles fonctionnalités

  • Exposition de statement_params dans StoredProcedure.__call__.

  • Ajout de deux arguments facultatifs à Session.add_import :

    • chunk_size : le nombre d’octets à hacher par morceau des fichiers chargés.

    • whole_file_hash : par défaut, seul le premier morceau de l’importation chargée est haché pour gagner du temps. Lorsque ce paramètre est défini sur True, chaque fichier chargé est entièrement haché.

  • Ajout des paramètres external_access_integrations et secrets lors de la création d’un UDAF à partir de Snowpark Python pour permettre l’intégration avec un accès externe.

  • Ajout d’une nouvelle méthode Session.append_query_tag, qui permet d’ajouter une balise supplémentaire à la balise de requête actuelle en l’ajoutant sous la forme d’une valeur séparée par des virgules.

  • Ajout d’une nouvelle méthode Session.update_query_tag, qui permet de mettre à jour une balise de requête de dictionnaire encodée JSON.

  • SessionBuilder.getOrCreate tentera désormais de remplacer le singleton qu’il renvoie lorsque l’expiration du jeton a été détectée.

  • Ajout des fonctions suivantes dans snowflake.snowpark.functions :

    • array_except

    • create_map

    • sign / signum

  • Les fonctions suivantes ont été ajoutées à DataFrame.analytics :

    • Ajout de la fonction moving_agg dans DataFrame.analytics pour permettre les agrégations mobiles telles que les sommes et les moyennes avec plusieurs tailles de fenêtres.

    • Ajout de la fonction cummulative_agg dans DataFrame.analytics pour permettre les agrégations mobiles telles que les sommes et les moyennes avec plusieurs tailles de fenêtres.

Corrections de bogues

  • Correction d’un bogue dans DataFrame.na.fill qui entraînait le remplacement erroné des valeurs booléennes par des valeurs entières.

  • Correction d’un bogue dans Session.create_dataframe où le DataFrames Snowpark créé en utilisant les DataFrames pandas ne déduisait pas correctement le type pour les colonnes d’horodatage. Le comportement est le suivant :

    • Auparavant, les colonnes d’horodatage sans fuseau horaire étaient converties en époques de nanosecondes et déduites comme LongType(), mais elles seront désormais correctement maintenues en tant que valeurs d’horodatage et déduites comme TimestampType(TimestampTimeZone.NTZ).

    • Auparavant, les colonnes d’horodatage comportant un fuseau horaire étaient déduites comme TimestampType(TimestampTimeZone.NTZ) et perdaient les informations relatives au fuseau horaire, mais elles sont désormais correctement déduites comme TimestampType(TimestampTimeZone.LTZ) et les informations relatives au fuseau horaire sont conservées correctement.

    • Définissez le paramètre de session PYTHON_SNOWPARK_USE_LOGICAL_TYPE_FOR_CREATE_DATAFRAME pour revenir à l’ancien comportement. Snowflake vous recommande de mettre à jour votre code pour l’aligner sur le comportement correct, car le paramètre sera supprimé à l’avenir.

  • Correction d’un bogue qui faisait que DataFrame.to_pandas obtenait un type décimal lorsque l’échelle n’était pas 0, et créait un objet dtype dans pandas. Au lieu de cela, nous convertissons la valeur en un type float64.

  • Correction de bogues qui aplatissaient à tort le SQL généré lorsque l’une des situations suivantes se produit :

    • DataFrame.filter() est appelé après DataFrame.sort().limit().

    • DataFrame.sort() ou filter() est appelé sur un DataFrame qui possède déjà une fonction de fenêtre ou une colonne de générateur de données dépendant de la séquence. Par exemple, df.select("a", seq1().alias("b")).select("a", "b").sort("a") n’aplatira plus la clause de tri.

    • Une fenêtre ou une colonne de générateur de données dépendant de la séquence est utilisée après DataFrame.limit(). Par exemple, df.limit(10).select(row_number().over()) n’aplatira pas la limite et la sélection dans le SQL généré.

  • Correction d’un bogue où donner un alias à une colonne DataFrame provoquait une erreur lorsque le DataFame était copié à partir d’un autre DataFrame avec une colonne possédant un alias. Par exemple,

    df = df.select(col("a").alias("b"))
    df = copy(df)
    df.select(col("b").alias("c"))  # Threw an error. Now it's fixed.
    
    Copy
  • Correction d’un bogue dans Session.create_dataframe qui faisait que le champ n’acceptant pas la valeur nulle dans un schéma n’était pas respecté pour le type booléen. Notez que cette solution n’est efficace que si l’utilisateur a le privilège de créer une table temporaire.

  • Correction d’un bogue dans le simplificateur SQL où les instructions non sélectionnées dans session.sql supprimaient une requête SQL lorsqu’elles étaient utilisées avec limit().

  • Correction d’un bogue qui soulevait une exception lorsque le paramètre de session ERROR_ON_NONDETERMINISTIC_UPDATE est true.