Snowpark Library for Python release notes for 2026¶
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
Because Python 3.8 has reached its End of Life, deprecation warnings will be triggered when you use snowpark-python with Python 3.8. For more information, 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 later.
Version 1.53.0: Jul 09, 2026¶
New features¶
- Added the
udf_init_oncedecorator insnowflake.snowpark.functionsfor marking functions to be executed once during pre-fork initialization on Snowflake workers, matching the server-side_snowflake.udf_init_onceAPI.
Bug fixes¶
- Fixed a bug where stage paths and file format names that contain single quotes were not consistently escaped when generating SQL, which could produce malformed statements. This affects
INFER_SCHEMA(used byDataFrameReader.csv/json/parquet/orc/avro) andCOPY FILES(used byFileOperation.copy_files). - Fixed a bug where single quotes and backslashes in stage/file paths were not correctly escaped when generating
COPY INTO/PUT/GETSQL, which could produce malformed statements. This affectsDataFrame.write.csv/copy_into_locationand the Snowpark-pandasDataFrame.to_csvstage path. - Fixed a bug where column names containing quote characters returned by an external database were not correctly escaped when generating the
SELECTquery forDataFrameReader.dbapi, which could produce malformed SQL. Embedded quote characters in identifiers are now doubled (backticks for Databricks/MySQL, double quotes for Oracle/PostgreSQL/SQL Server). - Fixed a bug where the destination passed to
DataFrameWriter.copy_into_location(andcsv/json/parquet/save) was embedded into the generatedCOPY INTOstatement without quoting, which could produce malformed SQL for locations containing single quotes. The location is now consistently quoted and escaped, and a string that merely starts and ends with a single quote but contains unescaped interior quotes is no longer treated as an already-quoted literal; it is fully escaped so it stays a single SQL string literal. - Fixed a bug where UDF default argument values reconstructed from a source file in
register_from_filewere evaluated witheval(); they are now evaluated only against the documented set of supported default-value types, and unsupported expressions are ignored. - Fixed a bug where
object_name,object_domain, orobject_versionvalues containing single quotes or backslashes insession.lineage.trace()caused incorrect SQL generation. These values are now properly escaped before being embedded in theSYSTEM$DGQLcall. - Fixed a bug where single quotes and backslashes in
comment(create_or_replace_view/ dynamic table /save_as_table), collation specs (Column.collate), VARIANT/OBJECT subfield keys (Column[...]), andDataFrame/Session.flattenpaths were not correctly escaped when generating SQL, which could produce malformed statements. Backslash sequences (for example,\t,\n) in these values are now applied literally rather than interpreted. - Fixed a bug where string values in the AI functions (
ai_extract,ai_classify,ai_similarity,ai_parse_document,ai_transcribe,ai_complete) configuration andresponse_formatwere not correctly escaped when generating the SQL object literal, which could produce malformed statements when a value contained single quotes or backslashes (for example, an apostrophe in a natural-language question).
Dependency updates¶
- Lifted
protobufrestriction for Python 3.14 from==5.29.3to>=5.29.3,<6.34. - Capped
pandasto<3.0.0for the[pandas]install extra, as Snowpark Python pandas-related features may not be fully compatible with pandas 3.0 or later.
Version 1.52.0: Jun 10, 2026¶
New features¶
- Added
get_wif_tokentosnowflake.snowpark.secretsfor workload identity federation tokens on the Snowflake server (not available in SPCS file-based secret environments).
Bug fixes¶
- Fixed a bug where copying a
DataFrameviacopy.copy()lost post-aggregate state, causing subsequent.limit()or.sort()to generate incorrect SQL. - Fixed a bug where calling
DataFrame.alias()twice on the same DataFrame (for example, for a self-join) caused both aliases to share the same internal column-mapping dictionary. This madecol("R", "col")resolve to the same column ascol("L", "col"), producing incorrect join conditions and filter expressions. - Fixed a bug where
cloudpicklecould not be resolved when registering a Python stored procedure or UDF withruntime_version='3.13'.
Improvements¶
- Improved CTE optimization to deduplicate identical subtrees in self-joins, which were previously emitted as repeated subqueries.
- Reduced the size of generated query text for repeated join operations.
Deprecations¶
- Removed support for Python 3.9.
Version 1.51.1: May 28, 2026¶
Documentation¶
- Clarified that the JDBC driver JAR referenced via
udtf_configs.importsinDataFrameReader.jdbc()must be downloaded from the database vendor and uploaded to a Snowflake stage.
Version 1.51.0: May 18, 2026¶
Bug fixes¶
- Fixed a bug where
AsyncJob.result("no_result")sometimes silently returned without raising error for failed queries. - Fixed a bug where
INTERVAL YEAR TO MONTHvalues with zero months were displayed incorrectly (for example,INTERVAL '0-4' YEAR TO MONTHinstead ofINTERVAL '4-0' YEAR TO MONTH) when usingsnowflake-connector-python>=4.3.0.
Improvements¶
- When
Session.reduce_describe_query_enabledis enabled, fewer DESCRIBE queries are issued when the outer query only projects or renames columns from an inner subquery whose column types are already known.
Version 1.50.1: May 06, 2026¶
Bug fixes¶
- Fixed a bug where using parameter bindings for
CALLqueries issued throughsession.sqlwould raise an error. - Fixed a bug where
StringTypecolumns from Iceberg tables were not recognized as max-size strings. - Improved the
FileNotFoundErrormessage raised whenINFER_SCHEMAreturns zero rows so it also points to file format options (PARSE_HEADER,SKIP_HEADER,ON_ERROR=CONTINUE) that can silently filter everything out, instead of only suggesting a missing path.
Version 1.50.0: Apr 23, 2026¶
New features¶
- Added
artifact_repositorysupport toudtf_configsinsession.read.dbapi(), enabling users to specify a custom artifact repository (for example, PyPI) for packages used by the internal UDTF during distributed ingestion.
Bug fixes¶
- Fixed a bug where
TRY_CASTreader option is ignored when callingDataFrameReader.schema().csv(). - Fixed a bug where
event_table_telemetryis using incorrect resource attributes. - Fixed a bug where
value_contains_nullwas not propagated forMapTypein_as_nestedfunction. - Fixed a bug where CTE optimization incorrectly deduplicated subtrees containing non-deterministic data generation functions (for example,
uuid_string()). - Fixed a bug where vectorized UDFs using non-anaconda package repositories did not specify the pandas package by default.
Snowpark pandas API updates¶
Dependency updates¶
- Updated the supported
pandasversions to <=2.4 (was previously <=2.3.1).
Version 1.49.0: Apr 13, 2026¶
New features¶
- Allow a user-specified schema when reading Parquet files from a stage.
Improvements¶
- Restored the following query improvements that were reverted in 1.47.0 due to bugs:
- Reduced the size of queries generated by certain
DataFrame.joinoperations. - Removed redundant aliases in generated queries (for example,
SELECT "A" AS "A"is now always simplified toSELECT "A").
- Reduced the size of queries generated by certain
- Removed warning that
DataFrameReader.dbapifeature was in private preview.
Bug fixes¶
- Fixed a bug where
Session.create_dataframeraisedTypeErrorwhen aStringTypecolumn was given a non-string Python value (for example,int,float,bool,Decimal) for a small local relation (below the array bind threshold);VALUESSQL generation now coerces these types to string literals, consistent with the large-data bind-parameter path. - Fixed a bug where
DataFrame.approxQuantiledid not accept aColumnfor thecolparameter.
Snowpark Local Testing updates¶
Bug fixes¶
- Fixed a bug where
concatproduced extra NaN rows and mismatched values after afilteroperation in local testing. - Fixed a bug where
dense_rank()would fail withValueErroron NULL partition values. - Fixed a bug where
collect()raisedKeyErroraftersave_as_table(column_order="name")when the source DataFrame omitted columns with typesVariantType,MapType, orArrayTypethat were present in the target table schema in local testing.
Version 1.48.1: Mar 31, 2026¶
Bug fixes¶
- Fixed a bug where chained
DataFrame.filter()calls with raw SQL text containingORproduced incorrect results. - Fixed a Snowflake platform compatibility issue where
concat(lit('"'), ...)could lose the leading quote through chained set-operation plans. - Fixed a bug for XML schema inference session resolution in spark compatible mode.
Version 1.48.0: Mar 23, 2026¶
New features¶
- Added support for DIRECTED JOIN.
- Added support for the
INCLUDE_METADATAcopy option inDataFrame.copy_into_table, allowing users to include file metadata columns in the target table.
Bug fixes¶
- Fixed a bug in
Session.client_telemetrywhere traces did not include a Snowflake-style trace ID. - Fixed a bug where saving a Snowpark DataFrame into an Iceberg table in overwrite mode raised an error because
StringTypewas saved with the wrong length. - Fixed a bug in
ai_completewheremodel_parametersandresponse_formatvalues containing single quotes would generate malformed SQL. - Fixed a bug in
DataFrameReader.xml()where reading XML with a custom schema whose field names contain colons (for example,px:name) raised aSnowparkColumnException. - Fixed a bug in
Session.read.jsonthat caused SQL compilation errors whenINFER_SCHEMAwas set to True and theUSE_RELAXED_TYPESfield ofINFER_SCHEMA_OPTIONSwas also set to True. - Fixed a bug where passing a DataFrame created from a SQL
SETcommand to Streamlit’sst.writemethod would raise an exception. - Fixed a bug where the account-level default artifact repository setting was not reflected in creation of stored procedures/UDFs.
Improvements¶
- Use internal describe to get return type when executing a stored procedure.
Version 1.47.0: Mar 05, 2026¶
New features¶
- Added support for the
array_union_aggfunction in thesnowflake.snowpark.functionsmodule.
Bug fixes¶
- Fixed a bug where
Session.udf.register_from_filedid not properly process thestrictandsecureparameters. - Fixed a bug where an error is raised on a string value in
DecimalTypecolumn when creating a DataFrame with small data (< array binding threshold). - Reverted the following improvements introduced in 1.46.0 as they caused unintended breaking changes in some query patterns:
- Reduced the size of queries generated by certain
DataFrame.joinoperations. - Removed redundant aliases in generated queries (for example,
SELECT "A" AS "A"is now always simplified toSELECT "A").
- Reduced the size of queries generated by certain
Version 1.46.0: Feb 25, 2026¶
New features¶
- Added support for the
DECFLOATdata type that allows users to represent decimal numbers exactly with 38 digits of precision and a dynamic base-10 exponent. - Added support for the
DEFAULT_PYTHON_ARTIFACT_REPOSITORYparameter that allows users to configure the default artifact repository at the account, database, and schema level.
Bug fixes¶
- Fixed a bug where
cloudpicklewas not automatically added to the package list when usingartifact_repositorywith custom packages, causingModuleNotFoundErrorat runtime. - Fixed a bug when reading xml with custom schema that results in element attributes that are included when a column is not of the
StructTypetype. - Fixed a bug where
Session.udf.register_from_filedid not properly process thestrictandsecureparameters.
Improvements¶
- Reduced the size of queries generated by certain
DataFrame.joinoperations. - Removed redundant aliases in generated queries (for example,
SELECT "A" AS "A"is now always simplified toSELECT "A").
Version 1.45.0: Jan 26, 2026¶
New features¶
-
Allow user input schema when reading an XML file on a stage.
-
Added support for the following functions in
functions.py:hex_decode_stringjarowinkler_similarityparse_urlregexp_instrregexp_likeregexp_substrregexp_substr_allrtrimmed_lengthspacesplit_part
-
Added the
preserve_parameter_namesflag to stored procedure, UDF, UDTF, and UDAF creation.
Bug fixes¶
- Fixed a bug where
opentelemetryis not correctly imported when usingSession.client_telemetry.enable_event_table_telemetry_collection.
Improvements¶
snowflake.snowpark.context.configure_development_featuresis effective for multiple sessions including newly created sessions after the configuration. There is no longer a duplicate experimental warning.- Removed the experimental warning from
DataFrame.to_arrowandDataFrame.to_arrow_batches. - When both
Session.reduce_describe_query_enabledandSession.cte_optimization_enabledare enabled, fewerDESCRIBEqueries are issued when resolving a table schema.