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

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.

Voir Guide du développeur Snowpark pour Python pour la documentation.

Avertissement

Python 3.8 ayant atteint sa fin de vie, des avertissements d’obsolescence seront déclenchés lors de l’utilisation de snowpark-python avec Python 3.8. Pour plus d’informations, voir Prise en charge de l’environnement d’exécution Snowflake Python. Snowpark Python 1.24.0 sera la dernière version du client et du serveur à prendre en charge Python 3.8, conformément à la politique d’Anaconda. Passez vos objets Python 3.8 existants vers la version Python 3.9 ou une version plus récente.

Version 1.37.0 (18 août 2025)

Nouvelles fonctionnalités

  • Ajout de la prise en charge des xpath`fonctions suivantes dans :code:`functions.py :

    • xpath

    • xpath_string

    • xpath_boolean

    • xpath_int

    • xpath_float

    • xpath_double

    • xpath_long

    • xpath_short

  • Ajout de la prise en charge du paramètre use_vectorized_scanner dans la fonction Session.write_arrow().

  • Le profileur DataFrame ajoute les informations suivantes à chaque requête : describe query time, execution time et sql query text. Pour consulter ces informations, appelez session.dataframe_profiler.enable() et appelez get_execution_profile sur un DataFrame.

  • Ajout de la prise en charge de DataFrame.col_ilike.

  • Ajout de la prise en charge des appels de procédures stockées non bloquants qui renvoient les objets AsyncJob.

    • Ajout du paramètre block: bool = True à Session.call(). Si block=False, renvoie un AsyncJob au lieu de bloquer jusqu’à la fin.

    • Ajout du paramètre block: bool = True à StoredProcedure.__call__() pour la prise en charge asynchrone des procédures stockées nommées et anonymes.

    • Ajout de Session.call_nowait() qui est équivalent à Session.call(block=False).

Corrections de bogues

  • Correction d’un bogue dans la zone de préparation d’optimisation CTE où deepcopy des plans internes entraînerait un pic de mémoire lorsqu’un DataFrame est créé localement en utilisant session.create_dataframe() et engendrerait de grandes quantités de données d’entrée.

  • Correction d’un bogue dans DataFrameReader.parquet où l’option ignore_case dans le:code:infer_schema_options n’était pas respectée.

  • Correction d’un bogue à cause duquel to_pandas() avait un format de nom de colonne différent lorsque le format de résultat de la requête est défini sur JSON et ARROW.

Dépréciations

  • pkg_resources rendu obsolète.

Mises à jour des dépendances

  • Ajout d’une dépendance sur protobuf<6.32

Mises à jour de l’API pandas Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge du transfert efficace des données entre Snowflake et <Ray avec la méthode DataFrame.set_backend. La version installée de modin doit être au moins 0.35.0, et ray doit être installé.

Mises à jour des dépendances

  • Mise à jour des versions de modin prises en charge vers >=0.34.0, = 0,33.0 et <0.35.0.

  • Ajout de la prise en charge de pandas 2.3 lorsque la version de modin installée est 0.35.0 ou supérieure.

Corrections de bogues

  • Correction d’un problème en mode d’exécution hybride (Avant-première privée) où pd.to_datetime et pd.to_timedelta déclenchaient de manière inattendue IndexError.

  • Correction d’un bogue à cause duquel pd.explain_switch déclenche IndexError ou renvoie None s’il est appelé avant que toute opération de basculement potentielle soit effectuée.

Version 1.36.0 (5 août 2025)

Nouvelles fonctionnalités

  • Session.create_dataframe accepte désormais des arguments de type mot-clé qui sont transmis dans l’appel interne à Session.write_pandas ou Session.write_arrow lors de la création d’un DataFrame depuis un pandas DataFrame ou une table pyarrow.

  • Ajout de nouvelles APIs pour AsyncJob :

    • AsyncJob.is_failed() renvoie un valeur bool indiquant si la tâche est en échec. Peut être utilisé en combinaison avec AsyncJob.is_done() pour déterminer si une tâche est terminée et erronée.

    • AsyncJob.status() renvoie une chaîne représentant l’état actuel de la requête (par exemple, « RUNNING », « SUCCESS », « FAILED_WITH_ERROR ») pour une surveillance détaillée sans appeler result().

  • Ajout d’un profileur DataFrame. Pour l’utiliser, vous pouvez appeler get_execution_profile() sur le DataFrame souhaité. Ce profileur rend compte des requêtes exécutées pour évaluer un DataFrame et les statistiques sur chacun des opérateurs de requête. Il s’agit actuellement d’une fonctionnalité expérimentale.

  • Ajout de la prise en charge des fonctions suivantes dans functions.py :

    • ai_sentiment

  • Mise à jour de l’interface pour la fonctionnalité expérimentale context.configure_development_features. Toutes les fonctions de développement sont désactivées par défaut, sauf si elles sont explicitement activées par l’utilisateur.

Améliorations

  • Améliorations de l’estimation des lignes de l’exécution hybride et réduction des appels exigeants.

  • Ajout d’une nouvelle variable de configuration pour contrôler les coûts de transfert hors de Snowflake lors de l’utilisation d’une exécution hybride.

  • Ajout de la prise en charge de la création des UDFs/UDTFs permanentes et immuables avec DataFrame/Série/GroupBy.apply, mappent et transforment en transmettant l’argument de mot-clé snowflake_udf_params.

  • Ajout de la prise en charge de mapping np.unique dans DataFrame et Entrées de séries en utilisant pd.unique.

Corrections de bogues

  • Correction d’un problème où le plugin Snowpark pandas se désactivait inconditionnellement AutoSwitchBackend même lorsque les utilisateurs l’avaient explicitement configuré de manière programmatique ou avec des variables d’environnement.

Version 1.35.0 (24 juillet 2025)

Nouvelles fonctionnalités

  • Ajout de la prise en charge des fonctions suivantes dans functions.py :

    • ai_embed

    • try_parse_json

Améliorations

  • Amélioration du paramètre query dans DataFrameReader.dbapi (Avant-première privée) pour que les parenthèses ne soient pas nécessaires autour de la requête.

  • Amélioration de l’expérience d’erreur dans DataFrameReader.dbapi (Avant-première privée) pour les exceptions levées lors de l’inférence du schéma de la source de données cible.

Corrections de bogues

  • Correction d’un bogue dans DataFrameReader.dbapi (Avant-première privée) qui fait échouer dbapi avec le code de sortie de processus 1 dans une procédure stockée Python.

  • Correction d’un bogue dans DataFrameReader.dbapi (Avant-première privée) où custom_schema accepte un schéma illégal.

  • Correction d’un bogue dans DataFrameReader.dbapi (Avant-première privée) où custom_schema ne fonctionne pas lors de la connexion à Postgres et MySQL.

  • Correction d’un bogue dans l’inférence de schéma qui l’entraînait à échouer pour les zones de préparation externes.

Mises à jour des tests locaux Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge de tests locaux pour la lecture de fichiers avec SnowflakeFile. La prise en charge des tests utilise des chemins de fichiers locaux, la sémantique Snow URL (snow://...), des zones de préparation de cadre de test local et des zones de préparation Snowflake (@stage/file_path).

Version 1.34.0 (14 juillet 2025)

Nouvelles fonctionnalités

  • Ajout d’une nouvelle option TRY_CAST dans DataFrameReader. Lorsque TRY_CAST est True, les colonnes sont groupées dans un TRY_CAST au lieu d’une conversion matérielle lors du chargement des données.

  • Ajout d’une nouvelle option USE_RELAXED_TYPES au INFER_SCHEMA_OPTIONS de DataFrameReader. Lorsqu’elle est définie sur True, cette option convertit toutes les chaînes en chaînes de longueur maximale et tous les types numériques en DoubleType.

  • Ajout d’améliorations de débogabilité pour valider immédiatement les métadonnées des schémas de dataframe. Activez-la en utilisant snowflake.snowpark.context.configure_development_features().

  • Ajout d’une nouvelle fonction snowflake.snowpark.dataframe.map_in_pandas qui permet aux utilisateurs de mapper une fonction à travers un dataframe. La fonction de mappage prend un itérateur de pandas DataFrames en entrée et en fournit un en sortie.

  • Ajout d’un ttl cache pour décrire les requêtes. Les requêtes répétées dans un intervalle de 15 secondes utilisent la valeur mise en cache plutôt que d’interroger Snowflake.

  • Ajout d’un paramètre fetch_with_process dans DataFrameReader.dbapi (PrPr) pour activer le multitraitement pour la récupération de données en parallèle dans l’ingestion locale. Par défaut, l’ingestion locale utilise le multithreading. Le multitraitement peut améliorer les performances pour les tâches liées aux CPU, telles que la génération de fichiers Parquet.

  • Ajout d’une nouvelle fonction snowflake.snowpark.functions.model qui permet aux utilisateurs de nommer les méthodes d’un modèle.

Améliorations

  • Ajout de la prise en charge de la validation des lignes à l’aide d’un schéma XSD utilisant l’option rowValidationXSDPath lors de la lecture de fichiers XML avec une balise de ligne utilisant l’option rowTag.

  • Amélioration de la génération de SQL pour que session.table().sample() génère une instruction SQL.

  • Ajout de la prise en charge de l’expression de colonne complexe comme entrée pour functions.explode.

  • Ajout d’améliorations de débogabilité pour montrer à quelles lignes Python une erreur de compilation SQL correspond. Activez-le en utilisant snowflake.snowpark.context.configure_development_features(). Cette fonctionnalité dépend également des collections AST à activer dans la session, ce qui peut être fait en utilisant session.ast_enabled = True.

  • Définissez enforce_ordering=True lors de l’appel de to_snowpark_pandas():code: à partir d’un DataFrame Snowpark contenant des requêtes DML/DDL au lieu de renvoyer une NotImplementedError.

Corrections de bogues

  • Correction d’un bogue causé par une validation redondante lors de la création d’une table Iceberg.

  • Correction d’un bogue dans DataFrameReader.dbapi (Avant-première privée), où la fermeture du curseur ou de la connexion pouvait générer de manière inattendue une erreur et mettre fin au programme.

  • Correction d’erreurs de colonnes ambiguës lors de l’utilisation de fonctions de table dans DataFrame.select() dont les colonnes de sortie correspondent aux colonnes d’entrée du DataFrame. Cette amélioration fonctionne lorsque les colonnes DataFrame sont fournies sous la forme d’objets Column.

  • Correction d’un bogue où le fait d’avoir une valeur NULL dans une colonne avec desDecimalTypes convertissait la colonne en FloatTypes, entraînant une perte de précision.

Mises à jour des tests locaux Snowpark

  • Correction d’un bogue lors du traitement des fonctions fenêtrées qui entraînait une indexation incorrecte des résultats.

  • Lorsqu’un numérique scalaire sera transmis à fillna, Snowflake ignorera les colonnes non numériques au lieu de produire une erreur.

Mises à jour de l’API pandas Snowpark

Nouvelles fonctionnalités

  • Prise en charge de DataFrame.to_excel et Series.to_excel.

  • Prise en charge de pd.read_feather, pd.read_orc et pd.read_stata.

  • Ajout de la prise en charge de pd.explain_switch() pour renvoyer des informations de débogage sur les décisions d’exécution hybride.

  • Assistance pd.read_snowflake lorsque le backend global modin est Pandas.

  • Prise en charge de pd.to_dynamic_table, pd.to_iceberg et pd.to_view.

Améliorations

  • Ajout de la télémétrie modin sur les appels API et les compartiments de moteur hybrides.

  • Afficher des messages d’erreur plus utiles aux utilisateurs de Snowflake Notebook lorsque les versions modin ou pandas ne correspondent pas à nos exigences.

  • Ajout d’une protection des types de données aux fonctions de coûts pour le mode d’exécution hybride (Avant-première privée) qui vérifie la compatibilité des types de données.

  • Ajout du basculement automatique vers le backend pandas en mode d’exécution hybride (Avant-première privée) pour de nombreuses méthodes qui ne sont pas directement implémentées dans pandas on Snowflake.

  • Définition du type et d’autres champs standard pour pandas sur la télémétrie Snowflake.

Mises à jour des dépendances

  • Ajout de tqdm et ipywidgets en tant que dépendances afin que des barres de progression apparaissent lorsque l’utilisateur passe d’un backend à un autre.

  • Mise à jour des versions modin prises en charges vers >=0.33.0 et <0.35.0 (was previously >= 0.32.0 et <0.34.0).

Corrections de bogues

  • Correction d’un bogue dans le mode d’exécution hybride (Avant-première privée) où certaines opérations de séries généraient des TypeError: numpy.ndarray object is not callable.

  • Correction d’un bogue dans le mode d’exécution hybride (Avant-première privée) où l’appel d’opérations numpy comme np.where sur les objets modins avec le backend Pandas déclenchait une AttributeError. Ce correctif nécessite la version 0.34.0 de modin ou ultérieure.

  • Correction d’un problème dans df.melt où les valeurs résultantes possédaient un suffixe supplémentaire appliqué.

Version 1.33.0 (2025-06-19)

Nouvelles fonctionnalités

  • Ajout de la prise en charge de MySQL dans DataFrameWriter.dbapi (Avant-première privée) pour Parquet et l’ingestion basée sur les UDTF.

  • Ajout de la prise en charge de PostgreSQL dans DataFrameReader.dbapi (Avant-première privée) pour Parquet et l’ingestion basée sur les UDTF.

  • Ajout de la prise en charge de Databricks dans DataFrameWriter.dbapi (Avant-première privée) pour l’ingestion basée sur les UDTF, se renforçant avec d’autres mentions de la prise en charge de Databricks.

  • Ajout de la prise en charge à DataFrameReader pour activer l’utilisation de PATTERN lors de la lecture de fichiers où INFER_SCHEMA est activé.

  • Ajout de la prise en charge des fonctions suivantes optimisées par l’AI dans:code:functions.py :

    • ai_complete

    • ai_similarity

    • ai_summarize_agg (à l’origine summarize_agg)

    • différentes options de configuration pour ai_classify

  • Ajout de la prise en charge de plus d’options lors de la lecture de fichiers XML avec une balise de ligne utilisant l’option rowTag.

    • Ajout de la prise en charge de la suppression des préfixes d’espace de noms des noms de colonnes à l’aide de l’option ignoreNamespace.

    • Ajout de la prise en charge de la spécification du préfixe de la colonne d’attributs dans la table de résultats à l’aide de l’option attributePrefix.

    • Ajout de la prise en charge de l’exclusion des attributs de l’élément XML utilisant l’option excludeAttributes.

    • Ajout de la prise en charge de la spécification du nom de colonne pour la valeur lorsqu’il y a des attributs dans un élément qui n’a pas d’éléments enfants utilisant l’option valueTag.

    • Ajout de la prise en charge de la spécification de la valeur à traiter comme une valeur nulle à l’aide de l’option nullValue.

    • Ajout de la prise en charge de la spécification de l’encodage des caractères pour le fichier XML à l’aide de l’option charset.

    • Ajout de la prise en charge du fait d’ignorer les espaces blancs environnants dans l’élément XML à l’aide de l’option ignoreSurroundingWhitespace.

  • Ajout de la prise en charge du paramètre return_dataframe dans Session.call, qui peut être utilisé pour définir le type de renvoi des fonctions sur un objet DataFrame.

  • Ajout d’un nouvel argument à Dataframe.describe appelé strings_include_math_stats, qui déclenche le calcul stddev et mean pour les colonnes de type chaîne.

  • Ajout de la prise en charge de la récupération des Edge.properties lors de la récupération de la lignée de DGQL dans DataFrame.lineage.trace.

  • Ajout d’un paramètre table_exists dans DataFrameWriter.save_as_table qui permet de spécifier si une table existe déjà. Cela permet d’ignorer une recherche dans la table qui peut s’avérer coûteuse.

Corrections de bogues

  • Correction d’un bogue dans DataFrameReader.dbapi (Avant-première privée) où le create_connection définie comme fonction locale était incompatible avec le multitraitement.

  • Correction d’un bogue dans DataFrameReader.dbapi (Avant-première privée) où le type Databricks TIMESTAMP était converti en type Snowflake TIMESTAMP_NTZ, lequel devrait être de type TIMESTAMP_LTZ.

  • Correction d’un bogue dans DataFrameReader.json où des lectures répétées avec le même objet de lecteur créaient des colonnes mal citées.

  • Correction d’un bogue dans DataFrame.to_pandas() qui entraînait l’abandon des noms de colonnes lors de la conversion d’un DataFrame qui ne provient pas d’une instruction de sélection.

  • Correction d’un bogue à cause duquel DataFrame.create_or_replace_dynamic_table signalait une erreur lorsque le DataFrame contenait une UDTF et SELECT * dans la UDTF n’était pas analysé correctement.

  • Correction d’un bogue où les colonnes converties ne pouvaient pas être utilisées dans la clause valeurs des fonctions.

Améliorations

  • Amélioration du message d’erreur pour Session.write_pandas() et Session.create_dataframe() lorsque le pandas d’entrée DataFrame n’a pas de colonne.

  • Amélioration de DataFrame.select lorsque les arguments contiennent une fonction de table avec des colonnes de sortie qui coïncident avec les colonnes du DataFrame actuel. Avec l’amélioration, si l’utilisateur fournit des colonnes non coïncidentes dans df.select("col1", "col2", table_func(...)) comme arguments de chaîne, la requête générée par le client Snowpark ne lèvera pas d’erreur de colonne ambiguë.

  • Amélioration de DataFrameReader.dbapi (Avant-première privée) pour utiliser l’ingestion en mémoire basée sur Parquet et améliorer les performances et la sécurité.

  • Amélioration de DataFrameReader.dbapi (Avant-première privée) pour utiliser MATCH_BY_COLUMN_NAME=CASE_SENSITIVE dans l’opération de copie dans la table.

Mises à jour des tests locaux Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge des URLs snow (snow://) dans le test de fichier local.

Corrections de bogues

  • Correction d’un bogue dans Column.isin qui entraînait un filtrage incorrect des données jointes ou précédemment filtrées.

  • Correction d’un bogue dans :code:`snowflake.snowpark.functions.concat_ws`ce qui entraînait un index incorrect des résultats.

Mises à jour de l’API pandas Snowpark

Mises à jour des dépendances

  • Mise à jour de la contrainte de dépendance de modin de 0.32.0 à >=0.32.0, <0.34.0. La dernière version testée avec Snowpark pandas est modin 0.33.1.

Nouvelles fonctionnalités

  • Ajout de la prise en charge de l’Exécution hybride (Avant-première privée). En exécutant from modin.config import AutoSwitchBackend; AutoSwitchBackend.enable(), pandas on Snowflake choisit automatiquement d’exécuter certaines opérations pandas localement ou sur Snowflake. Cette fonction est désactivée par défaut.

Améliorations

  • Définition de la valeur par défaut du paramètre index sur:code:False pour DataFrame.to_view, Series.to_view, DataFrame.to_dynamic_table et Series.to_dynamic_table.

  • Ajout de l’option iceberg_version aux fonctions de création de table.

  • Réduction du nombre de requêtes pour de nombreuses opérations, dont:code:insert, repr et groupby, qui émettaient précédemment une requête pour récupérer la taille des données d’entrée.

Corrections de bogues

  • Correction d’un bogue dans Series.where lorsque le paramètre other est un Series sans nom.

Version 1.32.0 (2025-05-15)

Améliorations

  • L’invocation des procédures du système Snowflake n’entraîne pas d’appel supplémentaire à describe procedure pour vérifier le type de retour de la procédure.

  • Ajout de la prise en charge de Session.create_dataframe() avec l’URL de la zone de préparation et le type de données FILE.

  • Prise en charge de différents modes de traitement des enregistrements XML corrompus lors de la lecture d’un fichier XML à l’aide de session.read.option('mode', <mode>), option('rowTag', <tag_name>).xml(<stage_file_path>). Actuellement, PERMISSIVE, DROPMALFORMED et FAILFAST sont pris en charge.

  • Amélioration du message d’erreur du lecteur XML lorsque ROWTAG spécifié n’est pas trouvé dans le fichier.

  • Amélioration de la génération de requêtes pour Dataframe.drop afin d’utiliser SELECT * EXCLUDE () pour exclure les colonnes supprimées. Pour activer cette fonction, définissez session.conf.set("use_simplified_query_generation", True).

  • Ajout de la prise en charge de VariantType à StructType.from_json.

Corrections de bogues

  • Correction d’un bogue dans DataFrameWriter.dbapi (Aperçu privé) où les noms de colonnes unicode ou entre guillemets doubles dans les bases de données externes provoquent des erreurs parce qu’ils ne sont pas cités correctement.

  • Correction d’un bogue où les champs nommés dans les données imbriquées de OBJECT pouvaient provoquer des erreurs lorsqu’ils contenaient des espaces.

Mises à jour des tests locaux Snowpark

Corrections de bogues

  • Correction d’un bogue dans snowflake.snowpark.functions.rank qui ne respectait pas le sens du tri.

  • Correction d’un bogue dans snowflake.snowpark.functions.to_timestamp_* qui provoquait des résultats incorrects sur les données filtrées.

Mises à jour de l’API pandas Snowpark

Nouvelles fonctionnalités

  • Prise en charge des valeurs dict dans Series.str.get, Series.str.slice et Series.str.__getitem__ (Series.str[...]).

  • Ajout de la prise en charge de DataFrame.to_html.

  • Prise en charge de DataFrame.to_string et Series.to_string.

  • Ajout de la prise en charge de la lecture de fichiers à partir de compartiments S3 à l’aide de pd.read_csv.

Améliorations

  • Faites de iceberg_config un paramètre obligatoire pour DataFrame.to_iceberg et Series.to_iceberg.

Version 1.31.0 (2025-04-24)

Nouvelles fonctionnalités

  • Ajout de la prise en charge de l’autorisation restricted caller de l’argument execute_as dans StoredProcedure.register():code:.

  • Prise en charge des instructions de non-sélection dans DataFrame.to_pandas().

  • La prise en charge du paramètre artifact_repository a été ajoutée à Session.add_packages, Session.add_requirements, Session.get_packages, Session.remove_package et Session.clear_packages.

  • Ajout de la prise en charge de la lecture d’un fichier XML à l’aide d’une balise de ligne par session.read.option('rowTag', <tag_name>).xml(<stage_file_path>) (expérimental).

    • Chaque enregistrement XML est extrait sous la forme d’une ligne distincte.

    • Chaque champ de cet enregistrement devient une colonne distincte de type VARIANT, qui peut faire l’objet d’une requête à l’aide de la notation par points, par exemple col(a.b.c).

  • Ajout de mises à jour sur DataFrameReader.dbapi (PrPr) :

    • Le paramètre fetch_merge_count a été ajouté pour optimiser les performances en fusionnant plusieurs données dans un seul fichier Parquet.

    • Ajout de la prise en charge de Databricks.

    • Ajout de la prise en charge de l’ingestion avec Snowflake UDTF.

  • Ajout de la prise en charge des fonctions suivantes, activées par AI, dans functions.py (Aperçu privé) :

    • prompt

    • ai_filter (ajout de la prise en charge de la fonction prompt() et des fichiers image, et modification du nom du deuxième argument de expr à file)

    • ai_classify

Améliorations

  • Changement de nom du paramètre relaxed_ordering en enforce_ordering pour DataFrame.to_snowpark_pandas. De même, la nouvelle valeur par défaut est enforce_ordering=False, ce qui a l’effet inverse de la valeur par défaut précédente, relaxed_ordering=False.

  • Amélioration des performances de lecture de DataFrameReader.dbapi (PrPr) en définissant la valeur par défaut du paramètre fetch_size sur 1000.

  • Améliorez le message d’erreur pour l’erreur d’identificateur SQL non valide en suggérant les identificateurs potentiellement correspondants.

  • Réduction du nombre de requêtes de description émises lors de la création d’un DataFrame à partir d’une table Snowflake à l’aide de session.table.

  • Amélioration des performances et de la précision de DataFrameAnalyticsFunctions.time_series_agg().

Corrections de bogues

  • Correction d’un bogue dans DataFrame.group_by().pivot().agg lorsque la colonne pivot et la colonne agrégée sont identiques.

  • Correction d’un bogue dans DataFrameReader.dbapi (PrPr) où une erreur TypeError était soulevée lorsque create_connection renvoyait un objet de connexion d’un type de pilote non pris en charge.

  • Correction d’un bogue où l’appel à df.limit(0) ne s’appliquait pas correctement.

  • Correction d’un bogue dans DataFrameWriter.save_as_table qui provoquait des erreurs dans les noms réservés lors de l’utilisation du mode append.

Dépréciations

  • Prise en charge obsolète de Python3.8.

  • Argument déprécié sliding_interval dans DataFrameAnalyticsFunctions.time_series_agg().

Mises à jour des tests locaux Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge de l’expression Interval à Window.range_between.

  • Ajout de la prise en charge de la fonction array_construct.

Corrections de bogues

  • Correction d’un bogue dans les tests locaux où le répertoire transitoire __pycache__ était copié involontairement pendant l’exécution de la procédure stockée via l’importation.

  • Correction d’un bogue dans les tests locaux qui créait des résultats incorrects pour les appels à Column.like.

  • Correction d’un bogue dans les tests locaux qui faisait que Column.getItem et snowpark.snowflake.functions.get renvoyaient IndexError au lieu de null.

  • Correction d’un bogue dans les tests locaux où l’appel à df.limit(0) ne s’appliquait pas correctement.

  • Correction d’un bogue dans les tests locaux où un Table.merge dans une table vide provoquait une exception.

Mises à jour de l’API pandas Snowpark

Mises à jour des dépendances

  • Mise à jour de modin de 0.30.1 à 0.32.0.

  • Ajout de la prise en charge de numpy 2.0 et plus.

Nouvelles fonctionnalités

  • Prise en charge de DataFrame.create_or_replace_view et Series.create_or_replace_view.

  • Prise en charge de DataFrame.create_or_replace_dynamic_table et Series.create_or_replace_dynamic_table.

  • Prise en charge de DataFrame.to_view et Series.to_view.

  • Prise en charge de DataFrame.to_dynamic_table et Series.to_dynamic_table.

  • Ajout de la prise en charge de DataFrame.groupby.resample pour les agrégations max, mean, median, min et sum.

  • Ajout de la prise en charge de la lecture des fichiers de zone de préparation avec :

    • pd.read_excel

    • pd.read_html

    • pd.read_pickle

    • pd.read_sas

    • pd.read_xml

  • Prise en charge de DataFrame.to_iceberg et Series.to_iceberg.

  • Prise en charge des valeurs dict dans Series.str.len.

Améliorations

  • Améliorez les performances de DataFrame.groupby.apply et Series.groupby.apply en évitant les étapes de pivot coûteuses.

  • Ajout d’une estimation de la limite supérieure du nombre de lignes à OrderedDataFrame pour permettre un meilleur changement de moteur. Il pourrait en résulter une augmentation du nombre de requêtes.

  • Changement de nom du paramètre relaxed_ordering en enforce_ordering avec pd.read_snowflake. En outre, la nouvelle valeur par défaut est enforce_ordering=False, ce qui a l’effet inverse de la valeur par défaut précédente, relaxed_ordering=False.

Corrections de bogues

  • Correction d’un bogue pour pd.read_snowflake lors de la lecture des tables d’icebergs et enforce_ordering=True.

Version 1.30.0 (2025-03-27)

Nouvelles fonctionnalités

  • Prise en charge des garanties de cohérence et d’ordre relâchées dans Dataframe.to_snowpark_pandas en introduisant le paramètre relaxed_ordering.

  • DataFrameReader.dbapi (aperçu) accepte désormais une liste de chaînes pour le paramètre session_init_statement, ce qui permet d’exécuter plusieurs instructions SQL lors de l’initialisation de la session.

Améliorations

  • Amélioration de la génération de requêtes pour Dataframe.stat.sample_by afin de générer une seule requête plate qui s’adapte bien à un large dictionnaire fractions par rapport à l’ancienne méthode qui consistait à créer une sous-requête UNION ALL pour chaque clé dans fractions. Pour activer cette fonction, définissez session.conf.set("use_simplified_query_generation", True).

  • Amélioration des performances de DataFrameReader.dbapi en activant l’option vectorisée lors de la copie d’un fichier parquet dans une table.

  • La génération de requêtes pour DataFrame.random_split a été améliorée de la manière suivante. Elles peuvent être activées en définissant session.conf.set("use_simplified_query_generation", True) :

    • Suppression de la nécessité de cache_result dans l’implémentation interne de l’image de données d’entrée, ce qui permet une opération d’image de données paresseuse.

    • L’argument seed se comporte désormais comme prévu, avec des résultats reproductibles sur plusieurs appels et sessions.

  • DataFrame.fillna et DataFrame.replace permettent désormais de faire rentrer int et float dans les colonnes de Decimal si include_decimal est défini sur True.

  • Ajout de la documentation pour les UDF et les fonctions de procédure stockée suivantes dans files.py suite à leur disponibilité générale.

    • SnowflakeFile.write

    • SnowflakeFile.writelines

    • SnowflakeFile.writeable

  • Changements mineurs dans la documentation pour SnowflakeFile et SnowflakeFile.open().

Corrections de bogues

  • Correction d’un bogue pour les fonctions suivantes qui soulevaient des erreurs. .cast() est appliqué à leur sortie :

    • from_json

    • size

Mises à jour des tests locaux Snowpark

Corrections de bogues

  • Correction d’un bogue dans l’agrégation qui faisait que des groupes vides produisaient encore des lignes.

  • Correction d’un bogue dans Dataframe.except_ qui provoquait la suppression incorrecte des lignes.

  • Correction d’un bogue qui provoquait l’échec de to_timestamp lors de la conversion de colonnes filtrées.

Mises à jour de l’API pandas Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge des valeurs de liste dans Series.str.__getitem__ (Series.str[...]).

  • Ajout de la prise en charge des objets pd.Grouper dans les opérations GROUP BY. Lorsque freq est spécifié, les valeurs par défaut des arguments sort, closed, label et convention sont prises en charge ; origin est pris en charge lorsqu’il s’agit de start ou start_day.

  • Prise en charge des garanties de cohérence et d’ordre relâchées dans pd.read_snowflake pour les sources de données nommées (par exemple, les tables et les vues) et les sources de données des requêtes, grâce à l’introduction du nouveau paramètre relaxed_ordering.

Améliorations

  • Émission d’un avertissement lorsque QUOTED_IDENTIFIERS_IGNORE_CASE est défini, demander à l’utilisateur de le désactiver.

  • Amélioration de la manière dont un index_label manquant dans DataFrame.to_snowflake et Series.to_snowflake est traité lorsque index=True. Au lieu d’afficher ValueError, des étiquettes définies par le système sont utilisées pour les colonnes d’index.

  • Amélioration du message d’erreur pour groupby, DataFrame ou Series.agg lorsque le nom de la fonction n’est pas pris en charge.

Mises à jour des tests locaux Snowpark

Améliorations

  • Émission d’un avertissement lorsque QUOTED_IDENTIFIERS_IGNORE_CASE est défini, demander à l’utilisateur de le désactiver.

  • Amélioration de la manière dont un index_label manquant dans DataFrame.to_snowflake et Series.to_snowflake est traité lorsque index=True. Au lieu d’afficher ValueError, des étiquettes définies par le système sont utilisées pour les colonnes d’index.

  • Amélioration du message d’erreur pour groupby or DataFrame or Series.agg lorsque le nom de la fonction n’est pas pris en charge.

Version 1.29.1 (2025-03-12)

Corrections de bogues

  • Correction d’un bogue dans DataFrameReader.dbapi (aperçu privé) qui empêche l’utilisation dans les procédures stockées et les Snowbooks.

Version 1.29.0 (2025-03-05)

Nouvelles fonctionnalités

  • Ajout de la prise en charge des fonctions suivantes, activées par AI, dans functions.py (Aperçu privé) :

    • ai_filter

    • ai_agg

    • summarize_agg

  • Ajout de la prise en charge du nouveau type FILE SQL, avec les fonctions connexes suivantes dans functions.py (Aperçu privé) :

    • fl_get_content_type

    • fl_get_etag

    • fl_get_file_type

    • fl_get_last_modified

    • fl_get_relative_path

    • fl_get_scoped_file_url

    • fl_get_size

    • fl_get_stage

    • fl_get_stage_file_url

    • fl_is_audio

    • fl_is_compressed

    • fl_is_document

    • fl_is_image

    • fl_is_video

  • Ajout de la prise en charge de l’importation de paquets tiers depuis PyPi avec Artifact Repository (Aperçu privé) :

    • Utiliser des arguments de mots-clés artifact_repository et packages pour spécifier respectivement votre référentiel d’artefacts et vos paquets lors de l’enregistrement de procédures stockées ou de fonctions définies par l’utilisateur.

    • Les APIs prises en charge sont :

      • Session.sproc.register

      • Session.udf.register

      • Session.udaf.register

      • Session.udtf.register

      • functions.sproc

      • functions.udf

      • functions.udaf

      • functions.udtf

      • functions.pandas_udf

      • functions.pandas_udtf

Améliorations

  • Amélioration des avertissements de validation de version pour la compatibilité avec le paquet snowflake-snowpark-python lors de l’enregistrement des procédures stockées. Désormais, les avertissements ne sont déclenchés que si la version majeure ou mineure ne correspond pas, tandis que les différences de version ne génèrent plus d’avertissements.

  • Augmentation de la dépendance de cloudpickle pour prendre en charge cloudpickle==3.0.0 en plus des versions précédentes.

Corrections de bogues

  • Correction d’un bogue où la création d’un Dataframe avec un grand nombre de valeurs soulevait l’erreur Unsupported feature 'SCOPED_TEMPORARY'. si la session thread-safe était désactivée.

  • Correction d’un bogue à cause duquel df.describe soulevait une erreur d’exécution interne de SQL lorsque DataFrame était créé à partir de la lecture d’un fichier de zone de préparation et que l’optimisation de CTE était activée.

  • Correction d’un bogue à cause duquel df.order_by(A).select(B).distinct() générait des SQL invalides lorsque la génération de requêtes simplifiées était activée à l’aide de session.conf.set("use_simplified_query_generation", True).

    • La génération de requêtes simplifiées est désactivée par défaut.

Mises à jour de l’API pandas Snowpark

Améliorations

  • Amélioration du message d’erreur pour pd.to_snowflake, DataFrame.to_snowflake et Series.to_snowflake lorsque la table n’existe pas.

  • Améliorez la lisibilité de docstring pour le paramètre if_exists dans pd.to_snowflake, DataFrame.to_snowflake et Series.to_snowflake.

  • Amélioration du message d’erreur pour toutes les fonctions pandas qui utilisent des UDFs avec des objets Snowpark.

Corrections de bogues

  • Correction d’un bogue dans Series.rename_axis où un AttributeError était soulevé.

  • Correction d’un bogue à cause duquel pd.get_dummies n’ignorait pas les valeurs NULL/NaN par défaut.

  • Correction d’un bogue où des appels répétés à pd.get_dummies entraînaient une « erreur de nom de colonne dupliqué ».

  • Correction d’un bogue dans pd.get_dummies où le passage d’une liste de colonnes générait des annonces de colonnes incorrectes dans la sortie DataFrame.

  • Mise à jour de pd.get_dummies pour renvoyer des valeurs bool au lieu de int.

Mises à jour des tests locaux Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge des valeurs littérales dans la fonction de fenêtre range_between.

Version 1.28.0 (2025-02-20)

Nouvelles fonctionnalités

  • Ajout de la prise en charge des fonctions suivantes dans functions.py

    • normal

    • randn

  • Ajout de la prise en charge du paramètre allow_missing_columns à Dataframe.union_by_name et Dataframe.union_all_by_name.

Améliorations

  • Amélioration de la génération de noms d’objets aléatoires pour éviter les collisions.

  • Amélioration de la génération de requêtes pour Dataframe.distinct afin de générer SELECT DISTINCT au lieu de SELECT avec GROUP BY toutes les colonnes. Pour désactiver cette fonction, définissez session.conf.set("use_simplified_query_generation", False).

Dépréciations

  • Fonction Snowpark Python obsolète snowflake_cortex_summarize. Les utilisateurs peuvent installer snowflake-ml-python et utiliser la fonction snowflake.cortex.summarize à la place.

  • Fonction Snowpark Python obsolète snowflake_cortex_sentiment. Les utilisateurs peuvent installer snowflake-ml-python et utiliser la fonction snowflake.cortex.sentiment à la place.

Corrections de bogues

  • Correction d’un bogue où la balise de requête au niveau de la session était remplacée par une trace de pile pour DataFrames qui génère plusieurs requêtes. Désormais, la balise de requête ne sera définie avec la trace de pile que si session.conf.set("collect_stacktrace_in_query_tag", True).

  • Correction d’un bogue dans Session._write_pandas qui passait par erreur le paramètre use_logical_type à Session._write_modin_pandas_helper lors de l’écriture d’un objet pandas Snowpark.

  • Correction d’un bogue dans la génération des options SQL qui pouvait entraîner un formatage incorrect des valeurs multiples.

  • Correction d’un bogue dans Session.catalog où les chaînes vides pour la base de données ou le schéma n’étaient pas gérées correctement et généraient des instructions SQL erronées.

Fonctions expérimentales

  • Ajout de la prise en charge pour l’écriture de tables pyarrow vers des tables Snowflake.

Mises à jour de l’API pandas Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge pour appliquer les fonctions Snowflake Cortex Summarize et Sentiment.

  • Ajout de la prise en charge des valeurs de liste dans Series.str.get.

Corrections de bogues

  • Correction d’un bogue dans apply où les kwargs n’étaient pas correctement passés dans la fonction appliquée.

Mises à jour des tests locaux Snowpark

Nouvelles fonctionnalités

  • Ajout de la prise en charge des fonctions suivantes
    • hour

    • minute

  • Ajout de la prise en charge du paramètre NULL_IF par le lecteur CSV.

  • Ajout de la prise en charge des options date_format, datetime_format et timestamp_format lors du chargement de CSVs.

Corrections de bogues

  • Correction d’un bogue dans DataFrame.join qui provoquait une mauvaise saisie des colonnes.

  • Correction d’un bogue dans les instructions when qui entraînait des résultats incorrects dans la clause otherwise.

Version 1.27.0 (2025-02-05)

Nouvelles fonctionnalités

Ajout de la prise en charge des fonctions suivantes dans functions.py :

  • array_reverse

  • divnull

  • map_cat

  • map_contains_key

  • map_keys

  • nullifzero

  • snowflake_cortex_sentiment

  • acosh

  • asinh

  • atanh

  • bit_length

  • bitmap_bit_position

  • bitmap_bucket_number

  • bitmap_construct_agg

  • cbrt

  • equal_null

  • from_json

  • ifnull

  • localtimestamp

  • max_by

  • min_by

  • nth_value

  • nvl

  • octet_length

  • position

  • regr_avgx

  • regr_avgy

  • regr_count

  • regr_intercept

  • regr_r2

  • regr_slope

  • regr_sxx

  • regr_sxy

  • regr_syy

  • try_to_binary

  • base64

  • base64_decode_string

  • base64_encode

  • editdistance

  • hex

  • hex_encode

  • instr

  • log1p

  • log2

  • log10

  • percentile_approx

  • unbase64

  • Ajout de la prise en charge de la spécification d’une chaîne de schéma (y compris la syntaxe struct implicite) lors de l’appel de DataFrame.create_dataframe.

  • Ajout de la prise en charge de DataFrameWriter.insert_into/insertInto. Cette méthode prend également en charge le mode de test local.

  • Ajout de la prise en charge de DataFrame.create_temp_view pour créer une vue temporaire. L’opération échouera si la vue existe déjà.

  • Ajout de la prise en charge de plusieurs colonnes dans les fonctions map_cat et map_concat.

  • Ajout d’une option keep_column_order pour conserver l’ordre original des colonnes dans DataFrame.with_column et DataFrame.with_columns.

  • Ajout d’options aux conversions de colonnes qui permettent de renommer ou d’ajouter des champs dans les colonnes StructType.

  • Ajout de la prise en charge de contains_null parameter à ArrayType.

  • Ajout de la prise en charge de la création d’une vue temporaire via DataFrame.create_or_replace_temp_view à partir d’un DataFrame créé par la lecture d’un fichier depuis une zone de préparation.

  • Ajout de la prise en charge du paramètre value_contains_null à MapType.

  • Ajout d”« interactif » à la télémétrie qui indique si l’environnement actuel est interactif.

  • Autorisation de session.file.get dans une Native App à lire les chemins d’accès aux fichiers commençant par / à partir de la version actuelle.

  • Ajout de la prise en charge de plusieurs fonctions d’agrégation après DataFrame.pivot.

Fonctions expérimentales

  • Ajout de la classe Session.catalog pour la gestion des objets Snowflake. Vous pouvez y accéder via Session.catalog.

    • snowflake.core est une dépendance nécessaire à cette fonction.

  • Autoriser les schémas d’entrée de l’utilisateur ou les schémas d’entrée de l’utilisateur lors de la lecture du fichier JSON sur la zone de préparation.

  • Ajout de la prise en charge de la spécification d’une chaîne de schéma (y compris la syntaxe struct implicite) lors de l’appel de DataFrame.create_dataframe.

Améliorations

  • Mise à jour de README.md de sorte à inclure des instructions sur la façon de vérifier les signatures des paquets à l’aide de cosign.

Corrections de bogues

  • Correction d’un bogue dans le mode de test local qui faisait qu’une colonne contenait None alors qu’elle aurait dû contenir 0.

  • Correction d’un bogue dans StructField.from_json qui empêchait l’analyse correcte de TimestampTypes avec tzinfo.

  • Correction d’un bogue dans function date_format qui provoquait une erreur lorsque la colonne d’entrée était de type date ou horodatage.

  • Correction d’un bogue dans DataFrame qui permettait d’insérer des valeurs nulles dans une colonne non annulable.

  • Correction d’un bogue dans les fonctions replace et lit qui provoquait une erreur d’assertion d’indication de type lors du passage d’objets d’expression de colonne.

  • Correction d’un bogue dans pandas_udf et pandas_udtf où les paramètres de session étaient ignorés par erreur.

  • Correction d’un bogue qui provoquait une erreur de conversion de type pour les fonctions du système appelées par l’intermédiaire de session.call.

Mises à jour de l’API pandas Snowpark

Nouvelles fonctionnalités

  • Prise en charge de Series.str.ljust et Series.str.rjust.

  • Ajout de la prise en charge de Series.str.center.

  • Ajout de la prise en charge de Series.str.pad.

  • Ajout de la prise en charge de l’application de la fonction Snowpark Python snowflake_cortex_sentiment.

  • Ajout de la prise en charge de DataFrame.map.

  • Prise en charge de DataFrame.from_dict et DataFrame.from_records.

  • Ajout de la prise en charge des noms de champ en casse mixte dans les colonnes de type struct.

  • Ajout de la prise en charge de SeriesGroupBy.unique.

  • Ajout de la prise en charge de Series.dt.strftime avec les directives suivantes :

    • %d : jour du mois sous forme de nombre décimal complété par des zéros.

    • %m : mois sous forme de nombre décimal complété par des zéros.

    • %Y : année avec le siècle sous forme de nombre décimal.

    • %H : heure (horloge de 24 heures) sous forme de nombre décimal complété par des zéros.

    • %M : minute sous forme de nombre décimal complété par des zéros.

    • %S : seconde sous forme de nombre décimal complété par des zéros.

    • %f : microseconde sous forme de nombre décimal complété par des zéros jusqu’à 6 chiffres.

    • %j : jour de l’année sous forme de nombre décimal complété par des zéros.

    • %X : représentation appropriée du temps conformément aux paramètres régionaux.

    • %% : caractère « % » littéral.

  • Ajout de la prise en charge de Series.between.

  • Ajout de la prise en charge de include_groups=False dans DataFrameGroupBy.apply.

  • Ajout de la prise en charge de expand=True dans Series.str.split.

  • Prise en charge de DataFrame.pop et Series.pop.

  • Prise en charge de first et last dans DataFrameGroupBy.agg et SeriesGroupBy.agg.

  • Ajout de la prise en charge de Index.drop_duplicates.

  • Ajout de la prise en charge des agrégations "count", "median", np.median, "skew", "std", np.std "var" et np.var dans pd.pivot_table(), DataFrame.pivot_table() et pd.crosstab().

Améliorations

  • Amélioration des performances des méthodes DataFrame.map, Series.apply et Series.map en mappant les fonctions numpy avec les fonctions Snowpark si possible.

  • Ajout de documentation pour DataFrame.map.

  • Amélioration des performances de DataFrame.apply en mappant les fonctions numpy avec les fonctions Snowpark si possible.

  • Ajout d’une documentation sur l’étendue de l’interopérabilité de Snowpark pandas avec scikit-learn.

  • Inférence du type de renvoi des fonctions dans Series.map, Series.apply et DataFrame.map si l’indice de type n’est pas fourni.

  • Ajout de call_count à la télémétrie qui compte les appels de méthode, y compris les appels de protocole d’échange.