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

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.11.1 (2023-12-07)

La version 1.11.1 de la bibliothèque Snowpark lance de nouvelles fonctionnalités.

Nouvelles fonctionnalités

  • Ajout de l’attribut conn_error à SnowflakeSQLException, qui stocke l’ensemble de l’exception sous-jacente de snowflake-connector-python.

  • Ajout de la prise en charge de RelationalGroupedDataframe.pivot() pour accéder à pivot dans le modèle suivant Dataframe.group_by(...).pivot(...).

  • Ajout d’une fonctionnalité expérimentale, Mode de test local, qui vous permet de créer et d’agir sur des DataFrames Python Snowpark localement sans vous connecter à un compte Snowflake. Vous pouvez utiliser le cadre de test local pour tester vos opérations DataFrame localement, sur votre poste de développement ou dans un pipeline CI (intégration continue), avant de déployer les changements de code sur votre compte.

  • Ajout de la prise en charge de nouvelles fonctions arrays_to_object dans snowflake.snowpark.functions.

  • Ajout de la prise en charge du type de données vectoriel.

Mises à jour des dépendances

  • Modification de la dépendance cloudpickle de sorte qu’elle fonctionne avec cloudpickle==2.2.1.

  • Mise à jour de snowflake-connector-python à la version 3.4.0.

Corrections de bogues

  • La vérification de la citation des noms de colonne DataFrame prend désormais en charge les caractères de nouvelle ligne.

  • Correction d’un bogue selon lequel un DataFrame généré par session.read.with_metadata créait une table incohérente lors de l’exécution de df.write.save_as_table.

Version 1.10.0 (03-11-2023)

La version 1.10.0 de la bibliothèque Snowpark introduit de nouvelles fonctionnalités.

Nouvelles fonctionnalités

  • Ajout de la prise en charge de la gestion de la sensibilité à la casse dans DataFrame.to_local_iterator().

  • Ajout de la prise en charge de la spécification des noms des colonnes d’entrée d’UDTF vectorisée en utilisant le paramètre optionnel input_names dans UDTFRegistration.register, UDTFRegistration.register_file, et functions.pandas_udtf. Par défaut, RelationalGroupedDataFrame.applyInPandas déduit le nom des colonnes du schéma DataFrame actuel.

  • Ajout des attributs sql_error_code et raw_message à SnowflakeSQLException lorsque le cas est causé par une exception SQL.

Corrections de bogues

  • Correction d’un bogue dans DataFrame.to_pandas() où la conversion de DataFrames Snowpark en DataFrames Pandas perdait de la précision sur les entiers de plus de 19 chiffres.

  • Correction d’un bogue dans session.add_packages qui ne pouvait pas gérer un spécificateur d’exigences contenant un nom de projet avec un trait de soulignement et une version.

  • Correction d’un bogue dans DataFrame.limit() lorsque offset est utilisé et que le parent DataFrame utilise limit. Désormais, le site offset n’aura pas d’impact sur le site limit du DataFrame parent.

  • Correction d’un bogue dans DataFrame.write.save_as_table où les DataFrames créés à partir de la lecture API ne pouvait pas enregistrer les données dans Snowflake à cause d’un nom de colonne invalide $1.

Changements de comportement

  • Modification du comportement de date_format:

    • L’argument format est passé de facultatif à obligatoire.

    • Le résultat renvoyé est passé d’un objet « date » à une chaîne formatée en date.

  • Lorsqu’une fonction de fenêtre ou de générateur de données dépendant de la séquence (normal, zipf, uniform, seq1, seq2, seq4, seq8) est utilisée, l’opération de tri et de filtrage ne sera plus aplatie lors de la génération de la requête.

Version 1.9.0 (2023-10-16)

La version 1.9.0 de la bibliothèque Snowpark introduit de nouvelles fonctionnalités.

Nouvelles fonctionnalités

  • Ajout de la prise en charge de l’environnement d’exécution Python 3.11.

  • Prise en charge des objets PythonObjJSONEncoder JSON-sérialisables pour les littéraux ARRAY et OBJECT.

Mises à jour des dépendances

  • Ré-ajout de la dépendance de typing-extensions.

Corrections de bogues

  • Correction d’un bogue où les importations à partir d’emplacements de zone de préparation permanents étaient ignorées pour des procédures stockées, UDTFs, UDFs et UDAFs temporaires.

  • Revenez à l’utilisation de l’instruction CTAS (CREATE TABLE AS SELECT) pour DataFrameWriter.save_as_table qui n’a pas besoin d’autorisation d’insertion pour écrire dans des tables.

Version 1.8.0 (2023-09-14)

La version 1.8.0 de la bibliothèque Snowpark introduit de nouvelles fonctionnalités.

Nouvelles fonctionnalités

  • Prise en charge des mots-clés VOLATILE et IMMUTABLE lors de l’enregistrement d’UDFs.

  • Ajout de la prise en charge de la spécification des clés de clustering lors de l’enregistrement des dataframes à l’aide de DataFrame.save_as_table.

  • Accepter les objets Iterable en entrée de schema lors de la création de dataframes à l’aide de Session.create_dataframe.

  • Ajout de la propriété DataFrame.session pour renvoyer un objet Session.

  • Ajout de la propriété Session.session_id pour renvoyer un nombre entier représentant l’ID de session.

  • Ajout de la propriété Session.connection pour renvoyer un objet SnowflakeConnection.

  • Ajout de la possibilité de créer une session Snowpark à partir d’un fichier de configuration ou de variables d’environnement.

Mises à jour des dépendances

  • Mise à jour de snowflake-connector-python vers la version 3.2.0.

Corrections de bogues

  • Correction d’un bogue où un chargement automatique de paquets générait ValueError même si des versions de paquets compatibles avaient été ajoutées dans session.add_packages.

  • Correction d’un bogue où les procédures stockées de table n’étaient pas enregistrées correctement lors de l’utilisation de register_from_file.

  • Correction d’un bogue où les jointures de dataframes échouaient avec l’erreur invalid_identifier.

  • Correction d’un bogue où DataFrame.copy désactivait le simplificateur SQL pour la copie renvoyée.

  • Correction d’un bogue où session.sql().select() échouait si des paramètres étaient spécifiés dans session.sql().

Version 1.7.0 (2023-08-28)

La version 1.7.0 de la bibliothèque Snowpark introduit de nouvelles fonctionnalités.

Changements de comportement

  • Lors de la création des procédures stockées, d’UDFs, d’UDTFs et d’UDAFs avec le paramètre is_permanent=False, des objets temporaires sont créés même si stage_name est fourni. La valeur par défaut de is_permanent est False, c’est pourquoi si cette valeur n’est pas explicitement définie sur True pour les objets permanents, les utilisateurs remarqueront un changement de comportement.

  • types.StructField met désormais l’identificateur de la colonne entre guillemets par défaut.

Nouvelles fonctionnalités

  • Ajout des paramètres external_access_integrations et secrets qui peuvent être utilisés lors de la création d’une UDF, d’une UDTF ou d’une procédure stockée à partir de Snowpark Python pour permettre l’intégration avec un accès externe.

  • Ajout de la prise en charge des nouvelles fonctions suivantes dans snowflake.snowpark.functions : array_flatten et flatten.

  • Ajout de la prise en charge de apply_in_pandas dans snowflake.snowpark.relational_grouped_dataframe.

  • Ajout de la prise en charge de la réplication de votre environnement Python local sur Snowflake via Session.replicate_local_environment.

Corrections de bogues

  • Correction d’un bogue dans lequel session.create_dataframe ne parvenait pas à définir correctement les colonnes pouvant être nulles lorsque la nullité était affectée par l’ordre ou lorsque les données étaient données.

  • Correction d’un bogue qui empêchait DataFrame.select d’identifier et d’aliaser les colonnes lors de l’utilisation de fonctions de table lorsque les colonnes de sortie de la fonction de table chevauchaient les colonnes du DataFrame.

Version 1.6.1 (2023-08-02)

Changements de comportement

  • DataFrameWriter.save_as_table respecte maintenant le champ nullable du schéma fourni par l’utilisateur ou du schéma déduit sur la base des données provenant de l’entrée de l’utilisateur.

Nouvelles fonctionnalités

  • Ajout de la prise en charge de nouvelles fonctions dans snowflake.snowpark.functions :

    • array_sort

    • sort_array

    • array_min

    • array_max

    • explode_outer

  • Ajout de la prise en charge des paquets Python purs spécifiés via Session.add_requirements ou Session.add_packages. Ils sont désormais utilisables dans les procédures stockées et les UDFs même si les paquets ne sont pas présents sur le canal Anaconda de Snowflake.

  • Ajout des paramètres de session custom_packages_upload_enabled et custom_packages_force_upload_enabled pour activer la prise en charge de la fonction des paquets purement Python mentionnée ci-dessus. Les deux paramètres sont définis par défaut sur False.

  • Ajout de la prise en charge de la spécification des exigences de paquets en transmettant un fichier YAML d’environnement conda à Session.add_requirements.

  • Ajout de la prise en charge de l’exécution asynchrone des dataframes à requêtes multiples contenant des variables de liaison.

  • Ajout de la prise en charge du renommage de plusieurs colonnes dans DataFrame.rename.

  • Ajout de la prise en charge des types de données Geometry.

  • Ajout de la prise en charge de params dans session.sql() dans les procédures stockées.

  • Ajout de la prise en charge des fonctions agrégées définies par l’utilisateur (UDAFs). Cette fonctionnalité est actuellement proposée en avant-première privée.

  • Ajout de la prise en charge des fonctions de tables vectorisées définis par l’utilisateur (UDTFs vectorisées). Cette fonctionnalité est actuellement proposée en avant-première publique.

  • Prise en charge des variantes de l’horodatage Snowflake (c’est-à-dire TIMESTAMP_NTZ, TIMESTAMP_LTZ, TIMESTAMP_TZ) :

    • Ajout de TimestampTimezone comme argument dans le constructeur de TimestampType.

    • Ajout d’indications de type : NTZ, LTZ, TZ et Timestamp pour annoter les fonctions lors de l’enregistrement d’UDFs.

Améliorations

  • Suppression de la dépendance redondante typing-extensions.

  • DataFrame.cache_result crée maintenant une table temporaire de noms pleinement qualifiés sous la base de données et le schéma actuels.

Corrections de bogues

  • Correction d’un bogue où la vérification du type se fait sur pandas avant qu’il ne soit importé.

  • Correction d’un bogue lors de la création d’une UDF à partir de numpy.ufunc.

  • Correction d’un bogue où DataFrame.union ne générait pas la bonne Selectable.schema_query lorsque le simplificateur SQL était activé.

Mises à jour des dépendances

  • Mise à jour de snowflake-connector-python vers la version 3.0.4.

Version 1.5.1 (20/06/2023)

Nouvelles fonctions et mises à jour

  • Ajout de la prise en charge de l’environnement d’exécution Python 3.10.

Version 1.5.0 (13/06/2023)

Changements de comportement

  • Les résultats de l’agrégation, obtenus à partir de fonctions telles que DataFrame.agg et DataFrame.describe, ne suppriment plus les caractères non imprimables des noms de colonnes.

Nouvelles fonctions et mises à jour

  • Ajout de la prise en charge de l’environnement d’exécution Python 3.9.

  • Ajout de la prise en charge de nouvelles fonctions dans snowflake.snowpark.functions :

  • array_generate_range

  • array_unique_agg

  • collect_set

  • sequence

  • Ajout de la prise en charge de l’enregistrement et de l’appel de procédures stockées avec le type de retour TABLE.

  • Ajout de la prise en charge du paramètre length dans StringType() pour spécifier le nombre maximal de caractères pouvant être stockés par la colonne.

  • Ajout de l’alias functions.element_at() pour functions.get().

  • Ajout de l’alias Column.contains pour functions.contains.

  • Ajout de la fonction expérimentale DataFrame.alias.

  • Ajout de la prise en charge de l’interrogation des colonnes de métadonnées en zone de préparation lors de la création de DataFrame à l’aide de DataFrameReader.

  • Ajout de la prise en charge de StructType.add afin d’ajouter des champs aux objets StructType existants.

  • Ajout de la prise en charge du paramètre execute_as dans StoredProcedureRegistration.register_from_file() pour spécifier les droits de l’appelant de la procédure stockée.

Corrections de bogues

  • Correction d’un bogue à cause duquel la fonction Dataframe.join_table_function n’exécutait pas toutes les requêtes nécessaires pour configurer la fonction de table de jointure lorsque le simplificateur SQL était activé.

  • Correction de la déclaration de l’indication de type pour les types personnalisés : ColumnOrName, ColumnOrLiteralStr, ColumnOrSqlExpr, LiteralType et ColumnOrLiteral qui rompaient les vérifications de mypy.

  • Correction d’un bogue dans lequel DataFrameWriter.save_as_table et DataFrame.copy_into_table ne parvenaient pas à analyser les noms complets des tables.

Version 1.4.0 (24/04/2023)

Nouvelles fonctionnalités

  • Ajout de la prise en charge de session.getOrCreate.

  • Ajout de la prise en charge de l’alias Column.getField.

  • Ajout de la prise en charge de nouvelles fonctions dans snowflake.snowpark.functions :

    • date_add et date_sub pour faciliter les opérations d’addition et de soustraction.

    • ddaydiff

    • dexplode

    • darray_distinct

    • dregexp_extract

    • dstruct

    • dformat_number

    • dbround

    • dsubstring_index

  • Ajout du paramètre skip_upload_on_content_match lors de la création d’UDFs, d’UDTFs et de procédures stockées utilisant register_from_file pour ne pas charger de fichiers dans une zone de préparation scène si la même version des fichiers se trouve déjà dans la zone de préparation.

  • Ajout de la prise en charge de la méthode DataFrame.save_as_table pour les noms de tables contenant des points.

  • Génération de SQL aplati lorsque DataFrame.filter() ou DataFrame.order_by() est suivi d’une instruction de projection (par exemple, DataFrame.select(), DataFrame.with_column()).

  • Ajout de la prise en charge de la création de tables dynamiques (en avant-première privée) à l’aide de Dataframe.create_or_replace_dynamic_table.

  • Ajout d’un argument facultatif, params, dans session.sql() pour prendre en charge les variables de liaison. Notez que cet argument n’est pas encore pris en charge dans les procédures stockées.

Corrections de bogues

  • Correction d’un bogue dans strtok_to_array où une exception était levée lorsqu’un délimiteur était transmis.

  • Correction d’un bogue dans session.add_import où le module avait le même espace de noms que d’autres dépendances.

Version 1.3.0 (28/03/2023)

Nouvelles fonctionnalités

  • Ajout de la prise en charge du paramètre delimiters dans functions.initcap().

  • Ajout de la prise en charge de functions.hash() pour accepter un nombre variable d’expressions d’entrée.

  • Ajout de l’API Session.conf pour obtenir, définir ou vérifier la mutabilité de toute configuration d’exécution.

  • Ajout de la prise en charge de la gestion de la sensibilité à la casse dans les résultats Row de DataFrame.collect à l’aide du paramètre case_sensitive.

  • Ajout de la prise en charge de l’indexeur pour snowflake.snowpark.types.StructType.

  • Ajout d’un argument mot-clé log_on_exception à Dataframe.collect et Dataframe.collect_no_wait pour éventuellement désactiver la journalisation des erreurs pour les exceptions SQL.

Corrections de bogues

  • Correction d’un bogue où une opération d’ensemble DataFrame (DataFrame.subtract, DataFrame.union, etc.) était appelée après une autre opération d’ensemble DataFrame et DataFrame.select ou DataFrame.with_column lève une exception.

  • Correction d’un bogue où les instructions de tri chaînées étaient remplacées par le simplificateur SQL.

Améliorations

  • Requêtes JOIN simplifiées pour utiliser des alias de sous-requête constants (SNOWPARK_LEFT, SNOWPARK_RIGHT) par défaut. Les utilisateurs peuvent désactiver cela au moment de l’exécution avec session.conf.set('use_constant_subquery_alias', False) pour utiliser à la place des noms d’alias générés de manière aléatoire.

  • Autorisé à spécifier des paramètres d’instruction dans session.call().

  • Activation du chargement de grands DataFrames pandas dans les procédures stockées en utilisant par défaut une taille de bloc de 100 000 lignes.

Version 1.2.0 (2023-03-02)

Nouvelles fonctions et mises à jour

  • Ajout de la prise en charge de l’affichage du code source sous forme de commentaires dans les scripts générés lors de l’enregistrement de procédures stockées. Cette fonction est activée par défaut ; elle peut être désactivée en spécifiant source_code_display=False lors de l’enregistrement.

  • Ajout d’un paramètre if_not_exists lors de la création d’une UDF, d’une UDTF ou d’une procédure stockée à partir de Snowpark Python pour ignorer la création de la fonction ou de la procédure spécifiée si elle existe déjà.

  • Accepter les entiers lors de l’appel de snowflake.snowpark.functions.get pour extraire une valeur d’un tableau.

  • Ajout de functions.reverse dans les fonctions pour ouvrir l’accès à la fonction intégrée de Snowflake REVERSE.

  • Ajout du paramètre require_scoped_url dans snowflake.snowflake.files.SnowflakeFile.open() (en aperçu privé) pour remplacer is_owner_file, qui est signalé comme obsolète.

Corrections de bogues

  • Correction d’un bug qui remplaçait paramstyle par qmark lors de la création d’une session Snowpark.

  • Correction d’un bug où df.join(..., how="cross") échoue avec SnowparkJoinException: (1112): Unsupported using join type 'Cross'.

  • Correction d’un bogue où l’interrogation d’une colonne DataFrame créée à partir d’appels de fonctions enchaînés utilisait un nom de colonne erroné.

Version 1.1.0 (2023-01-26)

Nouvelles fonctions et mises à jour

  • Ajout de asc, asc_nulls_first, asc_nulls_last, desc, desc_nulls_first, desc_nulls_last, date_part, et unix_timestamp dans les fonctions.

  • Ajout de la propriété DataFrame.dtypes pour retourner une liste de paires de noms de colonnes et de types de données.

  • Ajout des alias suivants :

    • functions.expr() for functions.sql_expr().

    • functions.date_format() for functions.to_date().

    • functions.monotonically_increasing_id() for functions.seq8().

    • functions.from_unixtime() for functions.to_timestamp().

Corrections de bogues

  • Correction d’un bogue dans le simplifieur SQL qui ne gérait pas bien l’alias de colonne et la jointure dans certains cas. Voir https://github.com/snowflakedb/snowpark-python/issues/658 pour plus de détails.

  • Correction d’un bogue dans le simplificateur SQL qui générait des noms de colonnes erronés pour les appels de fonction, NaN et INF.

Améliorations

  • Le paramètre de session PYTHON_SNOWPARK_USE_SQL_SIMPLIFIER sera True après la sortie de Snowflake 7.3. Dans snowpark-python, session.sql_simplifier_enabled lit la valeur de PYTHON_SNOWPARK_USE_SQL_SIMPLIFIER par défaut, ce qui signifie que le simplificateur SQL est activé par défaut après la version 7.3 de Snowflake. Pour désactiver cette fonction, réglez PYTHON_SNOWPARK_USE_SQL_SIMPLIFIER dans Snowflake sur False ou exécutez session.sql_simplifier_enabled = False dans Snowpark. Il est recommandé d’utiliser le simplificateur SQL, car il permet de générer du code SQL plus concis.