2024 年 Snowpark Library for Python 版本说明¶
本文包含 Snowpark Library for Python 的版本说明,包括以下内容(如果适用):
行为变更
新功能
面向客户的错误修复
Snowflake 对 Snowpark Library for Python 更新使用语义版本控制。
版本 1.16.0(2024 年 5 月 8 日)¶
1.16.0 版 Snowpark 库推出了一些新功能。
新功能¶
添加了
snowflake.snowpark.Session.lineage.trace
,以探索 Snowflake 对象的数据沿袭。添加了以下支持:通过作为 Python 模块提供的包注册存储过程。
添加了对结构化类型架构解析的支持。
错误修复¶
修复了以下错误:在推断架构时,单引号被添加到已有单引号的暂存区文件。
本地测试更新¶
新功能¶
在模拟函数
to_date
中添加了对StringType
、TimestampType
和VariantType
的支持。添加了对以下 APIs 的支持:
snowflake.snowpark.functions
:get
concat
concat_ws
错误修复¶
修复了导致
NaT
和NaN
无法识别的错误。修复了以下错误:在推断架构时,单引号被添加到已有单引号的暂存区文件。
修复了以下错误:
DataFrameReader.csv
无法处理包含分隔符的引号值。修复了以下错误:当算数计算中存在
None
值,输出应保持None
,而不是math.nan
。修复了函数
sum
和covar_pop
中的错误:当存在math.nan
值时,输出也应为math.nan
。修复了以下错误:暂存区操作无法处理目录。
修复了以下错误:
DataFrame.to_pandas
应将精度为 38 的 Snowflake 数值类型视作int64
。
版本 1.15.0(2024 年 4 月 24 日)¶
1.15.0 版 Snowpark 库推出了一些新功能。
新功能¶
在
DataFrameWrite
中添加了truncate
保存模式,通过截断(而不是删除)基础表来覆盖现有表。添加了遥测功能,用于在收集操作期间计算查询计划高度和重复节点数。
添加了以下函数,将
DataFrame
中的数据添加到暂存区的一个或多个文件:DataFrame.write.json
DataFrame.write.csv
DataFrame.write.parquet
在
DataFrame
和DataFrameWriter
中为动作函数添加了使用开放遥测 APIs 的分布式跟踪。snowflake.snowpark.DataFrame
:collect
collect_nowait
to_pandas
count
show
snowflake.snowpark.DataFrameWriter
:save_as_table
向
snowflake.snowpark.Session.file.get
和snowflake.snowpark.Session.file.get_stream
添加了对snow://
URLs 的支持添加了以下支持:使用
comment
注册存储过程和 UDFs。UDAF 客户端支持提供公共预览版。敬请关注 UDAF 公共预览版的 Snowflake 公告。
添加了对动态透视的支持。此功能目前处于非公开预览阶段。
改进¶
通过将重复的子查询转换为公用表表达式 (CTEs),改进了编译和执行时生成的查询性能。该功能仍然是一项实验性功能,默认情况下未启用。您可以将
session.cte_optimization_enabled
设置为True
,启用该功能。
错误修复¶
修复了以下错误:
statement_params
没有传递给用于注册存储过程和用户定义函数的查询执行。修复了导致
snowflake.snowpark.Session.file.get_stream
在处理引用的暂存区位置时失败的问题。修复了以下错误:在找不到基础模块时,
utils.py
中的内部类型提示可能会提出AttributeError
。
本地测试更新¶
新功能¶
添加了以下支持:注册 UDFs 和存储过程。
添加了对以下 APIs 的支持:
snowflake.snowpark.Session
:file.put
file.put_stream
file.get
file.get_stream
read.json
add_import
remove_import
get_imports
clear_imports
add_packages
add_requirements
clear_packages
remove_package
udf.register
udf.register_from_file
sproc.register
sproc.register_from_file
snowflake.snowpark.functions
current_database
current_session
date_trunc
object_construct
object_construct_keep_null
pow
sqrt
udf
sproc
在模拟函数
to_time
中添加了对StringType
、TimestampType
和VariantType
的支持。
错误修复¶
修复了以下问题:常量函数的列填充空值。
修复了
to_object
、to_array
和to_binary
,以更好地处理空值输入。修复了以下问题:时间戳数据比较无法处理 2262 年之后的年份的。
修复了以下问题:
Session.builder.getOrCreate
应返回创建的模拟会话。
版本 1.14.0(2024 年 3 月 20 日)¶
1.14.0 版 Snowpark 库推出了一些新功能。
新功能¶
添加了以下支持:使用
process
方法创建矢量化 UDTFs。添加了对 DataFrame 函数的支持:
to_timestamp_ltz
to_timestamp_ntz
to_timestamp_tz
locate
添加了对 ASOF JOIN 类型的支持。
添加了对以下本地测试 APIs 的支持:
snowflake.snowpark.functions:
to_double
to_timestamp
to_timestamp_ltz
to_timestamp_ntz
to_timestamp_tz
greatest
least
convert_timezone
dateadd
date_part
snowflake.snowpark.Session:
get_current_account
get_current_warehouse
get_current_role
use_schema
use_warehouse
use_database
use_role
改进¶
将遥测添加到了本地测试。
改进了
DataFrameReader
的错误消息,在读取不存在的路径或路径下没有文件时引发FileNotFound
错误。
错误修复¶
修复了
SnowflakePlanBuilder
中的错误:save_as_table
没有正确筛选名称以$
开头并后跟一个数字的列。修复了以下错误:在解析导入和包时语句参数可能不起作用。
修复了本地测试中的错误:
LEFT ANTI 和 LEFT SEMI 联接删除具有 null 值的行。
当指定可选参数
field_optionally_enclosed_by
时,DataFrameReader.csv
错误地解析数据。当
pattern
是Column
时,Column.regexp
仅考虑首次输入。当更新行中的 null 值时,
Table.update
引发KeyError
。VARIANT 列在
DataFrame.collect
引发错误。count_distinct
在计数时无法正常工作。整型列中的 null 值引发
TypeError
。
版本 1.13.0(2024 年 2 月 26 日)¶
1.13.0 版 Snowpark 库推出了一些新功能。
新功能¶
添加了对
last_day
函数中的可选date_part
参数的支持。SessionBuilder.app_name
将在会话创建后设置query_tag
。添加了对以下本地测试功能的支持:
current_timestamp
current_date
current_time
strip_null_value
upper
lower
length
initcap
改进¶
添加了解释器关闭时的清理逻辑,以关闭所有活动会话。
错误修复¶
修复了
DataFrame.to_local_iterator
中的错误:如果在迭代器完成之前执行了另一个查询,则由于隔离级别设置不当,迭代器可能会产生错误的结果。修复了以下错误:在启用本地测试的情况下运行计划时,该错误会在错误消息中截断表名。
修复了以下错误:当范围较大时,
Session.range
返回空结果。
版本 1.12.1(2024 年 2 月 8 日)¶
1.12.1 版 Snowpark 库推出了一些新功能。
改进¶
默认情况下,在
to_pandas
转换期间使用split_blocks=True
,以优化内存分配。此参数将传递给pyarrow.Table.to_pandas
,以便PyArrow
将内存分配拆分为更小、更易于管理的块,而不是分配单个连续块。这样可以在处理较大的数据集时实现更好的内存管理。
错误修复¶
修复了
DataFrame.to_pandas
中的错误:对含 null 值的IntergerType
列 Dataframe 求值时引发错误。
版本 1.12.0(2024 年 1 月 29 日)¶
1.12.0 版 Snowpark 库推出了一些新功能。
行为变更(兼容 API)¶
在
to_pandas
操作期间解析数据类型,我们依靠 GS 精度值修复大整型值的精度问题。这可能影响以下用户:之前以int8
返回的列现在以int64
返回。用户可以通过显式指定其返回列的精度值来解决此问题。在表存储过程的情况下,对齐了
Session.call
的行为,运行Session.call
不会触发存储过程,除非执行collect()
操作。StoredProcedureRegistration
现在会自动添加snowflake-snowpark-python
作为客户端本地版本库的包依赖项。如果服务器无法支持该版本,则会引发错误。
新功能¶
在
StoredProcedure.__call__
中公开了statement_params
。向
Session.add_import
添加了两个可选实参:chunk_size
:上传文件的每个块要哈希的字节数。whole_file_hash
:默认情况下,仅对已上传的导入的第一个块进行哈希处理以节省时间。当此实参设置为 True 时,每个上传的文件都将进行完全哈希处理。
在从 Snowpark Python 创建 UDAF 时,添加了
external_access_integrations
和secrets
,以便与外部访问集成。添加了新方法
Session.append_query_tag
,这允许将额外标签附加为逗号分隔的值,从而将其添加到当前查询标签。添加了新方法
Session.update_query_tag
,允许更新到 JSON 编码的字典查询标签。在检测到令牌过期时,
SessionBuilder.getOrCreate
现在将尝试替换返回的单例。在
snowflake.snowpark.functions
中添加了以下函数:array_except
create_map
sign
/signum
向
DataFrame.analytics
添加了以下函数:在
DataFrame.analytics
中添加了moving_agg
函数,以启用具有多个窗口大小的移动聚合,例如总和和平均值。在
DataFrame.analytics
中添加了cummulative_agg
函数,以启用具有多个窗口大小的移动聚合,例如总和和平均值。
错误修复¶
修复了
DataFrame.na.fill
中导致布尔值错误地覆盖整型值的错误。修复了
Session.create_dataframe
中的错误:使用 pandas DataFrames 创建的 Snowpark DataFrames 未正确推断时间戳列的类型。此行为如下所示:不含时区的早期时间戳列将转换为纳秒纪元,并推断为
LongType()
,但现在将正确保留为时间戳值,并推断为TimestampType(TimestampTimeZone.NTZ)
。含时区的早期时间戳列将推断为
TimestampType(TimestampTimeZone.NTZ)
和松散的时区信息,但现在正确推断为TimestampType(TimestampTimeZone.LTZ)
并且时区信息会正确保留。设置会话参数
PYTHON_SNOWPARK_USE_LOGICAL_TYPE_FOR_CREATE_DATAFRAME
,以恢复到旧行为。Snowflake 建议您更新代码以符合正确的行为,因为该参数将来将移除。
修复了以下错误:当小数位数不为 0 时,
DataFrame.to_pandas
获取小数类型,并在pandas
中创建对象 dtype。相反,我们将值转换为 float64 类型。修复了以下错误:当发生以下情况时,错误地展平生成的 SQL:
DataFrame.filter()
在DataFrame.sort().limit()
之后调用。DataFrame.sort()
或filter()
在已经具有窗口函数或依赖序列的数据生成器列的 DataFrame 上调用。例如df.select("a", seq1().alias("b")).select("a", "b").sort("a")
不再展平排序子句。在
DataFrame.limit()
之后使用窗口或依赖序列的数据生成器列例如,df.limit(10).select(row_number().over())
不会展平生成的 SQL 中的限制和选择。
修复了以下错误:当 DataFame 是从另一个具有别名列的 DataFrame 复制而来时,为 DataFrame 设置别名会引发错误。例如,
df = df.select(col("a").alias("b")) df = copy(df) df.select(col("b").alias("c")) # Threw an error. Now it's fixed.
修复了
Session.create_dataframe
中的错误:布尔类型不考虑架构中不可为 null 的字段。请注意,仅当用户具有创建临时表的权限时,此修复才有效。修复了 SQL 简化器中的错误:与
limit()
结合使用时,session.sql
中的非 select 语句删除了 SQL 查询。修复了以下错误:当会话参数
ERROR_ON_NONDETERMINISTIC_UPDATE
为 Ture 时引发异常。