SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Synapse の専用 SQL プールへの移行に活用できる Synapse Pathway を試してみる

leave a comment

Ignite 2021 で、発表された内容の中に Synapse Pathway がありました。

Synapse Pathway は Azure Synapse Analytics の専用 SQL プールに移行するための、SQL のコード変換を行うことができるツールとなっています。

2021/3/10 時点では、次の環境のオブジェクトの変換を行うことができるようになっています。

  • IBM Netezza
  • Microsoft SQL Server
  • Snowflake

今後、Amazon Redshift / Google BigQuery / Teradata のサポートも予定されているようですね。

image

日本語化されたドキュメントも Azure Synapse Pathway プレビューの概要 で公開されましたので、SQL Server からの変換を使用して、機能を試してみたいと思います。

Synapse Pathway はクラウドサービスではなく、スタンドアロンのツールとして提供されており、実行環境にツールをインストールする必要があります。

モジュールのダウンロード / インストール方法は本投稿では触れていません。
ツールの導入方法については、、Azure Synapse Pathway プレビューのダウンロード を参照してください。
インストーラーをダウンロードしてセットアップをぽちぽちするとインストールされます。

変換対象となるオブジェクト

Synapse Pathway の変換対象については サポートされているソース に記載されています。

Azure Synapse Pathway では、次のソースのデータベース、スキーマ、テーブルのコード変換がサポートされています。

  • IBM Netezza
  • Microsoft SQL Server
  • Snowflake

現時点では、データベース / スキーマ / テーブルの変換がサポートされており、それ以外のオブジェクトの変換についてはサポートが行われていません。

2021/3/10 時点の、Azure Synapse Pathway プレビューに関する FAQQ. コード変換には何が含まれていますか? には、次のように記載が行われています。

Q. コード変換には何が含まれていますか?

A. Synapse Pathway では、テーブル、スキーマ、ビュー、およびストアド プロシージャのコード翻訳がサポートされています。

ドキュメントによって記載内容が異なっているため、フィードバックしたところ、次のコメントをいただくことができました。

Hi, We are just pushing a change in docs to clarify the supported scope. In the preview version, Synapse Pathway only supports database, schemas and tables. Support for stored procedures and views will come in upcoming versions.

現時点では、サポートされているソースに記載されている内容が正しく、データベース / スキーマ / テーブルのみがサポートされており、ストアドプロシージャとビューのサポートは今後のバージョンで提供予定とのことです。

変換対象の入力方法

Synapse Pathway はデータベースに直接接続を行ってオブジェクトの変換を行うのではなく、変換対象のオブジェクトの DDL を .sql ファイルとして事前に出力しておき、ファイルが出力されているディレクトリをツールの入力情報として使用します。

翻訳を実行する に記載されていますが、入力として使用できるファイルの拡張子については「.sql 限定」となっており、他の拡張子については有効な入力情報として読み込まれません。

注意

入力ソースとして指定できるのは、拡張子が .sql のファイルのみです。 ユーザーが .txt ファイルで DDL や DML スクリプトを指定すると、ツールで翻訳は実行されません。

SQL Server を例とした Synapse Pathway による変換の実行 (スクリプトの作成)

SQL Server からの変換を試す場合、AdventureWorks サンプルデータベース を使用してみると良いのではないでしょうか。
今回は、変換元に、SQL Server 2019 を使用していますので、AdventureWorks2019 を使用しています。

変換対象の入力方法に記載しましたが、Synapse Pathway は、.sql ファイルに記載されている DDL を入力情報として利用しますので、データベースからスクリプトを出力する必要があります。

SQL Server の場合、スクリプトの生成機能 があり、オブジェクト単位に単一ファイルとして DDL を出力することができます。
Azure Data Studio の Database Administration Tool Extenstionsfor Windows にもスクリプト生成があり、使用しているスクリプト生成機能は同じようなので、Data Studio を使用しても良いかと。

SSMS の場合は、該当のデータベースを右クリックし、タスク -> スクリプトの生成から、スクリプト生成ウィザードを起動することができます。

image

スクリプト生成ウィザードでは、作成対象のオブジェクトを選択することができます。

現時点で Synapse Pathway がサポートしているのは、データベース / スキーマ / テーブルの 3 種類のオブジェクトのみとなりますので、テーブルとスキーマのみを有効にしています。

データベース全体のオブジェクトを対象として、スクリプトを生成することも可能ですが、サポートしていないオブジェクト以外のスクリプトはエラーとして出力されますので、サポート対象のオブジェクトのみを出力しておいた方がよいかと。

image

スクリプト作成オプションの設定ですが「スクリプト ファイルとして保存」の「オブジェクトごとに 1 つのスクリプトファイル」で出力したほうが使いやすいかと思います。
Synapse Pathway の変換レポートの情報はファイル単位で出力されますので、どのファイルで問題が発生しているかがわかりやすくなります。

image

ファイル単位に出力を行うようにしたら、「詳細設定」で出力形式の調整を行った方が編集箇所が少なくて済むかもしれません。
今回は、検証のため、変換結果が得られやすいように、デフォルトの設定から次の設定を変更していますが、これは環境によって調整を行ってください。

  • テーブル / ビュー オプション
    • チェック制約のスクリプトを作成 : True -> False
    • 外部キーのスクリプトを作成 : True -> False
  • 全般
    • UDDT を基本データ型に変換 : False -> True
    • USE DATABAE のスクリプトを生成 : True -> False
    • 拡張プロパティのスクリプトを作成 : True -> False
    • 既定のスクリプトを作成 : True -> False
    • 説明用ヘッダーを含める : True -> False

スクリプトの出力が終わったら、Synapse Pathway を起動して、変換を行います。

SQL Server を例とした Synapse Pathway による変換の実行 (変換の実施)

インプットに使用する .sql ファイルが出力出来たら Synapse Pathway を起動します。
次の画面が、Synapse Pathway の画面となります。

UI はシンプルで、変換対象の種類 / .sql ファイルを出力したディレクトリ / 結果の出力先ディレクトリを指定して Translate ボタンを押すと、変換が行われます。

image

Translate をクリックした後の結果がこちらになります。
どのようなファイルでエラーが発生し、変換対象として解析ができたファイルでは、どのような警告が発生したかを確認することができます。

ツールにより手動で変換した場合と比較して、コストがどれだけ抑えられたかについても出力されており、現状、成功したオブジェクトごとに 30 分の変換コストが削減されたと認識されるようです。
(以下の結果だと 74 のオブジェクトの変換に成功しているので、74 × 30 分 = 37 時間の作業の削減)

出力結果の説明については Azure Synapse Pathway プレビューのレポート生成 で解説が行われていますので、各項目の内容については、docs の内容を参照してください。

image

結果を表示する のドキュメントにも記載されていますが、変換に成功したオブジェクトについては出力先に指定したディレクトリに Synapse に対応した SQL のファイルが出力されますので、これらのファイルを活用して、専用 SQL プールへの移行を行うことができます。
image

Save Assesment で .aspproj ファイルを保存しておくことで、Load Assesment から再度結果を確認することもできますので、ある程度形のあるレポートが出力することが出来たら保存しておくと良いのではないでしょうか。

入力情報として使用する SQL のフォーマットの調整

Synapse Pathway で入力情報として使用する SQL (.sql) ですが、最初は出力するフォーマットの調整が大変かもしれません。

変換できなかったファイルについては Errors に出力され、Issue Details にどの行でエラーが発生していたのかが出力されます。
image

DatabaseLog の場合は、8 行目でエラーが発生していると出力されていますので、実際に sql ファイルを確認してみると次のようになっています。
image

sysname のデータ型を使用しているとエラーとなるようですね。

sysname のデータ型を使用しているようなケースでは、次のエラーが発生しています。

The file contains one or more syntax errors and will not be translated. The syntax can either be invalid or not yet implemented in Azure Synapse Pathway.

このエラーが発生した場合、該当の行以降の解析は行われていなさそうですので、変換しては修正を繰り返していくことになるかと。

本投稿では、レポートの結果が得られやすいように、スクリプト生成時に生成のオプションを調整していますが、デフォルトのスクリプト生成の設定ですと、結構な数のエラーが出力されて、レポートがうまく表示できないケースもありますので、生成時のフォーマットは注意しておいた方がよいかと思います。

 

SQL Server ベースの環境のスキーママイグレーションについては、Microsoft から、Database Migration Assistant (DMA) が以前から提供されていました。
このツールは SQL Server to SQL Server or Azure SQL Database をターゲットとしており、Synapse の専用 SQL プールには対応していませんでした。

今回 Synapse Pathway が提供されたことで、専用 SQL プールに移行する際のスキーマ変換の効率を改善させることができるかもしれませんね。

Share

Written by Masayuki.Ozawa

3月 10th, 2021 at 12:03 pm

Posted in Synapse Analytics

Tagged with

Leave a Reply