Python用Snowparkライブラリの2022年リリースノート¶
この記事には、 Snowpark Library for Python のリリースノートが含まれています。また、該当する場合は以下が含まれます。
動作の変更
新機能
顧客向けバグ修正
Snowflake は、 Snowpark Library for Python の更新にセマンティックバージョニングを使用します。
ドキュメントについては、 Python用Snowpark開発者ガイド をご参照ください。
バージョン1.0.0(2022-11-01)¶
新機能¶
GENERATOR テーブル関数を使用して新しい DataFrame を作成するために、
Session.generator()を追加しました。セキュア UDF または UDTF を作成する関数に SECURE パラメーターを追加しました。
バージョン0.12.0(2022-10-14)¶
新機能¶
非同期ジョブ用に新しい APIs を追加しました。
Session.create_async_job()でクエリIDからAsyncJobインスタンスを作成します。AsyncJob.result()は、引数result_typeを受け入れて、さまざまな形式で結果を返すようになりました。AsyncJob.to_df()は、この非同期ジョブの結果から構築されたDataFrameを返します。AsyncJob.query()は、実行されたクエリの SQL テキストを返します。
DataFrame.agg()およびRelationalGroupedDataFrame.agg()は、可変長の引数を受け入れるようになりました。パラメーター
lsuffixおよびrsuffixをDataFrame.join()およびDataFrame.cross_join()に追加して、重複する列の名前を簡単に変更できるようにしました。DataFrame.cache_result()を呼び出した後に仮テーブルを削除できるように、Table.drop_table()を追加しました。Tableはコンテキストマネージャーでもあるため、ステートメントと合わせて使用してキャッシュの仮テーブルを使用後にドロップできます。Session.use_secondary_roles()を追加しました。関数
first_value()とlast_value()を追加しました。(@chasleslrによる寄稿)DataFrame.join()に、using_columnsのエイリアスとしてonを、join_typeのエイリアスとしてhowを追加しました。
バグ修正¶
スキーマ名に特殊文字が含まれている場合にエラーが発生する
Session.create_dataframe()のバグを修正しました。Session.read.option()に設定されたオプションがデフォルト値としてDataFrame.copy_into_table()に渡されないバグを修正しました。コピーオプションの値に一重引用符が含まれている場合に
DataFrame.copy_into_table()でエラーが発生するバグを修正しました。
バージョン0.11.0(2022-09-28)¶
動作の変更¶
Session.add_packages()Snowflake Anacondaチャンネルでパッケージのバージョンが見つからない場合に、ValueErrorが発生するようになりました。以前は、Session.add_packages()に成功し、 UDF またはストアドプロシージャの登録ステップの後でSnowparkSQLException例外が発生しました。
新機能¶
ステージファイルをストリームとしてダウンロードするためのサポートとしてメソッド
FileOperation.get_stream()を追加しました。int引数を受け入れるためのサポートを
functions.ntiles()に追加しました。次のエイリアスを追加しました。
functions.call_builtin()のfunctions.call_function()。functions.builtin()のfunctions.function()。DataFrame.sort()のDataFrame.order_by()。DataFrame.sort()のDataFrame.orderBy()。
DataFrame クラスではなく、より正確な
Tableクラスを返すようにDataFrame.cache_result()を改善しました。StoredProcedureを呼び出すときに、sessionを最初の引数として許可するサポートを追加しました。
改善¶
該当する場合にクエリをフラット化することで、ネストされたクエリの生成を改善しました。この改善は、
Session.sql_simplifier_enabled = Trueを設定すると有効にできます。DataFrame.select()、DataFrame.with_column()、DataFrame.drop()、およびその他の選択に関連した APIs の SQL はさらにフラット化されるようになりました。DataFrame.union()、DataFrame.union_all()、DataFrame.except_()、DataFrame.intersect()、およびDataFrame.union_by_name()は、複数の集合演算子がチェーンされているときに生成される SQL をフラット化しました。非同期ジョブ APIs の型注釈を改善しました。
バグ修正¶
Table.update()、Table.delete()、およびTable.merge()が存在しない仮テーブルを参照しようとするバグを修正しました。
バージョン0.10.0(2022-09-16)¶
新機能¶
非同期クエリでSnowparkデータフレームを評価するための実験的な APIs を追加しました。
Snowparkデータフレーム(クエリを実行する)の次のアクション APIs にキーワード引数ブロックを追加して、非同期評価を可能にしました。
DataFrame.collect()、DataFrame.to_local_iterator()、DataFrame.to_pandas()、DataFrame.to_pandas_batches()、DataFrame.count()、DataFrame.first()、DataFrameWriter.save_as_table()、DataFrameWriter.copy_into_location()、Table.delete()、Table.update()、およびTable.merge()。
非同期評価を可能にするメソッド
DataFrame.collect_nowait()を追加しました。非同期で実行されたクエリから結果を取得し、そのステータスを確認するクラス
AsyncJobを追加しました。
Session.write_pandas()でのtable_typeのサポートを追加しました。table_typeオプションから、temporary、temp、およびtransientが選択できるようになりました。SnowparkでPython構造化データ(
list、tuple、およびdict)をリテラル値として使用するためのサポートを追加しました。functions.sproc()とsession.sproc.register()にキーワード引数execute_asを追加して、ストアドプロシージャを呼び出し元または所有者として登録できるようにしました。Snowflakeのステージからファイルを読み取るときに、事前構成されたファイル形式を指定するためのサポートを追加しました。
改善¶
Snowparkセッションの詳細を表示するためのサポートを追加しました。
バグ修正¶
テーブル名が完全修飾されていて、テーブルが既存の場合に、
DataFrame.copy_into_table()とDataFrameWriter.save_as_table()が誤って新しいテーブルを作成するバグを修正しました。
非推奨¶
Session.write_pandas()にあるキーワード引数create_temp_tableを廃止しました。Pythonリストまたはタプルにラップされた引数を使用した UDFs の呼び出しを廃止しました。リストまたはタプルなしで可変長引数を使用できます。
依存関係の更新¶
snowflake-connector-pythonを2.7.12に更新しました。
バージョン0.9.0(2022-08-30)¶
新機能¶
UDFs の登録時に、生成されたスクリプトでソースコードをコメントとして表示するためのサポートを追加しました。この機能はデフォルトでオンになっています。オフにするには、
register()または@udf()を呼び出すときに、新しいキーワード引数source_code_displayをFalseとして渡します。DataFrame.select()、DataFrame.with_column()、およびDataFrame.with_columns()からテーブル関数を呼び出すためのサポートを追加しました。これらは、列の型table_function.TableFunctionCallのパラメーターを受け取るようになりました。キーワード引数
overwriteをsession.write_pandas()に追加して、Snowflakeテーブルの内容をPandas DataFrame のコンテンツで上書きできるようにしました。キーワード引数
column_orderをdf.write.save_as_table()に追加して、追加モードでテーブルにデータを挿入する際の一致規則を指定します。ファイルストリーム経由でローカルファイルをステージにアップロードするメソッド
FileOperation.put_stream()を追加しました。テーブル関数結合の出力から得られる列の名前のエイリアスを許可するメソッド
TableFunctionCall.alias()およびTableFunctionCall.as_()を追加しました。現在アクティブなSnowparkセッションを取得するために、関数
get_active_session()をモジュールsnowflake.snowpark.contextに追加しました。
改善¶
入力 max_ および min_ の型を推測し、制限をそれぞれ IntegerType または FloatType にキャストするために、関数 function.uniform() を改善しました。
バグ修正¶
statement_paramsが関数に渡されない場合に、バッチ挿入でエラーが発生しないバグを修正しました。session.create_dataframe()がdictsと特定のスキーマで呼び出されたときに、列名を引用符で囲む必要があるバグを修正しました。テーブルがすでに存在し、
df.write.save_as_table()の呼び出し時に追加モードになっている場合に、テーブルの作成をスキップする必要があるバグを修正しました。UDFs の登録時に、アンダースコアのあるサードパーティパッケージを追加できないバグを修正しました。
バージョン0.8.0(2022-07-22)¶
新機能¶
次のメソッドにキーワードのみの引数
statement_paramsを追加して、ステートメントレベルのパラメーターを指定できるようにしました。クラス
snowflake.snowpark.Dataframeにおける、collect、to_local_iterator、to_pandas、to_pandas_batches、count、copy_into_table、show、create_or_replace_view、create_or_replace_temp_view、first、cache_result、およびrandom_split。クラス
snowflake.snowpark.Tableにおける、update、delete、merge。クラス
snowflake.snowpark.DataFrameWriterにおける、save_as_table、copy_into_location。クラス
snowflake.snowpark.DataFrameStatFunctionsにおける、approx_quantile、statement_params、cov、およびcrosstab。クラス
snowflake.snowpark.udf.UDFRegistrationにおける、register、register_from_file。クラス
snowflake.snowpark.udtf.UDTFRegistrationにおける、register、register_from_file。クラス
snowflake.snowpark.stored_procedure.StoredProcedureRegistrationにおける、register、register_from_file。snowflake.snowpark.functionsでの、udf、udtf、およびsproc。
session.call()への入力引数としてColumnのサポートが追加されました。df.write.save_as_table()でのtable_typeのサポートを追加しました。table_typeオプションから、temporary、temp、およびtransientが選択できるようになりました。
改善¶
session.use_*メソッドにオブジェクト名の検証を追加しました。SQL の
queryタグを更新して、タグに特殊文字が含まれている場合にタグをエスケープするようになりました。不足しているパッケージを追加するときに、Anacondaの条件が承認されるかどうかを確認するチェックを追加しました。
バグ修正¶
session.create_dataframe()内にある文字列の列の制限された長さを修正しました。入力データがリストのみの場合に、
session.create_dataframe()が誤って0とFalseをNoneに変換していたバグを修正しました。大規模なローカルデータセットを使用して
session.create_dataframe()を呼び出すと、仮テーブルが2回作成される場合があるバグを修正しました。function.trim()の定義を SQL 関数の定義に合わせました。Snowpark
function.sum()の代わりにPythonシステム定義(組み込み関数)sumを使用すると、snowpark-pythonがハングする問題を修正しました。
バージョン0.7.0(2022-05-25)¶
新機能¶
ユーザー定義のテーブル関数(UDTFs)のサポートが追加されました。
関数
snowflake.snowpark.functions.udtf()を使用してUDTFを登録するか、デコレータとして使用してUDTFを登録します。Session.udtf.register()を使用してUDTFを登録することもできます。Session.udtf.register_from_file()を使用して、PythonファイルからUDTFを登録します。
Snowflakeの組み込みテーブル関数とUDTFsの両方を含むテーブル関数をクエリするようにAPIsを更新しました。
関数
snowflake.snowpark.functions.table_function()を使用して、テーブル関数を表す呼び出し可能オブジェクトを作成し、それを使用してクエリでテーブル関数を呼び出します。または、関数
snowflake.snowpark.functions.call_table_function()を使用してテーブル関数を呼び出します。テーブル関数をラテラル結合するときにpartition byとorder byを指定する
over句のサポートが追加されました。Session.table_function()とDataFrame.join_table_function()を更新してTableFunctionCallインスタンスを受け入れます。
破壊的変更¶
functions.udf()とfunctions.sproc()を使用して関数を作成するときに、インポートまたはパッケージ引数に空のリストを指定して、この UDF またはストアドプロシージャにインポートまたはパッケージが使用されていないことを示すことができるようになりました。以前は、空のリストを指定すると、関数はセッションレベルのインポートまたはパッケージを使用していました。types.pyのデータ型の__repr__実装を改善しました。未使用のtype_nameプロパティは削除されました。SQLエラー用のSnowpark固有の例外クラスを追加しました。これにより、Pythonコネクタの以前の
ProgrammingErrorが置き換えられます。
改善¶
スレッドごとに初めて呼び出されたときにUDFまたはUDTFにロックを追加しました。
UDF の作成中に発生したピクルスエラーのエラーメッセージを改善しました。
失敗したクエリをログに記録するときにクエリIDを含めました。
バグ修正¶
DataFrame.to_pandas()を呼び出すときに、非整数データ(タイムスタンプなど)が整数に変換されることがあるバグを修正しました。列にスペースが含まれている場合に
DataFrameReader.parquet()がParquetファイルを読み取れなかったバグを修正しました。推測されたスキーマを含むファイルを読み取ることによってデータフレームが作成されたときに
DataFrame.copy_into_table()が失敗するバグを修正しました。
非推奨¶
Session.flatten()およびDataFrame.flatten()。
依存関係の更新¶
cloudpickle<= 2.0.0 のバージョンを制限しました。
バージョン0.6.0(2022-04-27)¶
新機能¶
Python UDFのバッチAPIを介したベクトル化されたUDFsのサポートが追加されました。Python UDFのバッチAPIを使用すると、入力行のバッチを Pandas DataFrames として受け取り、結果のバッチを Pandas配列 または シリーズ として返すPython関数を定義できます。これにより、SnowparkでのUDFs呼び出しのパフォーマンスを改善できます。
ステージでParquet、Avro、またはORCファイルを読み取ることによって作成される場合、デフォルトでDataFrameのスキーマを推測するためのサポートが追加されました。
current_session(), current_statement(), current_user(), current_version(), current_warehouse(), date_from_parts(), date_trunc(), dayname(), dayofmonth(), dayofweek(), dayofyear(), grouping(), grouping_id(), hour(), last_day(), minute(), next_day(), previous_day(), second(), month(), monthname(), quarter(), year(), current_database(), current_role(), current_schema(), current_schemas(), current_region(), current_available_roles(), add_months(), any_value(), bitnot(), bitshiftleft(), bitshiftright(), convert_timezone(), uniform(), strtok_to_array(), sysdate(), time_from_parts(), timestamp_from_parts(), timestamp_ltz_from_parts(), timestamp_ntz_from_parts(), timestamp_tz_from_parts(), weekofyear(), percentile_cont()の関数をsnowflake.snowflake.functionsに追加しました。
改善¶
Session.create_dataframe()メソッドを使用して、特定のスキーマで空の DataFrame を作成するためのサポートが追加されました。
データフレームを評価するときに、いくつかのログ(実行されたクエリなど)のログレベルを INFO から DEBUG に変更しました。
ピクルスエラーが原因で UDF の作成に失敗した場合のエラーメッセージが改善されました。
0.4.0で廃止された次の APIs を削除しました。 DataFrame.groupByGroupingSets()、 DataFrame.naturalJoin()、 DataFrame.joinTableFunction、 DataFrame.withColumns()、 Session.getImports()、 Session.addImport()、 Session.removeImport()、 Session.clearImports()、 Session.getSessionStage()、 Session.getDefaultDatabase()、 Session.getDefaultSchema()、 Session.getCurrentDatabase()、 Session.getCurrentSchema()、 Session.getFullyQualifiedCurrentSchema()。
バージョン>= 4.1.0の新しい依存関係としてtyping-extensionを追加しました。
バグ修正¶
Session.create_dataframe()メソッドのpandasのハード依存関係を削除しました。
バージョン0.5.0(2022-03-22)¶
新機能¶
ストアドプロシージャ API を追加しました。
ストアドプロシージャを登録できるように、snowflake.snowpark.functionsにSession.sprocプロパティとsproc()を追加しました。
名前でストアドプロシージャを呼び出すためのSession.callを追加しました。
UDFRegistration.register_from_file()を追加して、Pythonソースファイルまたはzipファイルから直接 UDFs を登録できるようにしました。
UDF を説明するための UDFRegistration.describe()を追加しました。
データフレームをランダムに分割する方法を提供するために DataFrame.random_split()を追加しました。
snowflake.snowpark.functionsに次の関数を追加しました。md5()、sha1()、sha2()、ascii()、initcap()、length()、lower()、lpad()、ltrim()、rpad()、rtrim()、repeat()、soundex()、regexp_count()、replace()、charindex()、collate()、collation()、insert()、left()、right()、endswith()。
call_udf()関数はリテラル値も受け入れるようになりました。
array_agg()に一意のキーワードを提供しました。
バグ修正¶
Column.cast(IntegerType())が使用された場合に DataFrame.to_pandas()に文字列の列が含まれる問題を修正しました。
複数の文字列の列がある場合の DataFrame.describe()のバグを修正しました。
バージョン0.4.0(2022-02-15)¶
新機能¶
UDFsを定義するときに使用するAnacondaパッケージを指定できるようになりました。
Sessionクラスに、add_packages()、get_packages()、clear_packages()、remove_package()を追加しました。
Sessionにadd_requirements()を追加して、要件ファイルを使用して、このセッションで使用するパッケージを指定できるようにしました。
UDF を作成するときに UDF レベルのAnacondaパッケージの依存関係を示すために、パラメーターパッケージに関数function snowflake.snowpark.functions.udf()とメソッド UserDefinedFunction.register()を追加しました。
UDF レベルのコードインポートを指定するために、snowflake.snowpark.functions.udf()と UserDefinedFunction.register()にパラメーターインポートを追加しました。
パラメーターセッションに関数udf()と UserDefinedFunction.register()を追加して、複数のセッションがある場合に UDF の作成に使用するセッションを指定できるようにしました。
UDF を定義するときにGeographyおよびバリアントデータの型ヒントとして使用される型GeographyおよびVariantをsnowflake.snowpark.typesに追加しました。
Geography geoJSONデータのサポートが追加されました。
テーブル操作用の DataFrame のサブクラスであるTableを追加しました。
メソッドupdateおよびdeleteは、Snowflakeのテーブルの行を更新および削除します。
メソッドmergeは、データを DataFrame からTableにマージします。
追加のパラメーターseedを使用してメソッド DataFrame.sample()を上書きしました。これはテーブルでは機能しますが、ビューとサブクエリでは機能しません。
Snowflakeデータベースから返された結果セットが大きすぎる場合に、イテレータから結果を取得できるように、 DataFrame.to_local_iterator()と DataFrame.to_pandas_batches()を追加しました。
DataFrame で実行された操作を仮テーブルにキャッシュするための DataFrame.cache_result()を追加しました。元の DataFrame に対する後続の操作は、キャッシュされた結果 DataFrame には影響しません。
DataFrame を評価するために実行される SQL クエリを取得するためのプロパティ DataFrame.queriesを追加しました。
セッションから作成された DataFrames を評価するためのすべての SQL クエリを含む、セッションで実行された SQL クエリを追跡するためのコンテキストマネージャーとしてSession.query_history()を追加しました。クエリIDとクエリテキストの両方が記録されます。
これで、既存の確立されたsnowflake.connector.SnowflakeConnection からSessionインスタンスを作成できます。Session.builder.configs()でパラメーター接続を使用します。
セッションの作成後にデータベース/スキーマ/ウェアハウス/ロールを切り替えるために、Sessionクラスにuse_database()、use_schema()、use_warehouse()、use_role()を追加しました。
DataFrame をステージングされたファイルにアンロードするための DataFrameWriter.copy_into_table()を追加しました。
DataFrame.unpivot()を追加しました。
一部の集計関数を使用して行を列で並べ替えるためのColumn.within_group()を追加しました。
snowflake.snowpark.functions次の関数を追加しました。listagg()、 mode()、 div0()、 acos()、 asin()、 atan()、 atan2()、 cos()、 cosh()、 sin()、 sinh()、 tan()、 tanh()、 degrees()、 radians()、 round()、 trunc()、 factorial()。
関数lead()およびlag()にオプション引数ignore_nullsを追加しました。
関数when()およびiff()の条件パラメーターで SQL 式を使用できるようになりました。
改善¶
すべての関数名とメソッド名は、よりPythonicなスネークケースの命名スタイルを使用するように名前が変更されました。便宜上、一部のキャメルケース名はスネークケースAPIsのエイリアスとして保持されます。スネークケースAPIsを使用することをお勧めします。
クラスSessionで次のメソッドを廃止し、同等のスネークケースに置き換えました。getImports()、addImports()、removeImport()、clearImports()、getSessionStage()、getDefaultSchema()、getDefaultSchema()、getCurrentDatabase()、および getFullyQualifiedCurrentSchema()。
クラス DataFrame で次のメソッドを廃止し、同等のスネークケースに置き換えました。 groupingByGroupingSets()、naturalJoin()、withColumns()、および joinTableFunction()。
プロパティ DataFrame.columnsは、 DataFrame.schema.namesおよびSnowflakeデータベース識別子の要件と一致するようになりました。
Column.__bool__()は TypeError を発生させるようになりました。これにより、Columnオブジェクトでの論理演算子and、 or、 notの使用が禁止されます。たとえば、col("a")> 1とcol("b")> 2は TypeError を発生させます。代わりに(col("a")> 1)と(col("b")> 2)を使用します。
PutResult と GetResult をサブクラス NamedTuple に変更しました。
ローカルパスまたはステージの場所にスペースまたはその他の特殊文字が含まれている場合にエラーが発生するバグを修正しました。
DataFrame.describe()を変更して、例外を発生させる代わりに、数値および文字列以外の列が無視されるようにしました。
依存関係の更新¶
snowflake-connector-pythonを2.7.4に更新しました。
バージョン0.3.0(2022-01-09)¶
新機能¶
Column.in_()のエイリアスを持つColumn.isin()を追加しました。
cast()の特別バージョンであるColumn.try_cast()を追加しました。キャストが不可能な場合に文字列式を他の型にキャストしようとすると、nullを返します。
文字列列を処理するために、Column.startswith()とColumn.substr()を追加しました。
Column.cast()は、 DataType インスタンスに加えて、キャスト型を示すstr値も受け入れるようになりました。
DataFrame の統計を要約するために DataFrame.describe()を追加しました。
DataFrame のクエリプランを出力するために DataFrame.explain()を追加しました。
DataFrame.filter()およびDataFrame.select_expr()で SQL 式を使用できるようになりました。
メソッド DataFrame.saveAsTable()とSession.write_pandas()にcreate_temp_tableという新しいboolパラメーターを追加し、オプションで仮テーブルを作成できるようにしました。
DataFrame.except_()のエイリアスとして DataFrame.minus()と DataFrame.subtract()を追加しました。
snowflake.snowpark.functionsモジュールに次を追加しました。regexp_replace()、concat()、concat_ws()、to_char()、current_timestamp()、current_date()、current_time()、months_between()、cast()、try_cast()、greatest()、least()、hash()。
バグ修正¶
Pandas DataFrameの列名にスペースが含まれている場合に、Session.createDataFrame(pandas_df)とSession.write_pandas(pandas_df)で例外が発生する問題を修正しました。
DataFrame.copy_into_table()がエラーレベルのログエントリを誤って出力することがある問題を修正しました。
一部のDataFrame APIsがドキュメントから欠落していたAPIドキュメントの問題を修正しました。
依存関係の更新¶
snowflake-connector-pythonを2.7.2に更新しました。これにより、pyarrowの依存関係が6.0.xにアップグレードされます。詳細については、Pythonコネクタ2.7.2リリースノートをご参照ください。
バージョン0.2.0(2021-12-02)¶
新機能¶
Pandas DataFrame から DataFrame を作成するための createDataFrame()メソッドを追加しました。
SnowflakeのテーブルにPandas DataFrame を書き込み、Snowpark DataFrame オブジェクトを返すためのwrite_pandas()メソッドを追加しました。
ウィンドウ関数を呼び出すための新しいクラスとメソッドを追加しました。
ウィンドウパーティション内の他の値に関する値の累積分布を見つけるための新しい関数cume_dist()と、ウィンドウパーティション内にある各行の一意の行番号を返すrow_number()を追加しました。
DataFrameStatFunctions クラスの DataFrames の統計を計算するための関数を追加しました。
DataFrameNaFunctions クラスの DataFrame で欠落している値を処理するための関数を追加しました。
新しいメソッド、rollup()、cube()、およびpivot()を DataFrame クラスに追加しました。
DataFrame groupByGroupingSets メソッドで使用して SQL GROUP BY GROUPING SETS を実行できる GroupingSets クラスを追加しました。
ステージとの間でファイルをアップロードおよびダウンロードするために使用できる新しい FileOperation(セッション)クラスを追加しました。
ステージ内のファイルからテーブルにデータをロードするためのcopy_into_table()メソッドを追加しました。
CASE式で、関数whenおよびotherwiseは、Columnオブジェクトに加えてPython型を受け入れるようになりました。
UDF を登録するときに、オプションでreplaceパラメーターをTrueに設定して、既存の UDF を同じ名前で上書きできるようになりました。
改善¶
UDFsサーバーにアップロードされる前に圧縮されるようになりました。これにより約10倍小さくなり、大きなMLモデルファイルを使用している場合に役立ちます。
UDFのサイズが8196バイト未満の場合、ステージにアップロードされるのではなく、インラインコードとしてアップロードされます。
バグ修正¶
df.select(when(col("a") == 1、 4).otherwise(col("a")))、 [行(4)、 行(2)、 行(3)] で例外が発生する問題を修正しました。
大規模なローカルデータからDataFrameが作成されたときに、df.toPandas()で例外が発生する問題を修正しました。