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/accessed/directory/spark_adw_lab/source_files
出力フォルダーパス( SMA は出力用のディレクトリを自動生成しますが、これを変更できます): /your/accessed/directory/spark_adw_lab/source_files_output
メールアドレス: your.name@your_domain.com
お客様の会社: お客様の組織
このプロジェクト作成画面に関するいくつかのメモがあります。
メールと会社のフィールドは、進行中の可能性のあるプロジェクトを追跡するのに役立ちます。たとえば、大規模な 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 によって生成されたレポートの完全なセットを入手できるため便利です。その後、変換されたコードの余分なコピーを作成せずに、それらをナビゲートしたり、組織内の他のユーザーと共有したりできます。ただし、これらの同じ評価レポートはすべて変換中に生成されます。そのため、評価モードは一時的にスキップして、変換に進みます。
アプリケーションの右下隅にある「 SAVE & SKIP ASSESSMENT 」を選択します。

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

これにより、変換画面が表示されます。この画面には、入力ディレクトリフィールドと出力ディレクトリフィールドが再度表示されますが、それらにはプロジェクト作成ページで入力した内容がすでに入力されています。ここで唯一の新しいフィールドは、アクセスコードを入力するものです。アクセスコードは自由に入手できますが、有効期限があります。したがって、Snowpark Migration Accelerator( SMA )を使用するためにアクセスコードをすでにリクエストしている場合でも、再度リクエストが必要になる場合があります。(そして、これらのアクセスコードを生成するメカニズムは SnowConvert に似ていますが、 SnowConvert のアクセスコードは SMA では機能しません。別のものをリクエストして使用する必要があります。)
「アクセスコードを入力してください...」フィールドの横にある「アクセスコードについて問い合わせる」を選択すると、アクセスコードをリクエストできます。

これを選択すると、ポップアップメニューが表示され、アクセスコードを生成するためにあなたの身元を確認するよう求められます。

上記のフィールドをすべて入力し、有効なメールアドレスを入力していることを確認してください。先ほどのプロジェクト作成画面で、作成中のプロジェクトに関連付けるメールアドレスを入力しました。ただし、そのメールには実際には何も送信されませんでした。これは、プロジェクトをローカルで追跡するためのものでした。このフォームは、入力したメールに送信されるアクセスコードをトリガーします。
フォームを送信すると、すぐにアクセスコードが記載されたメールを受け取ります。メールは sma-notifications@snowflakel.com から送信され、次のように表示されます。

上の画像で、 <your access code here> と表示されている部分には、数字、文字、ハイフンが並んでいるのが見えるはずです。その文字列をコピーして、 SMA のアクセスコードフィールドに貼り付けます。

ボックスに値を貼り付けると、 SMA はアクセスコードを検証します。検証が成功すると、アクセスコードダイアログボックスの下にアクセスコードの詳細が表示されます。

アクセスコードを検証するために、 SMA はSnowflakeのライセンス API を呼び出します。インターネットに接続していない場合、ツールはアクセスコードを検証できず、エラーメッセージが表示されます。完全にオフラインの環境でツールを実行する必要がある場合は、アクセスコードの検証についてサポートを受けるために、 sma-support@snowflake.com にご連絡ください。
アクセスコードが検証されたので、変換設定を確認できます。

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

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

「 START CONVERSION 」オプションはアプリケーションの右下隅にあります。このオプションを選択して変換を開始します。
次の画面には、変換の進捗が表示されます。

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

結果ページには結果が表示されます。

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

各レディネススコアは、SnowparkやSnowflakeでサポートされている API 内の関数または要素の数を、この実行の当該 API に関連するすべての関数または要素の数で割った、非常に基本的な計算値です。ウィンドウを展開すると、スコアの計算方法を示す計算が表示されます。また、このウィンドウの左上隅にある「スコアの読み取り方法」を選択することで、レディネススコアの解釈方法についても学ぶことができます。
この実行のSpark API レディネススコアは97.92%です。(あなたの場合は異なる可能性がありますのでご注意ください。これらのツールは2週間ごとに更新されており、2つのプラットフォーム間の互換性は常に変化しているため、内容が変更される可能性があります。)これは、このツールが特定したSpark API に関する参照のうち、97.92%がSnowflakeでサポートされていることを意味します。この場合の「サポートされている」とは、すでに同様の機能が存在するか、または SMA が機能的に同等の出力を作成している可能性があることを意味します。このスコアが高いほど、このコードをSnowflakeですばやく実行できる可能性が高くなります。
(この97.92%の参照は、Snowpark API で直接サポートされているか、 SMA によって変換されていることに注意してください。それらのほとんどは直接サポートされていると思われますが、 SMA によって生成された出力レポートフォルダー内の ** SparkUsageInventory.csv** レポートを確認することで、変換された内容と渡された内容を正確に確認できます。このラボでは、この部分については詳しく説明しません。 issues.csv ファイルでサポートされていない項目を確認するだけですが、この情報は参考として利用できます。) NOT
他のレディネススコアもあり、レディネススコアは時間の経過とともに変化するため、ラボに表示されているもの以外にも様々なものが表示される場合があります。このラボではそれぞれについて説明しませんが、スコアが低いほど調査する価値があることに注意してください。
コード分析済み¶
各レディネススコアのすぐ下に、処理できなかったコードがあったかどうかを示す小さなインジケーターが表示されます。

この数値は、完全に解析された ファイルの割合 を表します。この数が100%未満の場合、 SMA が解析または処理できなかったコードが一部存在することになります。問題解決のためにまず最初に確認すべき箇所はここです。100%未満の場合は、問題の概要を見て解析エラーが発生した場所を確認してください。これは、 SMA の出力を介して作業するときに最初に確認すべき箇所です。なぜなら、大量のコードをスキャンできなかった場合にツールを再度実行することが理にかなっている唯一の場所であるためです。
この場合、ワークロードの 50% のみが正常に解析されています。残念です。これは一見、パニックになるべき事態のように思えるかもしれませんが、早急に判断を下すのはやめましょう。2つのファイルしかなく、解析エラーの数もまだわかっていません。
この数値の結果にかかわらず、このページで最後にアクセスする場所は問題の概要です。この概要が表示されるまで、アプリケーションを下にスクロールします。

問題の概要¶
問題は、 SnowConvert および SMA の重要な要素の1つです。各ツールは、受け取った入力に基づいて機能的に同等の出力を作成しようとしていますが、変換は100%自動化されていません。これらのツールはこれを認識し、変換できない、または問題により追加の注意が必要な可能性のあるすべてのものをマークします。これらの問題点はスプレッドシートにまとめられているだけでなく、出力コードにコメントとして直接書き込まれています。
UI に表示される問題の概要には、このツールの実行時に検出された問題点が強調表示されます。これらの問題は、しばしば EWI (エラー、警告、問題)という略語で呼ばれることがあります。SMA は、 SnowConvert に似ているものの同一ではなく、3種類の問題を生成します。
解析エラー - この種の問題は重大であると見なされ、すぐに対処する必要があります。SMA の仕組み上、コードが正しく解析されない場合、レポートの情報が欠落したり、変換に関するデータが欠落したりする可能性があります。
変換エラー - SMA はこれを認識します(または少なくとも認識すると考えます)が、何らかの理由で変換できません。これらのエラーには通常、非常に具体的な問題コードがあり、次に対処する必要があります。
警告 - これらのエラーコードは、 SMA が変換したコード、またはSnowparkやSnowflakeに同等のものが存在するコードを識別するものですが、テスト時に問題が発生する可能性があります。機能的に100%同等であるとは限りません。
問題の種類に関する詳細情報は SMA ドキュメントページ に記載されていますが、今回の実行における問題の概要は以下のとおりです。

この概要では、存在する固有の問題のコード、数、レベル、説明を確認できます。多くの問題が存在する場合でも、固有の問題が少ないほど、プログラムで処理できる可能性が高くなります。各固有の問題コードの詳細については、 UI のコードをクリックしてください。これにより、特定の問題に関する SMA ドキュメントページに移動します。
いくつかの変換エラー、警告、および1つの解析エラーがあるようです。これは、ツールが読み取れなかったものが1つあったということです。( PND で始まるエラーコードが多数発生する場合は、変換設定でそのオプションの選択を解除していない可能性があります。もしそれらが表示された場合でも、無視できます。)
問題の数に関係なく、移行を開始する準備ができたら、常に詳細な問題ファイルを探索することをお勧めします。これは、 SMA を実行したマシンのローカルに保存されているcsvファイルです。このファイルは、 SMA の右下にある「 VIEW REPORTS 」オプションを選択することで見つけることができます。

これにより、すべてのレポートがあるローカルディレクトリに移動します。そして、この記事を書いている時点では、 SMA によって多数のレポートが生成されています。

これらのレポートにはそれぞれ、 SMA の使用方法に応じて重要な情報が含まれています。現時点ではissues.csvファイルのみを確認しますが、 SMA によって生成されるすべてのレポートとインベントリに関する詳細情報は、 SMA ドキュメント に記載されていることにご注意ください。 EVERY
問題ファイルを開くと、次のようになります。

このレポートのスキーマに注意してください。これには、問題コード、問題の説明、問題の種類(カテゴリ)、各問題が含まれているファイル、各問題が含まれているファイルの行番号が表示され、さらにその特定の問題に関するドキュメントページへのリンクも提供されます。これらはすべて、問題に対処するときに役立つ情報です。
これをファイルごとにピボットすることで、ファイルごとにどのような問題があるかを確認できます。

問題はいくつかしかないようで、解析エラーはパイプラインのPythonスクリプトにあるようです。まずはそこから始めましょう。
通常であれば、レポートディレクトリにあるもう一つのレポート、つまり ** ArtifactDependencyInventory.csv** ファイルを確認します。しかし、これは非常に小規模な実行であるため、これらの出力ファイルの実際の内容を確認し、Snowflake内で(あるいはSnowflakeを使って)実行できるかどうかを確認してみましょう。