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 中添加了对 StringTypeTimestampTypeVariantType 的支持。

  • 添加了对以下 APIs 的支持:

    • snowflake.snowpark.functions

      • get

      • concat

      • concat_ws

错误修复

  • 修复了导致 NaTNaN 无法识别的错误。

  • 修复了以下错误:在推断架构时,单引号被添加到已有单引号的暂存区文件。

  • 修复了以下错误:DataFrameReader.csv 无法处理包含分隔符的引号值。

  • 修复了以下错误:当算数计算中存在 None 值,输出应保持 None,而不是 math.nan

  • 修复了函数 sumcovar_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

  • DataFrameDataFrameWriter 中为动作函数添加了使用开放遥测 APIs 的分布式跟踪。

    • snowflake.snowpark.DataFrame

      • collect

      • collect_nowait

      • to_pandas

      • count

      • show

    • snowflake.snowpark.DataFrameWriter

      • save_as_table

  • snowflake.snowpark.Session.file.getsnowflake.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 中添加了对 StringTypeTimestampTypeVariantType 的支持。

错误修复

  • 修复了以下问题:常量函数的列填充空值。

  • 修复了 to_objectto_arrayto_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 错误地解析数据。

    • patternColumn 时,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_integrationssecrets,以便与外部访问集成。

  • 添加了新方法 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.
    
    Copy
  • 修复了 Session.create_dataframe 中的错误:布尔类型不考虑架构中不可为 null 的字段。请注意,仅当用户具有创建临时表的权限时,此修复才有效。

  • 修复了 SQL 简化器中的错误:与 limit() 结合使用时,session.sql 中的非 select 语句删除了 SQL 查询。

  • 修复了以下错误:当会话参数 ERROR_ON_NONDETERMINISTIC_UPDATE 为 Ture 时引发异常。

语言: 中文