Snowpark Library for Python release notes for 2025

This article contains the release notes for the Snowpark Library for Python, including the following when applicable:

  • Behavior changes

  • New features

  • Customer-facing bug fixes

Snowflake uses semantic versioning for Snowpark Library for Python updates.

See Snowpark Developer Guide for Python for documentation.

warning:

As Python 3.8 has reached its End of Life, deprecation warnings will be triggered when using snowpark-python with Python 3.8. For more details, see Snowflake Python Runtime Support. Snowpark Python 1.24.0 will be the last client and server version to support Python 3.8, in accordance with Anaconda’s policy. Upgrade your existing Python 3.8 objects to Python 3.9 or greater.

Version 1.28.0 (2025-02-20)

Improvements

  • Improved random object name generation to avoid collisions.

  • Improved query generation for Dataframe.distinct to generate SELECT DISTINCT instead of SELECT with GROUP BY all columns. To disable this feature, set session.conf.set("use_simplified_query_generation", False).

Deprecations

  • Fixed a bug in options sql generation that could cause multiple values to be formatted incorrectly.

  • Fixed a bug in Session.catalog where empty strings for database or schema were not handled correctly and were generating erroneous sql statements.

Experimental Features

  • Added support for writing pyarrow Tables to Snowflake tables.

  • Added support for the following functions:

    • hour

    • minute

  • Added support for NULL_IF parameter to CSV reader.

  • Added support for date_format, datetime_format, and timestamp_format options when loading CSVs.

Bug fixes

  • Fixed a bug in Dataframe.join that caused columns to have incorrect typing.

  • Fixed a bug in when statements that caused incorrect results in the otherwise clause.

Snowpark local testing updates

New features

  • Added support for NULL_IF parameter to CSV reader.

  • Added support for date_format, datetime_format, and timestamp_format options when loading CSVs.

Version 1.27.0 (2025-02-05)

New features

Added support for the following functions in 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

  • Added support for specifying a schema string (including implicit struct syntax) when calling DataFrame.create_dataframe.

  • Added support for DataFrameWriter.insert_into/insertInto. This method also supports local testing mode.

  • Added support for DataFrame.create_temp_view to create a temporary view. It will fail if the view already exists.

  • Added support for multiple columns in the functions map_cat and map_concat.

  • Added an option keep_column_order for keeping original column order in DataFrame.with_column and DataFrame.with_columns.

  • Added options to column casts that allow renaming or adding fields in StructType columns.

  • Added support for contains_null parameter to ArrayType.

  • Added support for creating a temporary view via DataFrame.create_or_replace_temp_view from a DataFrame created by reading a file from a stage.

  • Added support for value_contains_null parameter to MapType.

  • Added interactive to telemetry that indicates whether the current environment is an interactive one.

  • Allow session.file.get in a Native App to read file paths starting with / from the current version

  • Added support for multiple aggregation functions after DataFrame.pivot.

Experimental features

  • Added Session.catalog class to manage Snowflake objects. It can be accessed via Session.catalog.

    • snowflake.core is a dependency required for this feature.

  • Allow user input schema or user input schemas when reading JSON file on stage.

  • Added support for specifying a schema string (including implicit struct syntax) when calling DataFrame.create_dataframe.

Improvements

  • Updated README.md to include instructions on how to verify package signatures using cosign.

Bug fixes

  • Fixed a bug in local testing mode that caused a column to contain None when it should contain 0.

  • Fixed a bug in StructField.from_json that prevented TimestampTypes with tzinfo from being parsed correctly.

  • Fixed a bug in function date_format that caused an error when the input column was date type or timestamp type.

  • Fixed a bug in DataFrame that allowed null values to be inserted in a non-nullable column.

  • Fixed a bug in functions replace and lit which raised type hint assertion error when passing Column expression objects.

  • Fixed a bug in pandas_udf and pandas_udtf where session parameters were erroneously ignored.

  • Fixed a bug that raised an incorrect type conversion error for system function called through session.call.

Snowpark pandas API updates

New features

  • Added support for Series.str.ljust and Series.str.rjust.

  • Added support for Series.str.center.

  • Added support for Series.str.pad.

  • Added support for applying the Snowpark Python function snowflake_cortex_sentiment.

  • Added support for DataFrame.map.

  • Added support for DataFrame.from_dict and DataFrame.from_records.

  • Added support for mixed case field names in struct type columns.

  • Added support for SeriesGroupBy.unique

  • Added support for Series.dt.strftime with the following directives:

    • %d: Day of the month as a zero-padded decimal number.

    • %m: Month as a zero-padded decimal number.

    • %Y: Year with century as a decimal number.

    • %H: Hour (24-hour clock) as a zero-padded decimal number.

    • %M: Minute as a zero-padded decimal number.

    • %S: Second as a zero-padded decimal number.

    • %f: Microsecond as a decimal number, zero-padded to 6 digits.

    • %j: Day of the year as a zero-padded decimal number.

    • %X: Locale’s appropriate time representation.

    • %%: A literal ‘%’ character.

  • Added support for Series.between.

  • Added support for include_groups=False in DataFrameGroupBy.apply.

  • Added support for expand=True in Series.str.split.

  • Added support for DataFrame.pop and Series.pop.

  • Added support for first and last in DataFrameGroupBy.agg and SeriesGroupBy.agg.

  • Added support for Index.drop_duplicates.

  • Added support for aggregations "count", "median", np.median, "skew", "std", np.std "var", and np.var in pd.pivot_table(), DataFrame.pivot_table(), and pd.crosstab().

Improvements

  • Improved performance of DataFrame.map, Series.apply and Series.map methods by mapping numpy functions to Snowpark functions if possible.

  • Added documentation for DataFrame.map.

  • Improved performance of DataFrame.apply by mapping numpy functions to Snowpark functions if possible.

  • Added documentation on the extent of Snowpark pandas interoperability with scikit-learn.

  • Infer return type of functions in Series.map, Series.apply and DataFrame.map if type-hint is not provided.

  • Added call_count to telemetry that counts method calls including interchange protocol calls.