Snowpark Migration Accelerator:パイプラインラボ - 評価¶
SnowConvert と同様、 SMA を介してコードを実行し、結果を評価し、問題を解決して、新しいプラットフォームで実行します。ただし、 SnowConvert とは異なり、 SMA はソースプラットフォームに接続せず、Snowflakeにも接続しません。 NOTこれは、完全にオフラインで実行できるローカルアプリケーションです。しかし、そのパワーは評価にあります。変換に関する手間のかかる作業のほとんどは、Spark API およびSnowpark API 間の互換性を構築することで完了しました。
抽出およびコードの可用性¶
AdventureWorks ラボに使用するファイルは次のとおりです。
end_to_end_lab_source_code.zip
このラボの目的のために、変換するノートブックとスクリプトファイルは、ファイルとして既にアクセスできることを前提としています。一般に、 SMA は、入力としてファイルを受け取り、ソースプラットフォームに接続しません。ファイルが特定のツールによってオーケストレーションされている場合は、ファイルをエクスポートする必要があります。databricksまたは EMR の一部としてノートブックを使用している場合、今日 SMA で実行するjupyterノートブックと同じように、.ipynbファイルとしてエクスポートできます。
このラボには数個のファイルしかありませんが、大規模な移行では数百または数千のファイルが含まれるのは一般的です。抽出できるものを抽出し、 SMA を通じてこれらのファイルを実行します。このようなツールを使うことの良い点は、欠落しているものを教えてくれることです。
「customer_update.csv」というデータファイルもあります。これは、Adventure Worksが現在使用している販売時点管理( POS )システムによってローカルで生成されるファイルのサンプルです。そのシステムも更新されている間、この概念証明(POC)は、Sparkの代わりにSnowparkで既存のパイプラインを動作させることに焦点を当てています。
これらの各ファイルを取得して、ローカルマシン上の単一のディレクトリにドロップします。

プロジェクトディレクトリを作成することをお勧めします。これは好きな形で呼び出すことができますが、このラボの提案として、 spark_adw_lab を使用してみましょう。つまり、spark_adw_labという名前のフォルダーを作成し、そのディレクトリにsource_filesという別のフォルダーを作成します(パスは、 /your/accessible/directory/spark_adw_lab/source_files など)。これは必須ではありませんが、整理するのに役立ちます。SMA はサブディレクトリのセットもスキャンするので、フォルダーに特定のパイプラインを追加し、別のフォルダーにノートブックを追加することができます。
アクセス ¶
アクセス可能なディレクトリにソースファイルができたので、 SMA を実行します。
まだダウンロードしていない場合は、 SMA は Snowflakeウェブサイト から入手できます。Snowflakeアカウントで SnowSight の移行ページからもアクセスできます。

ツールをダウンロードしたら、インストールしてください。 SMA のインストール に関する詳細については、 SMA ドキュメントをご参照ください。
Snowpark Migration Acceleratorを使用する¶
ツールをインストールしたら、開きます。SMA を起動すると、パートナーツールの SnowConvert と非常によく似ています。これらのツールはどちらも、コードファイルをツールに入力して実行する同様の概念に基づいて構築されています。リマインダーとして、 SnowConvert は DDL とデータをソースから直接取得し、Snowflakeに直接入力することができます。SMA はこれをしません。ソースとしてコードファイルのみを受け取り、それらのファイルをSnowflakeと互換性のあるものに出力します。これは主に、ツールはユーザーがsparkコードをオーケストレーションする方法を知ることができないためですが、より安全に使用できるようになるためでもあります。
ツールを起動すると、新しいプロジェクトを作成するか、既存のプロジェクトを開くかを尋ねられます。

これにより、プロジェクト作成画面が表示されます。

この画面では、プロジェクトの関連する詳細を入力します。すべてのフィールドが必須であることに注意してください。このプロジェクトでは、次のように入力できます。
プロジェクト名: Spark ADW ラボ
メールアドレス: your.name@your_domain.com
Company name: Your Organization
入力フォルダーパス: /your/accessed/directory/spark_adw_lab/source_files
出力フォルダーパス( SMA は出力用のディレクトリを自動生成しますが、これを変更できます): /your/accessed/directory/spark_adw_lab/source_files_output
このプロジェクト作成画面に関するいくつかのメモがあります。
メールと会社のフィールドは、進行中の可能性のあるプロジェクトを追跡するのに役立ちます。たとえば、大規模な SI の場合は、1人のユーザーが複数のメールアドレスを持ち、複数の組織を代表して SMA を運用している場合があります。この情報は、 SMA によって作成されたプロジェクトファイルに保存されます。
SQL の非表示フィールドがあります。SMA は SQL をスキャンおよび分析できますが、 SQL を変換することはできません。また、次の状況においてのみ SQL を識別できます。
.sqlファイルにある SQL
Jupyter Notebookの SQL セルにある SQL
spark.sqlステートメントに単一の文字列として渡される SQL 。
この SQL 機能は、Snowflakeとの互換性のない SQL があるかを判断するのに役立ちますが、 SMA の主な使用法ではありません。Spark SQL および HiveQL のその他のサポートは近日公開予定です。
すべてのプロジェクト情報を入力したら、この HoL については、評価フェーズは スキップ します。(私たちは評価を構築しているのではないのですか。)コードを変換しない場合は、評価を実行すると、 SMA によって生成されたレポートの完全なセットを入手できるため便利です。その後、変換されたコードの余分なコピーを作成せずに、それらをナビゲートしたり、組織内の他のユーザーと共有したりできます。ただし、これらの同じ評価レポートはすべて変換中に生成されます。そのため、評価モードは一時的にスキップして、変換に進みます。
On the Conversion settings page, select Skip Assessment, and then click Continue in the bottom right corner.

「保存」しているものはローカルプロジェクトファイルであることに注意してください。プロジェクト作成画面で入力したすべての情報は、上で指定したディレクトリで拡張子「.snowma」が付いたこのローカルテキストファイルに保存されます。

This will take you to the Conversion settings page. From here, you can choose Default Settings to proceed with conversion, or select Customize settings to review and adjust advanced options.

このハンズオンラボの出力を簡素化する設定が1つあります。それは、pandasデータフレームをSnowpark API に変換しようとする処理を無効にすることです。

この1つの設定は現在更新されているため、このオプションの選択を解除しないと、多くの追加警告が表示されます。pandasデータフレームのほとんどは、pandasのmodin実装の一部として使用できるので、今のところ、単純なインポート呼び出しの変更で十分でしょう。この問題に関する続報は、2025年6月末までにお知らせします。他の設定を確認することもできますが、そのまま残します。出力されたコードが互換性のあるテストライブラリとして、Snowpark Checkpointsというものが存在することに注意することが重要です。これに関連する設定がありますが、このラボでは変更しません。
Select "Save settings" to save and close your settings.

To start the conversion, click Continue in the bottom right corner of the application.
次の画面には、変換の進捗が表示されます。

SnowConvert と同様に、 SMA は入力ディレクトリのコードベース全体のセマンティックモデルを構築しています。コード要素、SQLオブジェクト、およびその他の参照アーティファクト間の関係を構築し、Snowflakeの機能に相当するものに最も近い出力を作成します。これは主に、Spark API からSnowpark API へ参照を変換することを意味します。SMA のエンジニアリングチームは、Snowparkエンジニアリングチームの一部であるため、行われるほとんどの変換はSnowpark API に組み込まれています。そのため、変更は軽微であるように見える場合があります。しかし、 SMA によって生成される豊富な評価情報により、移行プロジェクトを確実に前進させることができます。生成されたすべての評価情報の詳細な分析は別の場所で行う必要があるでしょう。なぜなら、おそらく SMA はこの段落を読み終える頃には、この変換作業を完了しているはずだからです。
When the SMA has finished, the results page will show the… results.

結果ページには、Snowflake用にこのコードベースがどの程度「準備できている」かについて、非常に簡素化されたメトリックである「レディネススコア」があります。次に結果を確認しますが、Snowpark Migration Acceleratorの実行は簡単な部分であることに注意してください。これはあくまで「アクセラレーター」であることにご留意ください。万能薬でも、完全に自動化されたツールでもありません。あるデータソースに接続し、別のデータソースに出力するパイプラインは、このツールでは完全に移行されないため、 SnowConvert が実行するような単純な SQL から SQL への DDL の移行よりも常に多くの注意が必要になります。ただし、Snowflakeはこれを可能な限りシンプルにするよう継続的に取り組んでいます。
出力の解釈¶
SMA は、 SnowConvert 以上に、大量の評価情報を生成します。結果の解析が困難な場合があります。達成したい目標によって、様々な方向性が考えられます。
これは非常にシンプルなシナリオなので、これから行う手順の中にはやりすぎに見えるものもあるかもしれません。(つまり、ファイルが2つしかないこのプロジェクトで、目で見て確認すれば済むのに、わざわざ依存関係を分析する必要があるのでしょうか。)しかしここでは、この小さな POC であっても、通常推奨している手順をすべて踏まえて説明することを目的としています。ただし、範囲はクリアで、ファイルは2つしかないということを改めて明確にしておきましょう。ソースと同じように、両方とも動作する必要があります。
レディネススコア¶
このことを念頭に、アプリケーションで表示される出力の最初の部分である、レディネススコアを見てみましょう。複数のレディネススコアがあり、それぞれを拡張して、そのレディネススコアによって何がキャプチャされているかをより理解することができます。

各レディネススコアは、SnowparkやSnowflakeでサポートされている API 内の関数または要素の数を、この実行の当該 API に関連するすべての関数または要素の数で割った、非常に基本的な計算値です。ウィンドウを展開すると、スコアの計算方法を示す計算が表示されます。また、このウィンドウの左上隅にある「スコアの読み取り方法」を選択することで、レディネススコアの解釈方法についても学ぶことができます。
This execution has a Snowpark API Readiness Score of 96.02%. (Please note that yours may be different! These tools are updated on a biweekly basis and there may be a change as compatibility between the two platforms is ever evolving.) This means that 96.02% of the references to the Spark API that the tool identified are supported in Snowflake. “Supported” in this case means that there could be a similar function that already exists or that the SMA has created a functionally equivalent output. The higher this score is, the more likely this code can quickly run in Snowflake.
(Note that this 96.02% of references are either supported directly by the Snowpark API or they are converted by the SMA. Most of them are likely supported directly, but you can find out exactly what was converted and what was passed through by reviewing the SparkUsagesInventory.csv report in the output Reports folder generated by the SMA. We will not walk through that in this lab as we will see what is NOT supported in the Issues.csv file, but you can use this information for reference.)
他のレディネススコアもあり、レディネススコアは時間の経過とともに変化するため、ラボに表示されているもの以外にも様々なものが表示される場合があります。このラボではそれぞれについて説明しませんが、スコアが低いほど調査する価値があることに注意してください。
コード分析済み¶
各レディネススコアのすぐ下に、処理できなかったコードがあったかどうかを示す小さなインジケーターが表示されます。

この数値は、完全に解析された ファイルの割合 を表します。この数が100%未満の場合、 SMA が解析または処理できなかったコードが一部存在することになります。問題解決のためにまず最初に確認すべき箇所はここです。100%未満の場合は、問題の概要を見て解析エラーが発生した場所を確認してください。これは、 SMA の出力を介して作業するときに最初に確認すべき箇所です。なぜなら、大量のコードをスキャンできなかった場合にツールを再度実行することが理にかなっている唯一の場所であるためです。