2025 年 Snowpark Library for Python 版本说明

本文包含 Snowpark Library for Python 的版本说明,包括以下内容(如果适用):

  • 行为变更

  • 新功能

  • 面向客户的错误修复

Snowflake 对 Snowpark Library for Python 更新使用语义版本控制。

有关文档,请参阅 Snowpark Python 开发者指南

警告

由于 Python 3.8 已达到其 生命周期结束 (https://devguide.python.org/versions/) ,在 Python 3.8 中使用 snowpark-python 时将触发弃用警告。有关更多详细信息,请参阅 Snowflake Python 运行时支持。根据 Anaconda 的策略 (https://forum.anaconda.com/t/python-3-8-reaches-end-of-life/87265),Snowpark Python 1.24.0 将是支持 Python 3.8 的最后一个客户端和服务器版本。将现有 Python 3.8 对象升级到 Python 3.9 或更高版本。

版本 1.30.0(2025 年 3 月 27 日)

新功能

  • 引入 relaxed_ordering 参数,从而添加了对:code:Dataframe.to_snowpark_pandas 中放宽的一致性和排序保证的支持。

  • DataFrameReader.dbapi`(预览版)现在可接受:code:`session_init_statement 参数的字符串列表,允许在会话初始化期间执行多个 SQL 语句。

改进

  • 相较于为 fractions 中的每个关键字创建 UNION ALL 子查询的旧方法,改进了:code:Dataframe.stat.sample_by 的查询生成,可生成单个平面查询,并能很好地通过大型 fractions 字典进行扩展。设置 session.conf.set("use_simplified_query_generation", True) 以启用此功能。

  • 在将 Parquet 文件复制到表中时启用矢量化选项,从而提高 DataFrameReader.dbapi 的性能。

  • 通过以下方式改进了 DataFrame.random_split 的查询生成。可以通过设置 session.conf.set("use_simplified_query_generation", True) 来启用它们:

    • 无需在输入数据帧的内部实现中使用 cache_result,从而实现了纯粹的惰性数据帧操作。

    • seed 实参现在可在多次调用和会话中重复表现出预期行为。

  • include_decimal 设置为 True 的情况下,DataFrame.fillna 和:code:DataFrame.replace 现在均支持将 intfloat 纳入 Decimal 列。

  • files.py 中添加了以下 UDF 和存储过程函数的文档,因为它们已经正式发布。

    • SnowflakeFile.write

    • SnowflakeFile.writelines

    • SnowflakeFile.writeable

  • 对于 SnowflakeFileSnowflakeFile.open() 的文档进行了细微修改。

错误修复

  • 修复了以下函数的一个会引发错误的错误。.cast() 应用于其输出:

    • from_json

    • size

Snowpark 本地测试更新

错误修复

  • 修复了聚合中的一个错误,该错误会导致空组仍产生行。

  • 修复了 Dataframe.except_ 中的一个错误,该错误会导致不正确地删除行。

  • 修复了在对筛选出的行执行类型转换时导致 to_timestamp 失败的一个错误。

Snowpark pandas API 更新

新功能

  • Series.str.__getitem__ (Series.str[...]) 中添加了对列表值的支持。

  • 在 GROUP BY 操作中添加了对 pd.Grouper 对象的支持。在指定 freq 时,支持 sortclosedlabelconvention 实参的默认值;如为 startstart_day,则支持 origin

  • 引入新参数 relaxed_ordering,在 pd.read_snowflake 中为指定数据源(例如表和视图)和查询数据源添加了对放宽的一致性和排序保证的支持。

改进

  • 一旦发现设置了 QUOTED_IDENTIFIERS_IGNORE_CASE,就会发出警告,要求用户将其取消设置。

  • 改进了在 index=True 时,对 DataFrame.to_snowflakeSeries.to_snowflake 中缺失的 index_label 的处理方式。索引列使用系统定义的标签,而不会引发 ValueError

  • 改进了在函数名称不受支持时,groupbyDataFrameSeries.agg 的错误消息。

Snowpark 本地测试更新

改进

  • 一旦发现设置了 QUOTED_IDENTIFIERS_IGNORE_CASE,就会发出警告,要求用户将其取消设置。

  • 改进了在 index=True 时,对 DataFrame.to_snowflakeSeries.to_snowflake 中缺失的 index_label 的处理方式。索引列使用系统定义的标签,而不会引发 ValueError

  • 改进了在函数名称不受支持时,groupby or DataFrame or Series.agg 的错误消息。

版本 1.29.1(2025 年 3 月 12 日)

错误修复

  • 修复了 :code:`DataFrameReader.dbapi`(非公开预览版)中一个导致无法在存储过程和 Snowbooks 中使用的错误。

版本 1.29.0(2025 年 3 月 5 日)

新功能

  • 在 :file:`functions.py`(非公开预览版)中添加了对以下 AI 功能的支持:

    • ai_filter

    • ai_agg

    • summarize_agg

  • 在 :file:`functions.py`(非公开预览版)中添加了对新的 FILE SQL 类型的支持,以及以下相关函数:

    • 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

  • 添加了使用工件库(非公开预览版)从 PyPi 导入第三方包的支持:

    • 在注册存储过程或用户定义的函数时,使用关键字实参 artifact_repositoryartifact_repository_packages 分别指定工件存储库和包。

    • 支持的 APIs 如下:

      • 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

改进

  • 改进了注册存储过程时的版本验证警告,以确保 snowflake-snowpark-python 包的兼容性。现在,只有当主要版本或次要版本不匹配时才会触发警告,错误修复版本差异不会再生成警告。

  • 升级了 cloudpickle 的依赖项,使其除了支持以前的版本外,还支持 cloudpickle==3.0.0

错误修复

  • 修复了以下错误:在禁用线程安全会话的情况下,创建包含大量值的数据帧时会引发 Unsupported feature 'SCOPED_TEMPORARY'. 错误。

  • 修复了以下错误:如果通过读取暂存文件创建了 DataFrame,且 CTE 优化已启用,则 df.describe 会引发内部 SQL 执行错误。

  • 修复了以下错误:使用 session.conf.set("use_simplified_query_generation", True) 启用简化查询生成时,df.order_by(A).select(B).distinct() 会生成无效的 SQL。

    • 默认禁用简化查询生成。

Snowpark pandas API 更新

改进

  • 改进了表不存在时的 pd.to_snowflakeDataFrame.to_snowflakeSeries.to_snowflake 错误消息。

  • 改进了 pd.to_snowflakeDataFrame.to_snowflakeSeries.to_snowflakeif_exists 参数 docstring 的可读性。

  • 改进了所有使用 UDFs 与 Snowpark 对象的 pandas 函数的错误消息。

错误修复

  • 修复了 Series.rename_axis 中的一个错误,该错误会引发 AttributeError

  • 修复了 pd.get_dummies 默认不忽略 NULL/NaN 值的错误。

  • 修复了一个错误,即重复调用 pd.get_dummies 会导致“列名重复错误”。

  • 修复了 pd.get_dummies 中的一个错误,即传递列列表会在输出 DataFrame 中生成不正确的列标签。

  • 更新了 pd.get_dummies,以返回 bool 值而非 int 值。

Snowpark 本地测试更新

新功能

  • range_between 窗口函数中添加了对字面量的支持。

版本 1.28.0(2025 年 2 月 20 日)

新功能

  • functions.py 中添加了对以下函数的支持

    • normal

    • randn

  • Dataframe.union_by_nameDataframe.union_all_by_name 添加了对 allow_missing_columns 参数的支持。

改进

  • 改进了随机对象名称的生成,以避免冲突。

  • 改进了 Dataframe.distinct 的查询生成,以生成 SELECT DISTINCT,而不必在执行 SELECT 时对所有列进行 GROUP BY。要禁用此功能,请设置 session.conf.set("use_simplified_query_generation", False)

弃用

  • 已弃用 Snowpark Python 函数 snowflake_cortex_summarize。用户可以安装 snowflake-ml-python 并改为使用:code:snowflake.cortex.summarize 函数。

  • 已弃用 Snowpark Python 函数 snowflake_cortex_sentiment。用户可以安装 snowflake-ml-python 并改为使用:code:snowflake.cortex.sentiment 函数。

错误修复

  • 修复了以下错误:对于生成多个查询的 DataFrames,会话级查询标签会被堆栈跟踪覆盖。现在,只有在 session.conf.set("collect_stacktrace_in_query_tag", True) 的情况下,才会将查询标签设置为堆栈跟踪。

  • 修复了 Session._write_pandas 中的以下错误:在写入 Snowpark pandas 对象时,错误地将 use_logical_type 参数传递给 Session._write_modin_pandas_helper

  • 修复了选项 SQL 生成中的一个错误,该错误可能导致多个值的格式不正确。

  • 修复了 Session.catalog 中的一个错误,该错误导致无法正确处理数据库或架构的空字符串,并生成错误的 SQL 语句。

实验功能

  • 添加了将 pyarrow 表写入 Snowflake 表的支持。

Snowpark pandas API 更新

新功能

  • 添加了对应用 Snowflake Cortex 函数 SummarizeSentiment 的支持。

  • Series.str.get 中添加了对列表值的支持。

错误修复

  • 修复了 apply 中的一个错误,该错误会导致 kwargs 无法正确传入应用的函数。

Snowpark 本地测试更新

新功能

  • 添加了对以下函数的支持
    • hour

    • minute

  • 向 CSV 读取器添加了对 NULL_IF 参数的支持。

  • 添加了在加载 CSVs 时,对 date_formatdatetime_formattimestamp_format 选项的支持。

错误修复

  • 修复了 DataFrame.join 中的一个错误,该错误会导致列的类型设置不正确。

  • 修复了 when 语句中的一个错误,该错误会在 otherwise 子句中导致不正确的结果。

版本 1.27.0(2025 年 2 月 5 日)

新功能

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

  • 添加了在调用 DataFrame.create_dataframe 时,对指定架构字符串(包括隐式结构语法)的支持。

  • 添加了对 DataFrameWriter.insert_into/insertInto 的支持。此方法还支持本地测试模式。

  • 添加了对 DataFrame.create_temp_view 的支持,以创建临时视图。如果视图已经存在,则操作将会失败。

  • 在函数 map_catmap_concat 中添加了对多列的支持。

  • 添加了一个 keep_column_order 选项,用于在 DataFrame.with_columnDataFrame.with_columns 中保持原始列顺序。

  • 添加了列类型转换选项,允许在 StructType 列中重命名或添加字段。

  • ArrayType 添加了对 contains_null parameter 的支持。

  • 添加了以下支持:对通过从暂存区中读取文件创建的 DataFrame 执行:code:DataFrame.create_or_replace_temp_view,从而创建临时视图。

  • MapType 添加了对 value_contains_null 参数的支持。

  • 为遥测添加了交互能力,可指示当前环境是否为交互式环境。

  • 允许原生应用程序中的 session.file.get 从当前版本读取以 / 开头的文件路径

  • 添加了在 DataFrame.pivot 之后使用多个聚合函数的支持。

实验功能

  • 添加了 Session.catalog 类,用于管理 Snowflake 对象。可通过 Session.catalog 访问。

    • snowflake.core 是该功能需要的依赖项。

  • 在读取暂存区中的 JSON 文件时,允许一个或多个用户输入架构。

  • 添加了在调用 DataFrame.create_dataframe 时,对指定架构字符串(包括隐式结构语法)的支持。

改进

  • 已更新 README.md,以包括有关如何使用 cosign 验证包签名的说明。

错误修复

  • 修复了本地测试模式下的一个错误,该错误会导致列中应包含 0 时却包含 None。

  • 修复了 StructField.from_json 中的一个错误,该错误导致无法正确解析带有 tzinfoTimestampTypes

  • 修复了 function date_format 中的一个错误,该错误会在输入列为日期类型或时间戳类型时导致错误。

  • 修复了 DataFrame 中的一个错误,该错误允许在不可为 null 的列中插入 null 值。

  • 修复了函数 replacelit 中的一个错误,该错误会在传递列表达式对象时引发类型提示断言错误。

  • 修复了 pandas_udfpandas_udtf 中会话参数被错误地忽略的错误。

  • 修复了一个错误,在通过 session.call 调用系统函数时,该错误会引发错误的类型转换。

Snowpark pandas API 更新

新功能

  • 添加了对 Series.str.ljustSeries.str.rjust 的支持。

  • 添加了对 Series.str.center 的支持。

  • 添加了对 Series.str.pad 的支持。

  • 添加了对应用 Snowpark Python 函数 snowflake_cortex_sentiment 的支持。

  • 添加了对 DataFrame.map 的支持。

  • 添加了对 DataFrame.from_dictDataFrame.from_records 的支持。

  • 添加了对结构类型列中混合大小写字段名的支持。

  • 添加了对 SeriesGroupBy.unique 的支持

  • 添加了对 Series.dt.strftime 的支持,支持使用以下指令:

    • %d:以零填充十进制数字形式表示的日期。

    • %m:以零填充十进制数字形式表示的月份。

    • %Y:以十进制数字形式表示世纪的年份。

    • %H:以零填充十进制数字形式表示的小时(24 小时制时钟)。

    • %M:以零填充十进制数字形式表示的分钟。

    • %S:以零填充十进制数字形式表示的秒钟。

    • %f:以零填充到 6 位的十进制数形式表示的微秒。

    • %j:以零填充十进制数字形式表示的一年当中的第几天。

    • %X:对于区域设置而言适当的时间表示法。

    • %%:“%”字面量字符。

  • 添加了对 Series.between 的支持。

  • DataFrameGroupBy.apply 中添加了对 include_groups=False 的支持。

  • Series.str.split 中添加了对 expand=True 的支持。

  • 添加了对 DataFrame.popSeries.pop 的支持。

  • DataFrameGroupBy.aggSeriesGroupBy.agg 中添加了对 firstlast 的支持。

  • 添加了对 Index.drop_duplicates 的支持。

  • pd.pivot_table()DataFrame.pivot_table()pd.crosstab() 中添加了对聚合 "count""median"np.median"skew""std"np.std "var"np.var 的支持。

改进

  • 通过尽可能将 numpy 函数映射到 Snowpark 函数,提高了 DataFrame.mapSeries.applySeries.map 方法的性能。

  • 添加了 DataFrame.map 的文档。

  • 通过尽可能将 numpy 函数映射到 Snowpark 函数,提高了 DataFrame.apply 的性能。

  • 添加了有关 Snowpark Pandas 与 scikit-learn 之间的互操作性程度的文档。

  • 如果未提供类型提示,则推断 Series.mapSeries.applyDataFrame.map 中函数的返回类型。

  • 为遥测添加了 call_count,用于计算方法调用,包括交换协议调用。

语言: 中文