2024 年 Snowpark Library for Python 版本说明¶
本文包含 Snowpark Library for Python 的版本说明,包括以下内容(如果适用):
行为变更
新功能
面向客户的错误修复
Snowflake 对 Snowpark Library for Python 更新使用语义版本控制。
有关文档,请参阅 Snowpark Python 开发者指南。
版本 1.25.0(2024 年 11 月 13 日)¶
新功能¶
在
snowflake.snowpark.dataframe
中添加了以下新函数:map
改进¶
如果分析器中未设置目标暂存区,则使用
Session.get_session_stage
中的默认暂存区,而不是引发SnowparkSQLException
。在调用
Session.stored_procedure_profiler.set_active_profiler
时允许小写或混合大小写输入。在
DataFrame
中为操作函数添加了使用开放式遥测 APIs 的分布式跟踪:cache_result
从日志记录中移除了 opentelemetry 警告。
错误修复¶
修复了在 select 中使用
In
表达式时操作前和操作后查询的传播问题。修复了在禁用
Session.stored_procedure_profiler
后调用Session.stored_procedure_profiler.get_output
时引发错误AttributeError
的漏洞。
依赖项更新¶
在运行时添加了
protobuf>=5.28
和tzlocal
的依赖项。为开发配置文件添加了
protoc-wheel-0
的依赖项。需要
snowflake-connector-python>=3.12.0, <4.0.0
(was>=3.10.0
)。
Snowpark pandas API 更新¶
新功能¶
添加了对
Index.to_numpy
的支持。为
axis=0
添加了对DataFrame.align
和Series.align
的支持。添加了对
snowflake.snowpark.functions.window
的支持添加了对 :code:`pd.read_pickle`(使用原生 Pandas 进行处理)的支持。
添加了对 :code:`pd.read_html`(使用原生 Pandas 进行处理)的支持。
添加了对 :code:`pd.read_xml`(使用原生 Pandas 进行处理)的支持。
在
GroupBy.aggregate
、DataFrame.aggregate
和Series.aggregate
中添加了对聚合函数"size"
和len
的支持。在
Series.str.len
中添加了对列表值的支持。
错误修复¶
修复了以下错误:使用单个可调用函数(例如
pd.DataFrame([0]).agg(np.mean)
)聚合单列数据帧时无法调换结果。修复了
DataFrame.dropna()
会执行以下操作的错误:将空白
subset`(例如 :code:`[]
)视为它指定了所有列,而不是没有列。为标量
subset
引发TypeError
,而不是仅对该列进行筛选。为类型
pandas.Index
的subset
引发ValueError
,而不是对索引中的列进行筛选。
在笔记本环境中使用动态透视表,创建限定范围的只读表以减少
TableNotFoundError
。修复了以下错误:当 axis = 1 时,concat 数据帧或 series 对象来自同一个数据帧。
改进¶
通过消除不必要的联接和临时表创建,使用标量 x 值改进
np.where
。使用联接展平透视,从而提高
get_dummies
性能。
Snowpark 本地测试更新¶
新功能¶
添加了以下支持:修补
snowflake.snowpark.functions
模块中不可用的函数。添加了对
snowflake.snowpark.functions.any_value
的支持
错误修复¶
修复了以下错误:
Table.update
无法处理VariantType
、MapType
和ArrayType
数据类型。修复了以下错误:在
DataFrame.join
中错误解析了列别名,导致从联接的 DataFrame 中选择列时出现错误。修复了以下错误:如果目标表的索引不是默认
RangeIndex
,则Table.update
和Table.merge
可能会失败。
版本 1.24.0(2024 年 10 月 28 日)¶
新功能¶
更新了
Session
类以保证线程安全。这允许在使用同一Session
对象时,进行并行 DataFrame 转换、DataFrame 操作、UDF 和存储过程注册,以及并行文件上传。该功能在默认情况下处于禁用状态,可通过将
FEATURE_THREAD_SAFE_PYTHON_SESSION
设置为True
,为账户启用该功能。在多线程使用会话时,更新会话配置(例如更改数据库或架构)可能会导致意外行为。
启用后,从
DataFrame.queries
API 返回的某些内部创建的临时表名不确定,并且在执行 DataFrame 操作时可能会有所不同。这不会影响用户创建的显式临时表。
在
session.lineage.trace
API 中添加了对“Service”域的支持。在
DataFrameWriter
中添加了对以下方法的支持,以支持菊花链:option
options
partition_by
添加了对
snowflake_cortex_summarize
的支持。
改进¶
改进了函数
snowflake.snowpark.functions.array_remove
的以下新功能,使其现在可以在 python 中使用。在 limit 之后执行 sort 时禁用 SQL 简化。
以前,
df.sort().limit()
和df.limit().sort()
生成了相同的查询,sort 优先于 limit。现在,df.limit().sort()
生成一个读取df.limit().sort()
的查询。为
df.limit().sort()
改进生成查询的性能,因为只要达到记录数量,limit 就会停止表扫描。
错误修复¶
修复了以下错误:临时表的自动清理可能会干扰异步查询执行的结果。
修复了
DataFrame.analytics.time_series_agg
函数中的错误,以在相同滑动间隔内处理多个数据点。修复了导致 iceberg 架构中结构化对象的字段名称大小写不一致的错误。
弃用¶
在 Python 3.8 中使用 snowpark-python 时,将触发已弃用的警告。有关更多详细信息,请参阅 Snowflake Python 运行时支持。
Snowpark pandas API 更新¶
新功能¶
添加了对
np.subtract
、np.multiply
、np.divide
和np.true_divide
的支持。添加了对跟踪
__array_ufunc__
的使用情况的支持。添加了对
np.float_power
、np.mod
、np.remainder
、np.greater
、np.greater_equal
、np.less
、np.less_equal
、np.not_equal
和np.equal
的 numpy 兼容性支持。添加了对
np.log
、np.log2
和np.log10
的 numpy 兼容性支持。添加了对
DataFrameGroupBy.bfill
、SeriesGroupBy.bfill
、DataFrameGroupBy.ffill
和SeriesGroupBy.ffill
的支持。在
Resampler
中添加了对on
参数的支持。在
value_counts()
中添加了对 timedelta 输入的支持。添加了对应用 Snowpark Python 函数
snowflake_cortex_summarize
的支持。添加了对
DataFrame.attrs
和Series.attrs
的支持。添加了对
DataFrame.style
的支持。添加了对
np.full_like
的 numpy 兼容性支持
改进¶
改进了行键为切片时为
head
和iloc
生成的 SQL 查询。改进了向
Series
、DataFrame
、Series.dt
和DatetimeIndex
中的tz_convert
和tz_localize
传入未知时区时的错误消息。为
Series
、DataFrame
、Series.dt
和DatetimeIndex
中的tz_convert
和tz_localize
改进了文档,以指定支持的时区格式。在使用 snowpark 函数时,添加了对
df.apply
和series.apply`(以及 :code:`map
和applymap
)的额外 kwargs 支持。在第一个实参不是 pandas 对象的情况下,这允许 apply 和函数之间具有某种与位置无关的兼容性。改进了行键为标量时为
iloc
和iat
生成的 SQL 查询。移除了
iterrows
中的所有联接。改进了
Series.map
的文档以反映不支持的功能。添加了对
np.may_share_memory
的支持,许多 scikit-learn 函数内部都在使用它。当使用 Snowpark pandas 对象调用时,此方法将始终返回 False。
错误修复¶
修复了以下错误:当输入包含 timedelta 列时,
DataFrame
和Series
pct_change()
会引发TypeError
。修复了以下错误:
replace()
有时会通过replace()
错误地传播Timedelta
类型。取而代之的是在Timedelta
上为replace()
引发NotImplementedError
。修复了以下错误:
DataFrame
和Series
round()
将为Timedelta
列引发AssertionError
。取而代之的是在NotImplementedError
上为round()
引发Timedelta
。修复了以下错误:当新索引是与原始索引没有重叠类型的 Series 时,
reindex
会失败。修复了以下错误:如果
as_index=False
,在对 DataFrameGroupBy 对象调用__getitem__
时总是返回 DataFrameGroupBy 对象。修复了以下错误:在现有列中插入 timedelta 值会静默地将值转换为整数,而不是引发
NotImplementedError
。修复了以下错误:axis=0 且 axis=1 的
DataFrame.shift()
无法传播 timedelta 类型。DataFrame.abs()
、DataFrame.__neg__()
DataFrame.stack()
和DataFrame.unstack()
现在为 timedelta 输入引发NotImplementedError
,而不是无法传播 timedelta 类型。
Snowpark 本地测试更新¶
错误修复¶
修复了以下错误:
DataFrame.alias
为输入列名称引发KeyError
。修复了以下错误:当数据包含空字符串时,Snowflake 暂存区上的
to_csv
失败。
版本 1.23.0(2024 年 10 月 9 日)¶
新功能¶
在
snowflake.snowpark.functions
中添加了以下新函数:make_interval
添加了以下支持:当按列排序为 TIMESTAMP 或 DATE 类型时,在
Window.range_between()
中使用 Snowflake 间隔时间常量。添加了对文件写入的支持。此功能目前处于非公开预览阶段。
在
QueryRecord
中添加了thread_id
,以跟踪用于提交查询历史记录的线程 ID。添加了对
Session.stored_procedure_profiler
的支持。
错误修复¶
修复了以下错误:尝试从函数读取默认值时,使用类型提示注册存储过程或 UDxF 会发出警告,即
NoneType
没有len()
。
Snowpark pandas API 更新¶
新功能¶
添加了对
TimedeltaIndex.mean
方法的支持。添加了对以下某些情况的支持:使用
agg
或aggregate
聚合axis=0
的Timedelta
列。为
pd.merge_asof
添加了对by
、left_by
、right_by
、left_index
和right_index
的支持。添加了以下支持:将参数
include_describe
传递到Session.query_history
。添加了对
DatetimeIndex.mean
和DatetimeIndex.std
方法的支持。添加了对
Resampler.asfreq
、Resampler.indices
、Resampler.nunique
和Resampler.quantile
的支持。在
closed = "left"
时添加了对resample
频率W
、ME
、YE
的支持。为
pairwise = False
和 intwindow
添加了对DataFrame.rolling.corr
和Series.rolling.corr
的支持。为
Rolling
添加了对基于时间的字符串window
和min_periods = None
的支持。添加了对
DataFrameGroupBy.fillna
和SeriesGroupBy.fillna
的支持。添加了以下支持:使用惰性
Index
对象作为data
、index
、和columns
实参来构造Series
和DataFrame
对象。添加了以下支持:使用
DataFrame
/Series
data
中不存在的index
和column
值构造Series
和DataFrame
对象。添加了对 :code:`pd.read_sas`(使用原生 Pandas 进行处理)的支持。
添加了以下支持:将
rolling().count()
和expanding().count()
应用到Timedelta
系列和列。在
pd.date_range
和pd.bdate_range
中添加了对tz
的支持。添加了对
Series.items
的支持。在
pd.to_datetime
中添加了对errors="ignore"
的支持。添加了对
DataFrame.tz_localize
和Series.tz_localize
的支持。添加了对
DataFrame.tz_convert
和Series.tz_convert
的支持。添加了以下支持:在
Series.map
、Series.apply
、DataFrame.apply
和DataFrame.applymap
中应用 Snowpark Python 函数(例如sin
)。
改进¶
改进了
to_pandas
,以保持 TIMESTAMP_TZ 类型的原始时区偏移。改进了 TIMESTAMP_TZ 类型的
dtype
结果,以显示正确的时区偏移。改进了 TIMESTAMP_LTZ 类型的
dtype
结果,以显示正确的时区。改进了将非布尔值传递给 groupby 聚合的
numeric_only
时的错误消息。移除了有关
sort_values
中排序算法的不必要警告。为内部创建临时表使用 SCOPED 对象。如果 SCOPED 对象在存储的 sproc 内创建,则在存储的 sproc 作用域内,否则将在会话作用域内,并且该对象将在作用域结束时自动清除。
改进了针对无意中导致物化速度缓慢的操作的警告消息。
移除了
Series.apply
中关于convert_dtype
的不必要警告消息。
错误修复¶
修复了以下错误:在原地更新已应用到原始
Series
/DataFrame
后,通过Series
/DataFrame
创建的Index
对象未正确更新Series
/DataFrame
的索引名称。阻止了在打印
Timedelta
列时有时会显示的无用SettingWithCopyWarning
。修复了源自其他
Series
对象的Series
对象的inplace
实参。修复了以下错误:如果系列名称与索引列名称重叠,
Series.sort_values
会失败。修复了以下错误:更换数据帧会将
Timedelta
索引级别映射到整数列级别。修复了以下错误:timedelta 列的
Resampler
方法会生成整数结果。修复了以下错误:
pd.to_numeric()
将Timedelta
输入保留为Timedelta
,而不是将其转换为整数。修复了使用系列值设置
loc
的单行或多行时的 DataFrame 设置。
版本 1.22.1(2024 年 9 月 11 日)¶
这是 1.22.0 的重新发布版本。有关详细的版本内容,请参阅 1.22.0 版本说明。
版本 1.22.0(2024 年 9 月 10 日)¶
新功能¶
在
snowflake.snowpark.functions
中添加了以下新函数:array_remove
ln
改进¶
改进了
Session.write_pandas
的文档,使use_logical_type
选项更加明确。支持将以下内容指定为
DataFrameWriter.save_as_table
:enable_schema_evolution
data_retention_time
max_data_extension_time
change_tracking
copy_grants
iceberg_config
– 可以保存以下 Iceberg 配置选项的字典:external_volume
catalog
base_location
catalog_sync
storage_serialization_policy
支持将以下内容指定为
DataFrameWriter.copy_into_table
:iceberg_config
– 可以保存以下 Iceberg 配置选项的字典:external_volume
catalog
base_location
catalog_sync
storage_serialization_policy
支持将以下参数指定为
DataFrame.create_or_replace_dynamic_table
:mode
refresh_mode
initialize
clustering_keys
is_transient
data_retention_time
max_data_extension_time
错误修复¶
修复了
session.read.csv
中的以下错误:以外部定义的文件格式设置PARSE_HEADER = True
时,它会导致错误。修复了以下错误:通过设定的操作生成查询时允许在子级有共同子查询时生成重复查询。
修复了
session.get_session_stage
中的以下错误:在切换数据库或架构后引用不存在的暂存区。修复了以下错误:在没有显式初始化 Snowpark pandas 插件的情况下调用
DataFrame.to_snowpark_pandas
会导致错误。修复了以下错误:在动态表创建中使用
explode
函数时,由于outer
参数的布尔类型转换不当而导致 SQL 编译错误。
Snowpark 本地测试更新¶
新功能¶
在将列作为输入传递给 UDF 调用时,添加了对类型强制的支持。
添加了对
Index.identical
的支持。
错误修复¶
修复了以下错误:
DataFrameWriter.save_as_table
中的截断模式未正确处理仅包含现有表中一部分列的 DataFrames。修复了以下错误:函数
to_timestamp
未设置列数据类型的默认时区。
Snowpark pandas API 更新¶
新功能¶
添加了对
Timedelta
类型的有限支持,包括以下功能。Snowpark pandas 将为不支持的NotImplementedError
引发Timedelta
。支持通过
copy
、cache_result
、shift
、sort_index
、assign
、bfill
、ffill
、fillna
、compare
、diff
、drop
、dropna
、duplicated
、empty
、equals
、insert
、isin
、isna
、items
、iterrows
、join
、len
、mask
、melt
、merge
、nlargest
、nsmallest
、to_pandas
跟踪Timedelta
类型。支持通过
astype
将非 timedelta 转换为 timedelta。将为不支持
Timedelta
的其他方法引发NotImplementedError
。支持减去两个时间戳以得到
Timedelta
。支持使用
Timedelta
数据列编制索引。支持添加或减去时间戳和
Timedelta
。支持两个
Timedelta
值之间的二进制算术。支持二进制算术以及
Timedelta
值与数值之间的比较。支持惰性
TimedeltaIndex
。支持
pd.to_timedelta
。支持
GroupBy
聚合min
、max
、mean
、idxmax
、idxmin
、std
、sum
、median
、count
、any
、all
、size
、nunique
、head
、tail
、aggregate
。支持
GroupBy
筛选first
和last
。支持
TimedeltaIndex
属性:days
、seconds
、microseconds
和nanoseconds
。支持
diff
,带有axis=0
和axis=1
的时间戳列。支持
TimedeltaIndex
方法:ceil
、floor
和round
。支持
TimedeltaIndex.total_seconds
方法。
添加了对索引算术和比较运算符的支持。
添加了对
Series.dt.round
的支持。添加了
DatetimeIndex
的文档页面。添加了对
Index.name
、Index.names
、Index.rename
和Index.set_names
的支持。添加了对
Index.__repr__
的支持。添加了对
DatetimeIndex.month_name
和DatetimeIndex.day_name
的支持。添加了对
Series.dt.weekday
、Series.dt.time
和DatetimeIndex.time
的支持。添加了对
Index.min
和Index.max
的支持。添加了对
pd.merge_asof
的支持。添加了对
Series.dt.normalize
和DatetimeIndex.normalize
的支持。添加了对
Index.is_boolean
、Index.is_integer
、Index.is_floating
、Index.is_numeric
和Index.is_object
的支持。添加了对
DatetimeIndex.round
、DatetimeIndex.floor
和DatetimeIndex.ceil
的支持。添加了对
Series.dt.days_in_month
和Series.dt.daysinmonth
的支持。添加了对
DataFrameGroupBy.value_counts
和SeriesGroupBy.value_counts
的支持。添加了对
Series.is_monotonic_increasing
和Series.is_monotonic_decreasing
的支持。添加了对
Index.is_monotonic_increasing
和Index.is_monotonic_decreasing
的支持。添加了对
pd.crosstab
的支持。添加了对
pd.bdate_range
的支持,包含了对pd.date_range
和pd.bdate_range
的业务频率支持 (B、BME、BMS、BQE、BQS、BYE、BYS)。添加了对惰性
Index
对象的支持,作为DataFrame.reindex
和Series.reindex
中的labels
。添加了对
Series.dt.days
、Series.dt.seconds
、Series.dt.microseconds
和Series.dt.nanoseconds
的支持。添加了以下支持:根据数字或字符串类型的
Index
创建DatetimeIndex
。添加了以下支持:使用
Timedelta
对象编制字符串索引。添加了对
Series.dt.total_seconds
方法的支持。
改进¶
通过避免不必要的联接,改进了对来自同一 DataFrame 的系列执行操作时的合并和联接性能。
重构了
quoted_identifier_to_snowflake_type
,以避免在类型已在本地缓存时进行元数据查询。改进了
pd.to_datetime
,以处理所有本地输入案例。通过另一个惰性索引创建惰性索引,无需将数据提取到客户端。
为索引按位运算符引发了
NotImplementedError
。当
Index.names
设置为非列表类对象时,显示更清晰的错误消息。每当在本地提取
MultiIndex
值时,都会引发警告。改进了
pd.read_snowflake
的警告消息,以包括触发临时表创建时的创建原因。通过避免需要紧急评估的检查,改进了
DataFrame.set_index
的性能,或者设置DataFrame.index
或Series.index
。因此,当新索引与当前Series
或DataFrame
对象长度不匹配时,不再引发ValueError
。取而代之的是,当Series
或DataFrame
对象长于提供的索引时,Series
或DataFrame
的新索引将使用“extra”元素的NaN
值填充。否则,忽略在提供的索引中的 extra 值。
错误修复¶
停止忽略
pd.Timedelta
标量中的纳秒。修复了二进制运算树中的
AssertionError
。修复了使用命名 Series 时
Series.dt.isocalendar
中的错误修复了源自 DataFrame 列的 Series 对象的
inplace
实参。修复了以下错误:
Series.reindex
和DataFrame.reindex
未正确更新结果索引的名称。修复了以下错误:指定
axis=1
时,Series.take
未给出错误。
版本 1.21.1(2024 年 9 月 5 日)¶
错误修复¶
修复了以下错误:由于未合理等待异步查询完成,为异步作业使用
to_pandas_batches
时导致错误。
版本 1.21.0(2024 年 8 月 19 日)¶
新功能¶
增加了对
snowflake.snowpark.testing.assert_dataframe_equal
的支持,这是一个实用程序函数,用于检查两个 Snowpark DataFrames 是否相等。
改进¶
添加了对服务器端字符串大小限制的支持。
添加了以下支持:使用可选实参创建和调用存储过程、UDFs 和 UDTFs。
在
DataFrame.lineage.trace
API 中添加了对列沿袭的支持。添加了以下支持:通过
INFER_SCHEMA_OPTIONS
将INFER_SCHEMA
选项传递到DataFrameReader
。添加了以下支持:将
parameters
参数传递到Column.rlike
和Column.regexp
。添加了以下支持:在不再引用(即垃圾回收)DataFrame 时,自动清理当前会话中
df.cache_result()
创建的临时表。它仍然是一项实验性功能,默认情况下未启用。可以将session.auto_clean_up_temp_table_enabled
设置为True
,以启用该功能。为
snowflake.snowpark.functions.to_date
的fmt
参数添加了对字符串字面量的支持。
错误修复¶
修复了以下错误:为选择
*
列而生成的 SQL 有不正确的子查询。修复了
DataFrame.to_pandas_batches
中的以下错误:如果因隔离级别错误而对 pandas DataFrame 进行特定转换,迭代器可能会引发错误。修复了
DataFrame.lineage.trace
中的错误,以正确拆分引用的功能视图的名称和版本。修复了
Column.isin
中在传递空列表时导致 SQL 生成无效的错误。修复了以下错误:在使用列表类项目设置单元格时无法引发
NotImplementedError
。
Snowpark 本地测试更新¶
新功能¶
添加了对以下 APIs 的支持:
snowflake.snowpark.functions
rank
dense_rank
percent_rank
cume_dist
ntile
datediff
array_agg
snowflake.snowpark.column.Column.within_group
添加了以下支持:解析模拟计划的正则表达式语句中的标志。这与上述
rlike
和regexp
变更保持一致。
错误修复¶
修复了以下错误:窗口函数
LEAD
和LAG
没有合理处理选项ignore_nulls
。修复了以下错误:在插入表格合并操作期间,未将值填充到结果 DataFrame。
改进¶
修复了关于整数索引的 pandas
FutureWarning
。
Snowpark pandas API 更新¶
新功能¶
添加了对
DataFrame.backfill
、DataFrame.bfill
、Series.backfill
和Series.bfill
的支持。添加了对采用默认参数的
DataFrame.compare
和Series.compare
的支持。添加了对
Series.dt.microsecond
和Series.dt.nanosecond
的支持。添加了对
Index.is_unique
和Index.has_duplicates
的支持。添加了对
Index.equals
的支持。添加了对
Index.value_counts
的支持。添加了对
Series.dt.day_name
和Series.dt.month_name
的支持。添加了对 Index 索引的支持,例如
df.index[:10]
。添加了对
DataFrame.unstack
和Series.unstack
的支持。添加了对
DataFrame.asfreq
和Series.asfreq
的支持。添加了对
Series.dt.is_month_start
和Series.dt.is_month_end
的支持。添加了对
Index.all
和Index.any
的支持。添加了对
Series.dt.is_year_start
和Series.dt.is_year_end
的支持。添加了对
Series.dt.is_quarter_start
和Series.dt.is_quarter_end
的支持。添加了对懒惰
DatetimeIndex
的支持。添加了对
Series.argmax
和Series.argmin
的支持。添加了对
Series.dt.is_leap_year
的支持。添加了对
DataFrame.items
的支持。添加了对
Series.dt.floor
和Series.dt.ceil
的支持。添加了对
Index.reindex
的支持。添加了对
DatetimeIndex
属性的支持:year
、month
、day
、hour
、minute
、second
、microsecond
、nanosecond
、date
、dayofyear
、day_of_year
、dayofweek
、day_of_week
、weekday
、quarter
、is_month_start
、is_month_end
、is_quarter_start
、is_quarter_end
、is_year_start
、is_year_end
和is_leap_year
。添加了对
Resampler.fillna
和Resampler.bfill
的支持。添加了对
Timedelta
类型的有限支持,包括创建Timedelta
列和to_pandas
。添加了对
Index.argmax
和Index.argmin
的支持。
改进¶
移除了导入 Snowpark pandas 时的公共预览警告消息。
移除了
SnowflakeQueryCompiler.is_series_like
方法中不必要的计数查询。Dataframe.columns
现在返回原生 pandas Index 对象,而不是 Snowpark Index 对象。在
Index
构造函数中重构并引入query_compiler
实参,以从查询编译器创建Index
。pd.to_datetime
现在返回DatetimeIndex
对象,而不是Series
对象。pd.date_range
现在返回DatetimeIndex
对象,而不是Series
对象。
错误修复¶
将不支持的聚合函数传递给
pivot_table
会引发NotImplementedError
,而不是KeyError
。从有关不支持的聚合的错误消息和遥测中移除了轴标签和可调用名称。
修复了在
sort_values
之后调用时Series.drop_duplicates
和DataFrame.drop_duplicates
中的AssertionError
。修复了
Index.to_frame
中的错误:未指定名称时结果框架的列名可能错误。修复了某些 Index 文档字符串被忽略的错误。
修复了
Series.reset_index(drop=True)
中的错误:结果名称可能错误。修复了
Groupby.first/last
中的错误:在底层窗口表达式中按正确列进行排序。
版本 1.20.0(2024 年 7 月 17 日)¶
1.20.0 版 Snowpark Library for Python 引入了一些新功能。
新功能¶
在
DataFrame
中为表存储过程函数添加了使用开放遥测 APIs 的分布式跟踪。_execute_and_get_query_id
添加了对
arrays_zip
函数的支持。通过避免对数值进行不必要的转换,提高了二进制列表达式和
df._in
的性能。您可以通过设置session.eliminate_numeric_sql_value_cast_enabled = True
来启用此优化。当目标表不存在以及
auto_create_table=False
时,改进了write_pandas
的错误消息。在 Snowpark 中添加了对 UDxF 函数的开放式遥测跟踪。
在 Snowpark 中添加了对存储过程注册的开放式遥测跟踪。
将名为
format_json
的新可选参数添加到Session.SessionBuilder.app_name
函数,该函数以 JSON 格式在Session.query_tag
中设置应用程序名称。默认情况下,此参数设置为False
。
错误修复¶
修复了以下错误:为
lag(x, 0)
生成的 SQL 不正确且失败,显示错误消息argument 1 to function LAG needs to be constant, found 'SYSTEM$NULL_TO_FIXED(null)'
。
Snowpark 本地测试更新¶
新功能¶
添加了对以下 APIs 的支持:
snowflake.snowpark.functions
random
注册模拟函数时向
patch
函数添加了新参数:distinct
允许在 SQL 函数应不同时指定备用函数。pass_column_index
将命名参数column_index
传递到模拟函数,该函数包含用于输入数据的pandas.Index
。pass_row_index
将命名参数row_index
传递给模拟函数,这是该函数当前运行的以 0 为索引的行号。pass_input_data
将命名参数input_data
传递给模拟函数,该函数包含当前表达式的整个输入数据帧。添加了对
DataFrameWriter.save_as_table
方法中column_order
参数的支持。
错误修复¶
修复了以下错误:在
BinaryExpressions
中使用时,DecimalType
列错误截断为整数精度。
Snowpark pandas API 更新¶
新功能¶
增加了对以下内容的新 API 支持:
DataFrames
DataFrame.nlargest
和DataFrame.nsmallest
DataFrame.assign
DataFrame.stack
DataFrame.pivot
DataFrame.to_csv
DataFrame.corr
DataFrame.corr
DataFrame.equals
DataFrame.reindex
DataFrame.at
和DataFrame.iat
Series
Series.nlargest
和Series.nsmallest
Series.at
和Series.iat
Series.dt.isocalendar
Series.equals
Series.reindex
Series.to_csv
Series.case_when
,除非条件或替换可调用series.plot()
,数据物化到本地客户端
GroupBy
DataFrameGroupBy.all
和DataFrameGroupBy.any
DataFrameGroupBy
和SeriesGroupBy
聚合first
和last
DataFrameGroupBy.get_group
SeriesGroupBy.all
和SeriesGroupBy.any
通用
pd.pivot
:code:`read_excel`(使用本地 pandas 进行处理)
df.plot()
,数据物化到本地客户端
扩展了现有 APIs,如下所示:
在
DataFrame.sample
和Series.sample
中添加了对replace
和frac > 1
的支持。添加了对
Series.str.translate
的部分支持,其中table
的值为单代码点字符串。在
fillna
中使用method
参数时,添加了对limit
参数的支持。
为
Index
及其 APIs 添加了文档页面。
错误修复¶
修复了标量
other
为字面量 0 时使用 np.where 和 df.where 时出现的问题。修复了在使用
dtype=np.uint64
转换为 Snowpark pandasDataFrame
或Series
时关于精度损失的错误。修复了以下错误:当
index
和columns
在pivot_table
期间包含 DataFrame 中所有列时,values
设置为index
。
改进¶
添加了对
Index.copy()
的支持。添加了对 Index APIs 的支持:
dtype
、values
item()
、tolist()
、to_series()
和to_frame()
。扩展对 DataFrames 的支持,
pd.pivot_table
和DataFrame.pivot_table
中不包含行。在
DataFrame.sort_index
和Series.sort_index
中添加了对inplace
参数的支持。
版本 1.19.0(2024 年 6 月 25 日)¶
1.19.0 版 Snowpark Library for Python 引入了一些新功能。
新功能¶
添加了对
to_boolean
函数的支持。为
Index
及其 APIs 添加了文档页面。
错误修复¶
修复了以下错误:在任务中运行时,具有表返回类型的 Python 存储过程会失败。
修复了以下错误:当 DataFrame 有 500 多列时,
df.dropna
因RecursionError: maximum recursion depth exceeded
而失败。修复了以下错误:
AsyncJob.result("no_result")
没有等待查询完成执行。
本地测试更新¶
新功能¶
在注册 UDFs 和存储过程时,添加了对
strict
参数的支持。
错误修复¶
修复了
convert_timezone
中的错误:设置source_timezone
参数会返回错误。修复了以下错误:使用
DateType
类型的空数据创建 DataFrame 会引发AttributeError
。修复了以下错误:存在更新子句但未进行更新时表合并会失败。
修复了
to_char
模拟实施的错误,该错误会在传入列具有非连续行索引时引发IndexError
。修复了在处理
CaseExpr
表达式时的错误,该错误会在传入列具有非连续行索引时引发IndexError
。修复了
Column.like
实施中的错误,该错误会在传入列具有非连续行索引时引发IndexError
。
改进¶
在
DataFrame.replace
、DataFrame.dropna
和模拟函数iff
的实施中添加了对类型强制的支持。
Snowpark pandas API 更新¶
新功能¶
添加了对
DataFrame.pct_change
和Series.pct_change
的支持,不包含freq
和limit
参数。添加了对
Series.str.get
的支持。添加了对
Series.dt.dayofweek
、Series.dt.day_of_week
、Series.dt.dayofyear
和Series.dt.day_of_year
的支持。添加了对
Series.str.__getitem__ (Series.str[...])
的支持。添加了对
Series.str.lstrip
和Series.str.rstrip
的支持。添加了对
DataFrameGroupby.size
和SeriesGroupby.size
的支持。为
axis=0
的聚合count
、sum
、min
、max
、mean
、std
和var
添加了对DataFrame.expanding
和Series.expanding
的支持。为
axis=0
的聚合计数添加了对DataFrame.rolling
和Series.rolling
的支持。添加了对
Series.str.match
的支持。为聚合大小添加了对
DataFrame.resample
和Series.resample
的支持。
错误修复¶
修复了会导致
GroupBy.aggregate
列的输出不正确排序的错误。修复了以下错误:对具有区分
dtypes
的重复列的帧调用DataFrame.describe
可能会导致错误或错误结果。修复了
DataFrame.rolling
和Series.rolling
中的错误,因此window=0
现在抛出NotImplementedError
,而不是ValueError
改进¶
添加了对具有
axis=0
的DataFrame.aggregate
和Series.aggregate
中的命名聚合的支持。pd.read_csv
使用原生 pandas CSV 解析器读取数据,然后使用 parquet 将数据上传到 Snowflake。这样会启用read_csv
支持的大多数参数,包括日期解析和数字转换。通过 parquet 上传的速度大约是通过 CSV 上传的两倍。最初的工作是直接在 Snowpark pandas 中支持
pd.Index
。正在积极开发对作为 Snowpark pandas 的一流组件的pd.Index
的支持。添加了惰性索引构造函数并支持
len
、shape
、size
、empty
、to_pandas()
和names
。对于df.index
,Snowpark pandas 会创建惰性索引对象。对于
df.columns
,Snowpark pandas 支持非惰性版本的Index
,因为数据已在本地存储。
版本 1.18.0(2024 年 5 月 28 日)¶
1.18.0 版 Snowpark 库推出了一些新功能。
新功能¶
添加了
DataFrame.cache_result
和Series.cache_result
方法,以便用户在会话期间将DataFrame
和Series
对象保存到临时表,从而缩短后续操作的延迟。
改进¶
添加了对
DataFrame.pivot_table
的支持,不包含index
参数,包含margins
参数。更新了
DataFrame.shift
、Series.shift
、DataFrameGroupBy.shift
和SeriesGroupBy.shift
的签名,以匹配 pandas 2.2.1。Snowpark pandas 尚不支持新添加的后缀实参或周期序列值。重新添加了对
Series.str.split
的支持。
错误修复¶
修复了字符串方法 (
Series.str.*
) 的混合列问题。
本地测试更新¶
新功能¶
为文件格式 CSV 和 JSON 添加了对以下
DataFrameReader
读取选项的支持:PURGE
PATTERN
值为
False
的 INFER_SCHEMA值为
UTF8
的 ENCODING
添加了对
DataFrame.analytics.moving_agg
和DataFrame.analytics.cumulative_agg_agg
的支持。在 UDF 和存储过程注册期间添加了对
if_not_exists
参数的支持。
错误修复¶
修复了处理时间格式时无法正确处理小数第二部分的错误。
修复了导致对
*
的函数调用失败的错误。修复了阻止创建
map
和struct
类型对象的错误。修复了以下错误:函数
date_add
无法处理某些数字类型。修复了以下错误:
TimestampType
类型转换导致数据不正确。修复了在某些情况下导致
DecimalType
数据精度不正确的错误。修复了以下错误:引用缺失的表或视图会引发
IndexError
。修复了以下错误:模拟函数
to_timestamp_ntz
无法处理None
数据。修复了以下错误:模拟 UDFs 无法正确处理
None
的输出数据。修复了以下错误:联接操作后
DataFrame.with_column_renamed
忽略了来自父DataFrames
的属性。修复了以下错误:在转换为 pandas
DataFrame
时,大型值的整数精度丢失。修复了以下错误:在从 pandas
DataFrame
创建DataFrame
时,datetime
对象的架构错误。修复了
Column.equal_nan
实施中的错误:空数据未正确处理。修复了以下错误:联接操作后
DataFrame.drop
忽略了来自父DataFrames
的属性。修复了模拟函数
date_part
中的错误:列类型设置不正确。修复了以下错误:在将空数据插入不可为空的列时,
DataFrameWriter.save_as_table
未引发异常。修复了
DataFrameWriter.save_as_table
实施中的错误:当传入数据的架构与现有表不同时,追加或截断失败。
当传入的数据未指定可为空的列时,截断失败。
改进¶
移除了
pyarrow
的依赖项检查,因为它未使用。改进了
Column.cast
的目标类型覆盖范围,添加了对转换为布尔和所有整数类型的支持。调整了调用 UDFs 和存储过程时的错误体验。
为 UDFs 和存储过程注册中的
is_permanent
和anonymous
选项添加了相应的错误消息,以更清楚地表明尚不支持这些功能。现在,使用不支持的选项和值的文件读取操作会引发
NotImplementedError
,而不是警告和不明确的错误信息。
版本 1.17.0(2024 年 5 月 21 日)¶
1.17.0 版 Snowpark 库推出了一些新功能。
新功能¶
支持使用下面列出的函数为表和视图添加注释:
DataFrameWriter.save_as_table
DataFrame.create_or_replace_view
DataFrame.create_or_replace_temp_view
DataFrame.create_or_replace_dynamic_table
改进¶
改进了错误消息,提醒用户在读取 CSV 文件时设置
{"infer_schema": True}
,而不指定其架构。
本地测试更新¶
新功能¶
在模拟函数
to_timestamp_ltz
、to_timestamp_ntz
、to_timestamp_tz
和to_timestamp
中添加了对NumericType
和VariantType
的支持。在模拟函数
to_char
中添加了对DecimalType
、BinaryType
、ArrayType
、MapType
、TimestampType
、DateType
和TimeType
的支持。添加了对以下 APIs 的支持:
snowflake.snowpark.functions.to_varchar
snowflake.snowpark.DataFrame.pivot
snowflake.snowpark.Session.cancel_all
引入了新的异常类
snowflake.snowpark.mock.exceptions.SnowparkLocalTestingException
。添加了对转换为
FloatType
的支持。
错误修复¶
修复了以下错误:在清理步骤中存储过程和 UDFs 不应移除
sys.path
中已有的导入。修复了以下错误:在处理
datetime
格式时,小数第二部分无法正确处理。修复了以下错误:Windows 平台上的文件操作无法正确处理目录名中的文件分隔符。
修复了以下错误:在 Windows 平台上读取 pandas 数据帧时,无法处理包含整型数据的
IntervalType
列。修复了导致用户无法选择具有相同别名的多个列的错误。
修复了以下错误:标识符加引号时,
Session.get_current_[schema|database|role|user|account|warehouse]
返回大写标识符。修复了以下错误:
substr
和substring
无法处理从零开始的start_expr
。
改进¶
通过在错误案例中引发
SnowparkLocalTestingException
实现了标准化错误体验,这与在非本地执行中引发的SnowparkSQLException
相当。改进了
Session.write_pandas
方法的错误体验,因此在调用时会引发NotImplementError
。调整了错误体验,在非本地执行中重用封闭会话。
版本 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 中的 limit 和 select。
修复了以下错误:当 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 时引发异常。