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

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.0.0 (2022-11-01)

Nouvelles fonctionnalités

  • Ajout de Session.generator() pour créer un nouveau DataFrame en utilisant la fonction de table GENERATOR.

  • Ajout du paramètre SECURE aux fonctions qui créent une UDF ou une UDTF sécurisée.

Version 0.12.0 (2022-10-14)

Nouvelles fonctionnalités

  • Ajout de nouvelles APIs pour les tâches asynchrones :

    • Session.create_async_job() pour créer une instance AsyncJob à partir d’un identifiant de requête.

    • AsyncJob.result() accepte maintenant l’argument result_type pour renvoyer les résultats dans différents formats.

    • AsyncJob.to_df() renvoie un DataFrame construit à partir du résultat de cette tâche asynchrone.

    • AsyncJob.query() renvoie le texte SQL de la requête exécutée.

  • DataFrame.agg() et RelationalGroupedDataFrame.agg() acceptent désormais des arguments de longueur variable.

  • Ajout des paramètres lsuffix et rsuffix à DataFrame.join() et DataFrame.cross_join() pour renommer plus facilement les colonnes qui se chevauchent.

  • Ajout de Table.drop_table() pour que vous puissiez détruire la table temporaire après avoir appelé DataFrame.cache_result(). Table est également un gestionnaire de contexte, vous pouvez donc l’utiliser avec l’instruction pour supprimer la table temporaire du cache après utilisation.

  • Ajout de Session.use_secondary_roles().

  • Ajout des fonctions first_value() et last_value(). (contribution de @chasleslr)

  • Ajout de on comme alias pour using_columns et de how comme alias pour join_type dans DataFrame.join().

Corrections de bogues

  • Correction d’un bogue dans Session.create_dataframe() qui générait une erreur lorsque les noms de schémas comportaient des caractères spéciaux.

  • Correction d’un bogue dans lequel les options définies dans Session.read.option() n’étaient pas transmises à DataFrame.copy_into_table() comme valeurs par défaut.

  • Correction d’un bogue dans lequel DataFrame.copy_into_table() générait une erreur lorsqu’une option de copie avait des guillemets simples dans la valeur.

Version 0.11.0 (2022-09-28)

Changements de comportement

  • Session.add_packages() produit maintenant une ValueError lorsque la version d’un package est introuvable dans le canal Anaconda de Snowflake. Auparavant, Session.add_packages() réussissait et une exception SnowparkSQLException était produite plus tard dans l’UDF ou à l’étape d’enregistrement de la procédure stockée.

Nouvelles fonctionnalités

  • Ajout de la méthode FileOperation.get_stream() pour prendre en charge le téléchargement de fichiers de zone de préparation sous forme de flux.

  • Ajout de la prise en charge dans functions.ntiles() de l’acceptation d’un argument int.

  • Ajout des alias suivants :

    • functions.call_function() pour functions.call_builtin().

    • functions.function() pour functions.builtin().

    • DataFrame.order_by() pour DataFrame.sort().

    • DataFrame.orderBy() pour DataFrame.sort().

  • Amélioration de DataFrame.cache_result() pour renvoyer une classe Table plus précise au lieu d’une classe DataFrame.

  • Ajout de la prise en charge de l’autorisation de session comme premier argument lors de l’appel de StoredProcedure.

Améliorations

  • Amélioration de la génération de requêtes imbriquées en aplatissant les requêtes lorsque c’est possible. Cette amélioration peut être activée en définissant Session.sql_simplifier_enabled = True. DataFrame.select(), DataFrame.with_column(), DataFrame.drop() et d’autres APIs liées à la sélection ont dorénavant davantage de SQL aplati. DataFrame.union(), DataFrame.union_all(), DataFrame.except_(), DataFrame.intersect(), et DataFrame.union_by_name() ont aplati le SQL généré lorsque plusieurs opérateurs d’ensemble sont chaînés.

  • Amélioration des annotations de type pour les APIs de tâches asynchrones.

Corrections de bogues

  • Correction d’un bogue dans lequel Table.update(), Table.delete(), et Table.merge() essayaient de faire référence à une table temporaire qui n’existait pas.

Version 0.10.0 (2022-09-16)

Nouvelles fonctionnalités

  • Ajout d’APIs expérimentales pour l’évaluation de dataframes Snowpark avec des requêtes asynchrones :

    • Ajout de l’argument mot-clé block aux APIs d’action suivantes sur les dataframes Snowpark (qui exécutent des requêtes) pour permettre des évaluations asynchrones :

      • DataFrame.collect(), DataFrame.to_local_iterator(), DataFrame.to_pandas(), DataFrame.to_pandas_batches(), DataFrame.count(), DataFrame.first(), DataFrameWriter.save_as_table(), DataFrameWriter.copy_into_location(), Table.delete(), Table.update(), et Table.merge().

    • Ajout de la méthode DataFrame.collect_nowait() pour permettre des évaluations asynchrones.

    • Ajout de la classe AsyncJob pour récupérer les résultats des requêtes exécutées de manière asynchrone et vérifier leur statut.

  • Ajout de la prise en charge de table_type dans Session.write_pandas(). Vous pouvez maintenant choisir parmi ces options table_type : temporary, temp, et transient.

  • Ajout de la prise en charge de l’utilisation de données structurées Python (list, tuple, et dict) comme valeurs littérales dans Snowpark.

  • Ajout de l’argument mot-clé execute_as à functions.sproc() et session.sproc.register() pour permettre l’enregistrement d’une procédure stockée en tant qu’appelant ou propriétaire.

  • Ajout de la prise en charge de la spécification d’un format de fichier préconfiguré lors de la lecture de fichiers à partir d’une zone de préparation dans Snowflake.

Améliorations

  • Ajout de la prise en charge de l’affichage des détails d’une session Snowpark.

Corrections de bogues

  • Correction d’un bogue dans lequel DataFrame.copy_into_table() et DataFrameWriter.save_as_table() créaient par erreur une nouvelle table si le nom de la table était entièrement qualifié et que la table existait déjà.

Dépréciations

  • Argument mot-clé create_temp_table obsolète dans Session.write_pandas().

  • Obsolète : invocation d’UDFs en utilisant des arguments encapsulés dans une liste ou un tuple Python. Vous pouvez utiliser des arguments de longueur variable sans liste ou tuple.

Mises à jour des dépendances

  • Mise à jour du snowflake-connector-python vers la version 2.7.12.

Version 0.9.0 (2022-08-30)

Nouvelles fonctionnalités

  • 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 d’UDFs. Cette fonction est activée par défaut. Pour la désactiver, transmettez le nouvel argument mot-clé source_code_display comme False lors de l’appel de register() ou de @udf().

  • Ajout de la prise en charge de l’appel de fonctions de table à partir de DataFrame.select(), DataFrame.with_column(), et DataFrame.with_columns(), qui prennent désormais des paramètres de type table_function.TableFunctionCall pour les colonnes.

  • Ajout d’un argument mot-clé overwrite à session.write_pandas() pour permettre de remplacer le contenu d’une table Snowflake avec celui d’un DataFrame Pandas.

  • Ajout de l’argument mot-clé column_order à df.write.save_as_table() pour spécifier les règles de correspondance lors de l’insertion de données dans une table en mode Ajout.

  • Ajout de la méthode FileOperation.put_stream() pour charger des fichiers locaux vers une zone de préparation via un flux de fichiers.

  • Ajout des méthodes TableFunctionCall.alias() et TableFunctionCall.as_() pour permettre de donner des alias aux noms des colonnes qui proviennent de la sortie des jointures de fonctions de table.

  • Ajout de la fonction get_active_session() dans le module snowflake.snowpark.context pour obtenir la session Snowpark active actuelle.

Améliorations

Amélioration de la fonction function.uniform() pour déduire les types des entrées max_ et min_ et convertir les limites en IntegerType ou FloatType, respectivement.

Corrections de bogues

  • Correction d’un bogue dans lequel l’insertion par lots ne doit pas produire d’erreur lorsque statement_params n’est pas transmis à la fonction.

  • Correction d’un bogue dans lequel les noms de colonnes doivent être mis entre guillemets lorsque session.create_dataframe() est appelé avec des dicts et un schéma donné.

  • Correction d’un bug dans lequel la création d’une table devrait être ignorée si la table existe déjà et est en mode Ajout lors de l’appel de df.write.save_as_table().

  • Correction d’un bogue dans lequel les packages tiers avec des traits de soulignement ne peuvent pas être ajoutés lors de l’enregistrement d’UDFs.

Version 0.8.0 (2022-07-22)

Nouvelles fonctionnalités

  • Ajout d’un argument de type mot-clé uniquement statement_params aux méthodes suivantes pour permettre de spécifier des paramètres de niveau instruction :

    • collect, to_local_iterator, to_pandas, to_pandas_batches, count, copy_into_table, show, create_or_replace_view, create_or_replace_temp_view, first, cache_result, et random_split sur la classe snowflake.snowpark.Dateframe.

    • update, delete et merge sur la classe snowflake.snowpark.Table.

    • save_as_table et copy_into_location sur la classe snowflake.snowpark.DataFrameWriter.

    • approx_quantile, statement_params, cov, et crosstab sur la classe snowflake.snowpark.DataFrameStatFunctions.

    • register et register_from_file sur la classe snowflake.snowpark.udf.UDFRegistration.

    • register et register_from_file sur la classe snowflake.snowpark.udtf.UDTFRegistration.

    • register et register_from_file sur la classe snowflake.snowpark.stored_procedure.StoredProcedureRegistration.

    • udf, udtf, et sproc dans snowflake.snowpark.functions.

  • Ajout de la prise en charge de Column comme argument d’entrée de session.call().

  • Ajout de la prise en charge de table_type dans df.write.save_as_table(). Vous pouvez maintenant choisir parmi ces options table_type : temporary, temp, et transient.

Améliorations

  • Ajout de la validation du nom de l’objet dans les méthodes session.use_*.

  • Mise à jour de la balise de query en SQL pour l’échapper lorsqu’elle contient des caractères spéciaux.

  • Ajout d’une vérification pour voir si les conditions d’utilisation d’Anaconda sont acceptées lors de l’ajout de packages manquants.

Corrections de bogues

  • Correction de la longueur limitée de la colonne des chaînes dans session.create_dataframe().

  • Correction d’un bogue dans lequel session.create_dataframe() convertissait par erreur 0 et False en None lorsque les données d’entrée étaient uniquement une liste.

  • Correction d’un bogue dans lequel l’appel de session.create_dataframe() en utilisant un grand ensemble de données locales créait parfois une table temporaire deux fois.

  • Alignement de la définition de function.trim() avec la définition de la fonction SQL.

  • Correction d’un problème où snowpark-python se bloquait lors de l’utilisation de la fonction Python sum définie par le système (fonction intégrée) par rapport à la fonction Snowpark function.sum().

Version 0.7.0 (2022-05-25)

Nouvelles fonctionnalités

  • Ajout de la prise en charge des fonctions de table définies par l’utilisateur (UDTFs).

    • Utilisez la fonction snowflake.snowpark.functions.udtf() pour enregistrer une UDTF, ou utilisez-la comme décorateur pour enregistrer l’UDTF.

    • Vous pouvez également utiliser Session.udtf.register() pour enregistrer une UDTF.

    • Utilisez Session.udtf.register_from_file() pour enregistrer une UDTF à partir d’un fichier Python.

  • Mises à jour d’APIs pour interroger une fonction de table, y compris les fonctions de table intégrées à Snowflake et les UDTFs.

    • Utilisez la fonction snowflake.snowpark.functions.table_function() pour créer un objet appelable représentant une fonction de table et utilisez-le pour appeler la fonction de table dans une requête.

    • Vous pouvez également utiliser la fonction snowflake.snowpark.functions.call_table_function() pour appeler une fonction de table.

    • Ajout de la prise en charge de la clause over qui spécifie partition by et order by lors de la jointure latérale d’une fonction de table.

    • Mise à jour de Session.table_function() et DataFrame.join_table_function() pour accepter les instances TableFunctionCall.

Changements importants

  • Lors de la création d’une fonction avec functions.udf() et functions.sproc(), vous pouvez désormais spécifier une liste vide pour l’argument imports ou l’argument packages afin d’indiquer qu’aucune importation ou paquet n’est utilisé pour cette UDF ou procédure stockée. Auparavant, le fait de spécifier une liste vide signifiait que la fonction utiliserait les importations ou les paquets au niveau de la session.

  • Amélioration de l’implémentation de __repr__ des types de données dans types.py. Suppression de la propriété type_name inutilisée.

  • Ajout d’une classe d’exception spécifique à Snowpark pour les erreurs SQL. Cela remplace l’ancien ProgrammingError du connecteur Python.

Améliorations

  • Ajout d’un verrou à une UDF ou une UDTF lors de son premier appel par thread.

  • Amélioration du message d’erreur pour les erreurs de sérialisation survenues lors de la création d’une UDF.

  • Inclusion de l’ID de la requête lors de l’enregistrement de la requête échouée.

Corrections de bogues

  • Correction d’un bogue dans lequel les données non intégrales (telles que les horodatages) étaient occasionnellement converties en entier lors de l’appel de DataFrame.to_pandas().

  • Correction d’un bogue pour lequel DataFrameReader.parquet() ne parvenait pas à lire un fichier Parquet lorsque sa colonne contenait des espaces.

  • Correction d’un bogue dans lequel DataFrame.copy_into_table() échouait lorsque le dataframe est créé en lisant un fichier avec des schémas inférés.

Dépréciations

  • Session.flatten() et DataFrame.flatten().

Mises à jour des dépendances

  • Restriction de la version de cloudpickle <= 2.0.0.

Version 0.6.0 (2022-04-27)

Nouvelles fonctionnalités

  • Ajout de la prise en charge des UDFs vectorisées via l’API par lots UDF Python. L’API par lots UDF Python permet de définir des fonctions Python qui reçoivent des lots de lignes d’entrée sous forme de DataFrames Pandas et renvoient des lots de résultats sous forme de tableaux ou de séries Pandas. Cela peut améliorer les performances de vos UDFs dans Snowpark.

  • Ajout de la prise en charge de l’inférence de schéma d’un DataFrame par défaut lorsqu’il est créé par la lecture d’un fichier Parquet, Avro ou ORC dans la zone de préparation.

  • Ajout des fonctions current_session(), current_statement(), current_user(), current_version(), current_warehouse(), date_from_parts(), date_trunc(), dayname(), dayofmonth(), dayofweek(), dayofyear(), grouping(), grouping_id(), hour(), last_day(), minute(), next_day(), previous_day(), second(), month(), monthname(), quarter(), year(), current_database(), current_role(), current_schema(), current_schemas(), current_region(), current_avaliable_roles(), add_months(), any_value(), bitnot(), bitshiftleft(), bitshiftright(), convert_timezone(), uniform(), strtok_to_array(), sysdate(), time_from_parts(), timestamp_from_parts(), timestamp_ltz_from_parts(), timestamp_ntz_from_parts(), timestamp_tz_from_parts(), weekofyear(), percentile_cont() à snowflake.snowflake.functions.

Améliorations

  • Ajout de la prise en charge de la création d’un DataFrame vide avec un schéma spécifique à l’aide de la méthode Session.create_dataframe().

  • Changement du niveau de journalisation de INFO à DEBUG pour plusieurs journaux (par exemple, la requête exécutée) lors de l’évaluation d’un dataframe.

  • Amélioration du message d’erreur lors de l’échec de la création d’une UDF en raison d’erreurs de sérialisation.

  • Suppression des APIs suivantes devenues obsolètes dans la version 0.4.0 : DataFrame.groupByGroupingSets(), DataFrame.naturalJoin(), DataFrame.joinTableFunction, DataFrame.withColumns(), Session.getImports(), Session.addImport(), Session.removeImport(), Session.clearImports(), Session.getSessionStage(), Session.getDefaultDatabase(), Session.getDefaultSchema(), Session.getCurrentDatabase(), Session.getCurrentSchema(), Session.getFullyQualifiedCurrentSchema().

  • Ajout de typing-extension comme nouvelle dépendance avec la version >= 4.1.0.

Corrections de bogues

  • Suppression des dépendances matérielles de Pandas dans la méthode Session.create_dataframe().

Version 0.5.0 (2022-03-22)

Nouvelles fonctionnalités

  • Ajout d’API de procédures stockées.

  • Ajout de la propriété Session.sproc et de sproc() à snowflake.snowpark.functions, afin de pouvoir enregistrer des procédures stockées.

  • Ajout de Session.call pour appeler les procédures stockées par leur nom.

  • Ajout de UDFRegistration.register_from_file() pour permettre l’enregistrement d’UDFs directement à partir de fichiers sources Python ou de fichiers zip.

  • Ajout de UDFRegistration.describe() pour décrire une UDF.

  • Ajout de DataFrame.random_split() pour fournir un moyen de diviser aléatoirement un dataframe.

  • Ajout des fonctions md5(), sha1(), sha2(), ascii(), initcap(), length(), lower(), lpad(), ltrim(), rpad(), rtrim(), repeat(), soundex(), regexp_count(), replace(), charindex(), collate(), collation(), insert(), left(), right(), endswith() à snowflake.snowpark.functions.

  • La fonction call_udf() accepte désormais aussi les valeurs littérales.

  • Fourniture d’un mot-clé distinct dans array_agg().

Corrections de bogues

  • Correction d’un problème qui faisait que DataFrame.to_pandas() avait une colonne de type chaîne si Column.cast(IntegerType()) était utilisé.

  • Correction d’un bogue dans DataFrame.describe() lorsqu’il y a plus d’une colonne de chaîne.

Version 0.4.0 (2022-02-15)

Nouvelles fonctionnalités

  • Vous pouvez maintenant spécifier les paquets Anaconda à utiliser lors de la définition d’UDFs.

  • Ajout de add_packages(), get_packages(), clear_packages(), and remove_package() à la classe Session.

  • Ajout de add_requirements() à Session pour que vous puissiez utiliser un fichier d’exigences pour spécifier les paquets que cette session utilisera.

  • Ajout d’un paramètre packages à la fonction snowflake.snowpark.functions.udf() et à la méthode UserDefinedFunction.register() pour indiquer les dépendances des paquets Anaconda au niveau de l’UDF lors de la création d’une UDF.

  • Ajout du paramètre imports à snowflake.snowpark.functions.udf() et UserDefinedFunction.register() pour spécifier les importations de code au niveau d’une UDF.

  • Ajout d’un paramètre session aux fonctions udf() et UserDefinedFunction.register() afin que vous puissiez spécifier quelle session utiliser pour créer une UDF si vous avez plusieurs sessions.

  • Ajout des types Geography et Variant à snowflake.snowpark.types pour qu’ils soient utilisés comme indications de type pour les données Geography et Variant lors de la définition d’une UDF.

  • Ajout de la prise en charge des données geoJSON Geography.

  • Ajout de Table, une sous-classe de DataFrame pour les opérations sur les tables.

  • Les méthodes update et delete mettent à jour et suppriment les lignes d’une table dans Snowflake.

  • La méthode merge fusionne les données d’un DataFrame avec une table.

  • Méthode DataFrame.sample() remplacée par un paramètre supplémentaire seed, qui fonctionne sur les tables, mais pas sur les vues et les sous-requêtes.

  • Ajout de DataFrame.to_local_iterator() et DataFrame.to_pandas_batches() pour permettre l’obtention de résultats à partir d’un itérateur lorsque le jeu de résultats renvoyé par la base de données Snowflake est trop grand.

  • Ajout de DataFrame.cache_result() pour mettre en cache les opérations effectuées sur un DataFrame dans une table temporaire. Les opérations ultérieures sur le DataFrame d’origine n’ont aucun effet sur le DataFrame de résultat mis en cache.

  • Ajout de la propriété DataFrame.queries pour obtenir les requêtes SQL qui seront exécutées pour évaluer le DataFrame.

  • Ajout de Session.query_history() comme gestionnaire de contexte pour suivre les requêtes SQL exécutées sur une session, y compris toutes les requêtes SQL pour évaluer les DataFrames créés à partir d’une session. L’ID de la requête et le texte de la requête sont tous deux enregistrés.

  • Vous pouvez maintenant créer une instance de session à partir d’une snowflake.connector.SnowflakeConnection établie existante. Utilisez le paramètre connection dans Session.builder.configs().

  • Ajout de use_database(), use_schema(), use_warehouse() et use_role() à la classe Session pour changer de base de données/schéma/entrepôt/rôle après la création d’une session.

  • Ajout de DataFrameWriter.copy_into_table() pour décharger un DataFrame dans des fichiers en zone de préparation.

  • Ajout de DataFrame.unpivot().

  • Ajout de Column.within_group() pour trier les lignes par colonnes avec certaines fonctions d’agrégation.

  • Ajout des fonctions listagg(), mode(), div0(), acos(), asin(), atan(), atan2(), cos(), cosh(), sin(), sinh(), tan(), tanh(), degrees(), radians(), round(), trunc() et factorial() à snowflake.snowpark.functions.

  • Ajout d’un argument optionnel ignore_nulls dans les fonctions lead() et lag().

  • Le paramètre de condition des fonctions when() et iff() accepte désormais les expressions SQL.

Améliorations

  • Tous les noms de fonctions et de méthodes ont été renommés pour utiliser le style de dénomination « snake case », qui est plus orienté Python. Pour des raisons de commodité, certains noms en camel case sont conservés comme alias dans les APIs snake case. Il est recommandé d’utiliser les APIs snake case.

  • Dépréciation de ces méthodes sur la classe Session et remplacement par leurs équivalents snake case : getImports(), addImports(), removeImport(), clearImports(), getSessionStage(), getDefaultSchema(), getDefaultSchema(), getCurrentDatabase() et getFullyQualifiedCurrentSchema().

  • Dépréciation de ces méthodes sur la classe DataFrame et remplacement par leurs équivalents snake case : groupingByGroupingSets(), naturalJoin(), withColumns() et joinTableFunction().

  • La propriété DataFrame.columns est maintenant cohérente avec DataFrame.schema.names et les exigences de l’identificateur de la base de données Snowflake.

  • Column.__bool__() génère maintenant un TypeError. Cela interdira l’utilisation des opérateurs logiques and, or, not sur l’objet Colonne. Par exemple, col(« a ») > 1 et col(« b ») > 2 provoqueront un TypeError. Utilisez plutôt (col(« a ») > 1) & (col(« b ») > 2).

  • Changement de PutResult et GetResult en sous-classe NamedTuple.

  • Correction d’un bogue qui générait une erreur lorsque le chemin local ou l’emplacement de la zone de préparation comporte un espace ou d’autres caractères spéciaux.

  • Modification de DataFrame.describe() de sorte que les colonnes qui ne sont pas numériques et qui ne sont pas des chaînes soient ignorées au lieu de générer une exception.

Mises à jour des dépendances

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

Version 0.3.0 (2022-01-09)

Nouvelles fonctionnalités

  • Ajout de Column.isin() avec un alias Column.in_().

  • Ajout de Column.try_cast(), qui est une version spéciale de cast(). Elle tente de convertir une expression de type chaîne en d’autres types et renvoie null si la conversion n’est pas possible.

  • Ajout de Column.startswith() et Column.substr() pour traiter les colonnes de chaînes.

  • Column.cast() accepte désormais une valeur str pour indiquer le type de conversion en plus d’une instance DataType.

  • Ajout de DataFrame.describe() pour synthétiser les statistiques d’un DataFrame.

  • Ajout de DataFrame.explain() pour afficher le plan de requête d’un DataFrame.

  • DataFrame.filter() et DataFrame.select_expr() acceptent désormais une expression SQL.

  • Ajout d’un nouveau paramètre bool appelé create_temp_table aux méthodes DataFrame.saveAsTable() et Session.write_pandas() pour créer facultativement une table temporaire.

  • Ajout de DataFrame.minus() et DataFrame.subtract() comme alias de DataFrame.except_().

  • Ajout de regexp_replace(), concat(), concat_ws(), to_char(), current_timestamp(), current_date(), current_time(), months_between(), cast(), try_cast(), greatest(), least() et hash() au module snowflake.snowpark.functions.

Corrections de bogues

  • Correction d’un problème où Session.createDataFrame(pandas_df) et Session.write_pandas(pandas_df) généraient une exception lorsque le DataFrame Pandas avait des espaces dans le nom de la colonne.

  • Correction d’un problème où DataFrame.copy_into_table() affichait parfois de manière erronée une entrée de journal de niveau d’erreur.

  • Correction d’un problème de documentation de l’API où certaines APIs de DataFrame étaient absentes de la documentation.

Mises à jour des dépendances

  • Mise à niveau de snowflake-connector-python vers la version 2.7.2, qui met à niveau la dépendance pyarrow vers la version 6.0.x. Pour plus d’informations, consultez les notes de version du connecteur Python 2.7.2.

Version 0.2.0 (2021-12-02)

Nouvelles fonctionnalités

  • Ajout de la méthode createDataFrame() pour créer un DataFrame à partir d’un DataFrame Pandas.

  • Ajout de la méthode write_pandas() pour écrire un DataFrame Pandas dans une table dans Snowflake et récupérer un objet DataFrame Snowpark.

  • Ajout de nouvelles classes et méthodes pour l’appel de fonctions de fenêtre.

  • Ajout des nouvelles fonctions cume_dist(), pour trouver la distribution cumulative d’une valeur par rapport aux autres valeurs dans une partition de fenêtre, et row_number(), qui renvoie un numéro de ligne unique pour chaque ligne dans une partition de fenêtre.

  • Ajout de fonctions pour le calcul de statistiques pour DataFrames dans la classe DataFrameStatFunctions .

  • Ajout de fonctions pour traiter les valeurs manquantes dans un DataFrame de la classe DataFrameNaFunctions .

  • Ajout de nouvelles méthodes : rollup(), cube() et pivot() à la classe DataFrame.

  • Ajout de la classe GroupingSets, que vous pouvez utiliser avec la méthode DataFrame groupByGroupingSets pour effectuer un SQL GROUP BY GROUPING SETS.

  • Ajout de la nouvelle classe FileOperation(session) que vous pouvez utiliser pour charger et télécharger des fichiers vers et depuis une zone de préparation.

  • Ajout de la méthode copy_into_table() pour charger les données des fichiers d’une zone de préparation dans une table.

  • Dans les expressions CASE, les fonctions when et otherwise acceptent désormais les types Python en plus des objets de colonne.

  • Lorsque vous enregistrez une UDF, vous pouvez maintenant, si vous le souhaitez, définir le paramètre replace sur True pour remplacer une UDF existante avec une autre qui porte le même nom.

Améliorations

  • Les UDFs sont désormais compressées avant d’être chargées sur le serveur. Ils sont ainsi environ 10 fois plus petits, ce qui peut s’avérer utile lorsque vous utilisez des fichiers de modèles ML volumineux.

  • Lorsque la taille d’une UDF est inférieure à 8 196 octets, celle-ci sera chargée en tant que code en ligne au lieu d’être chargée dans une zone de préparation.

Corrections de bogues

  • Correction d’un problème où l’instruction df.select(when(col(« a ») == 1, 4).otherwise(col(« a »))), [Row(4), Row(2), Row(3)] générait une exception.

  • Correction d’un problème où df.toPandas() générait une exception lorsqu’un DataFrame était créé à partir de données locales volumineuses.