Azure Synapse Analyticsのコスト評価-適切なリソース利用を検証

技術者が語るMicrosoft Azure

Azure Synapse Analyticsのコストに関して、分かりづらいという声をよく耳にします。
今回は実際の処理を作ってみて、必要となるコストやその他の機能を評価・紹介します。

1.はじめに

Azure Synapse Analyticsを使用する時のハードルの一つに、コスト面が明瞭でない点が挙げられます。

そこで今回はAzure Synapse Analyticsのうち、特に専用SQLプール、サーバーレスSQLプールそれぞれでデータの連携処理を作成し、実行した際にかかるコストについて調査を行いました。
その結果と、結果をもとにしたSQLプールの選定の考え方について紹介します。

なお、専用SQLプールは処理の時間依存で料金が発生し、サーバーレスSQLプールは実行クエリによるデータ量依存で料金が発生します。
その上で、後述するパイプライン処理は実行単位等複数の要素で料金が発生します。
料金体系の詳細は以下のURLをご参照ください。

●Azure|Azure Synapse Analytics の価格

2.調査に使用する処理について

まず、専用SQLプール側の処理の概要について説明します。

下図のようにAzure Storageに格納したCSVファイルを参照する外部テーブルをAzure Synapse Analyticsで作成します。
同様にAzure Synapse Analytics内で作成したテーブルに対し、Azure Synapse Analytics備え付けのパイプラインを用いて外部テーブルのデータを連携する処理を作成しました。

次にサーバーレスSQLプール側の処理の概要について説明します。
下図のようにAzure Storageに格納したCSVファイルを参照する外部テーブルをAzure Synapse Analyticsで作成するまでは、専用SQLプールと同様です。
ただしテーブルはAzure SQLDBに作成し、そのテーブルにAzure Synapse Analytics備え付けのパイプラインを用いて外部テーブルのデータを連携する処理を作成しました。

専用SQLプール側との処理の差異は、サーバーレスSQLプール内にはデータを格納するテーブルを作成できないことによるものです。

この処理に使用するCSVファイルについては国税庁法人番号公表サイト(国税庁)の20240131版のデータの内、関東圏のものを加工して用いました。
合計のファイルサイズは70MB程度です。

●出典
“国税庁法人番号公表サイト”.全件データのダウンロード|国税庁,(https://www.houjin-bangou.nta.go.jp/download/zenken/),(2024年2月15日).

3.専用SQLプールのコストについて

専用SQLプールには、スケーリングという使用するサーバーのマシンリソース(CPUやメモリ、ネットワーク回線等)を調整できる機能があります。
今回の調査では一番低い設定の場合と、そこから1つ上げた設定の場合とでコスト関連の情報を取得しました。
その際に実施する処理は2章に記載の処理で、場合によって処理前にテーブルのデータをDelete文で全削除しています。
また、コストについては1日にその処理に必要な作業のみを実施し、後日、Azureのサブスクリプションから参照できるコストレポートで確認する方法を取りました。

コストレポートと処理の実行結果の一覧は以下の通りです。
一番低い設定であるスケーリングが「DW100c」は黄色の枠、スケーリング「DW200c」の赤の枠で囲んでいます。
それぞれ1回目は処理前にテーブル内にデータあり、2回目はデータなしとなっています。

コストレポートを参照すると、それぞれ1回目と2回目に300円近い差が見受けられます。
これについて、1章に挙げた「Azure Synapse Analyticsの価格」の内容を参考にすると、専用SQLプールの起動時間が合計で1時間経過した時点で費用が発生しているものと思われます。

スケーリングについては、処理時間に効果が見られましたが、(上記を前提にすると)コストに関しては大きな差は見られませんでした。
この差額の少なさについては、処理時間がそもそも短いという点が影響しているものと思われます。

最後に、検証中、専用SQLプールを1日中停止状態にしているにもかかわらず、1日114円程度のコストがかかっている期間(3/2~3)がありました。
このことから専用SQLプールを作成した場合、待機コストが発生していることが分かります。
なお、今回の調査では専用SQLプール内に作成したオブジェクトやデータ量を増減させても、このコストに変化が見られませんでした。

4.サーバーレスSQLプールのコストについて

サーバーレスSQLプールで実行する処理は、専用SQLプール同様、「処理前のテーブルデータ全削除+2章に記載の処理」になります。
今回の環境ではデータ格納先のAzure SQLDBを格安の設定としているため、Azure SQLDB側の費用はありませんでした。
また補足として、サーバーレスSQLプールにはスケーリングの機能がありません。
ただし、今回は行っていませんが、データ格納先のAzure SQLDBのスケーリングにより、処理速度の向上が図れるものと思われます。

コストレポートと処理の実行結果の一覧を以下の図に示します。
対象は青枠で囲ってあるものです。
1回目は処理前にテーブル内にデータあり、2回目はデータなしとなっています。

結果として、処理時間が専用SQLプールの一番低い設定を下回り、その分コストが安定して安い状態でした。
今回の処理においては、サーバーレスSQLプールの方が専用SQLプールに比べてコストパフォーマンスが高いという結果になりました。

5.その他調査でつまずいた点

今回の調査で外部テーブルを作成する際に起きた問題を紹介します。

今回、サーバーレスSQLプールで外部テーブルのデータとして使用したCSVファイルについて、同様に専用SQLプールで外部テーブルの作成を試みたもののエラーで参照ができませんでした。
調査の結果、データ内に「A ""B"" C」というような値があり、その内の「""」を取り外すことで参照できたことから、これが原因と考えました
原因はネイティブ外部テーブルとHadoop外部テーブルとのエスケープシーケンスの違いによるものと思われ、今回の調査ではファイルの中から削除する以外の方法が見つかりませんでした。
このため、サーバーレスSQLプールで外部テーブルを作成した実績があるCSVファイルだからといって、必ずしも専用SQLプールでも外部テーブルを問題なく作成できるものではないという点に注意が必要です。

6.おわりに

専用SQLプールは使用するマシンリソースを任意のタイミングで増やすことが可能です。
そのため、処理の実行時間の枠が決められていたり、実行期限が厳しかったりする場合や、大量データの処理を行いたい場合に柔軟に対応できることが強みです。

待機コストがかかる等、コストは高くなりますが、上記のようなケースは企業内でシステムを運用する中でしばしば見受けられることに加え、5章に記載のような事象から、安易にサーバーレスSQLプールから専用SQLプールへの切り替えができないこともあり、企業で使用する場合は、基本、こちらを選択するのが無難のように思えます。
ただし管理の手間がかかるため、そのコストも考慮する必要があります。

サーバーレスSQLプールは今回の調査では処理時間が専用SQLプール側の一番低い設定を下回り、別途Azure SQLDBを用意する必要もある上、Synapse側のマシンリソースの調整ができないことから、処理時間に大きな余裕がある場面に使用することが適切であるように見受けられます。
また、コスト面は低く抑えられる可能性があります。
データ量が32GBまでの場合、サーバレスで格安にAzure SQLDBが使用できることを踏まえると、個人や小規模や検証環境での利用にはサーバーレスSQLプールは大変便利です。

「どちらの方法がより良いのか」もしくは「専用SQLプールを使用するにあたってマシンリソースはどこまで上げるのが適切なのか」等は、利用用途によって異なります。
Azure Synapse Analyticsの導入でお悩みの場合、システムエグゼでは分析基盤構築のご支援をするサービスも提供していますので、お気軽にご相談ください。