Snowpark Python:Snowparkが生成したクエリで、繰り返しのサブクエリを排除する(キャンセル済み)¶
注意
この BCR はキャンセルされ、 2025_04バンドル から削除されます。
繰り返しのサブクエリの削除は、同一のサブDataFrames をクエリプラン内で識別し、共通テーブル式(CTEs)を採用して最終的なクエリを構築します。コンパイル時間が1秒を超えるクエリのほとんど半分に、少なくとも1つの冗長なサブクエリが含まれています。この最適化の利点は、特定された重複サブクエリの量と複雑さによってスケールします。
診断ステップ:
以前はエラーなしで実行されていたSnowparkデータパイプラインでSQL コンパイルエラーが発生。
SQL 生成のバグによって誤った結果が生成。
軽減策:
Snowparkクライアントを古いバージョンにダウングレードすると、問題が軽減されます。
パラメーター
PYTHON_SNOWPARK_USE_CTE_OPTIMIZATION_VERSIONを設定解除することで問題を軽減します。この変更の影響を受けないようにするには、Snowparkベースのワークフローを1.31.1より前のSnowpark Pythonバージョンに固定してください。たとえば、 Pythonストアドプロシージャを使用している場合は、ストアドプロシージャを作成する際に:code:
PACKAGES=('snowflake-snowpark-python==1.30.0')を設定します。SnowflakeノートブックまたはPythonワークシートの場合は、 Snowpark Pythonバージョンを1.31.1より前に切り替えます。
新旧の動作の違いを示すためには、Snowpark Pythonでの次のようなDataFrame変換を検討してください。
- 変更前:
上記の:code:
union_all`では、同じDataFrame:code:`df1を2回使用しており、生成された SQL クエリは基になるサブクエリを2回繰り返します。- 変更後:
最適化によって:code:
df1が2回使用されていることが検出され、サブクエリはCTE 式に置き換わり、それを使用してクエリを作成します。
参照:1995