Python用Snowparkライブラリの2024年リリースノート

この記事には、 Snowpark Library for Python のリリースノートが含まれています。また、該当する場合は以下が含まれます。

  • 動作の変更

  • 新機能

  • 顧客向けバグ修正

Snowflake は、 Snowpark Library for Python の更新にセマンティックバージョニングを使用します。

バージョン1.13.0(2024-02-26)

Snowparkライブラリのバージョン1.13.0では、いくつかの新機能が導入されています。

新機能

  • 関数 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-02-08)

Snowparkライブラリのバージョン1.12.1では、いくつかの新機能が導入されています。

改善

  • 最適なメモリ割り当てのために、 to_pandas 変換時にデフォルトで split_blocks=True を使用します。このパラメーターは pyarrow.Table.to_pandas に渡され、 PyArrow がメモリ割り当てを分割して、単一の連続したブロックではなく、小さく管理しやすいブロックに割り当てられるようにします。この結果、大きなデータセットを扱う際のメモリ管理が改善されます。

バグ修正

  • Null値を持つ IntergerType 列を持つDataframe上で評価するとエラーが発生する DataFrame.to_pandas のバグを修正しました。

バージョン1.12.0(2024-01-29)

Snowparkライブラリのバージョン1.12.0では、いくつかの新機能が導入されています。

動作変更(API 互換)

  • to_pandas 操作中にデータ型を解析するときは、大きな整数値の精度問題を修正するために GS 精度値に依存します。これは、以前に int8 として返されていた列が int64 として返されるユーザーに、影響を与える可能性があります。ユーザーは、戻り値の列に明示的に精度値を指定することで、この問題を解決することができます。

  • Session.call を実行すると、 collect() 操作が実行される場合を除いて、ストアドプロシージャがトリガーされなかったテーブルストアドプロシージャの場合に、 Session.call の動作を揃えました。

  • StoredProcedureRegistration は、クライアントのローカルバージョンのライブラリにおける依存パッケージとして snowflake-snowpark-python を自動的に追加するようになりました。サーバーがそのバージョンをサポートできない場合は、エラーがスローされます。

新機能

  • StoredProcedure.__call__statement_params を公開しました。

  • Session.add_import に2つのオプション引数を追加しました。

    • 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 に以下の関数を追加しました。

    • 複数のウィンドウサイズでの合計や平均のような移動集計を可能にするために、 moving_agg 関数を DataFrame.analytics に追加しました。

    • 複数のウィンドウサイズでの合計や平均のような移動集計を可能にするために、 cummulative_agg 関数を DataFrame.analytics に追加しました。

バグ修正

  • ブール値が誤って整数値を上書きする 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 が10進数型を取得し、 pandas にオブジェクトのd型を作成するバグを修正しました。代わりに、値を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 で選択するようになります。

  • エイリアシングされた列のある別の DataFrame から DataFame がコピーされている場合に 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許容フィールドがブール値型で尊重されないバグを修正しました。この修正は、ユーザーが仮テーブルを作成する権限を持っている場合にのみ有効であることに注意してください。

  • limit() を使用した場合に、 session.sql にある非選択ステートメントが SQL クエリがドロップされる SQL シンプリファイアーでのバグを修正しました。

  • セッションパラメーター ERROR_ON_NONDETERMINISTIC_UPDATE がtrueの場合に例外が発生するバグを修正しました。