【要約】SnowflakeでPythonから外部APIを叩く3つの方法を実際に試した [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
Snowflakeを利用する開発者が、Pythonを用いて外部APIからデータを取得しようとする際、最適な実装手法を選択できないという課題がある。具体的には以下の問題に直面する。
- ・実装手段(Stored Procedure, UDF, Snowpark)の特性が不明確である。
- ・外部ネットワークへのアクセス許可設定(Network RuleやEAI)の手順が複雑である。
- ・実行回数やSessionオブジェクトの有無による挙動の違いが把握しにくい。
// Approach
筆者は、Open-Meteo APIを対象に3つの方式すべてでコードを実装し、その動作と特性を比較検証した。以下のステップで検証を行っている。
- ・Network RuleとEAIを作成し、外部通信を許可する環境を構築した。
- ・方式①(Stored Procedure)で、CALLによる単発実行とSessionの利用を確認した。
- ・方式②(Python UDF)で、SELECT式としての利用と行ごとの実行挙動を検証した。
- ・方式③(Snowpark)で、テーブルの読み込みから書き戻しまでの一連の処理を実装した。
// Result
検証の結果、開発者は用途に応じて以下の基準で実装方式を選択できるようになった。
- ・既存のSELECT結果に外部APIの値を1列追加したい場合は、Python UDFを選択する。
- ・単発のAPI呼び出しやバッチ処理を行いたい場合は、Stored Procedureを選択する。
- ・テーブルを読み込み、APIで加工して別テーブルへ書き戻す場合は、Snowparkを用いたStored Procedureを選択する。
Senior Engineer Insight
> 実戦投入の観点では、UDFによる実装には細心の注意が必要だ。UDFは行ごとに実行されるため、大規模データに対して実行するとAPIのレート制限を即座に突破するリスクがある。また、EAIの作成には高い権限が必要であり、運用設計時には権限分離を考慮すべきである。データ補完パイプラインを構築する際は、制御が容易でスケーラビリティを確保しやすい、Snowparkを用いたStored Procedureを選択するのが定石といえる。