データ分析効率化の秘訣:SAS ViyaとAzure Synapseの高速データ転送方法の紹介

0

1.背景

データ管理と分析の世界では、効率的かつ迅速なデータの転送と書き込みは極めて重要です。特に大規模なデータウェアハウスサービスを利用する際には、このプロセスの最適化が不可欠です。Azure Synapse Analyticsは、そのようなサービスの一つとして注目を集めており、SAS Viyaを使用する多くの企業やデータアナリストも、より効率的なデータハンドリングを追求しています。

SAS ViyaのユーザーはSAS/ACCESS to Microsoft SQL Serverを使用してAzure Synapseにデータを転送および書き込む際に、より高いデータ書き込み効率と転送速度を求めるのは当然です。データ処理能力をさらに強化し、書き込み効率を高めるために、SAS Access to SynapseのBulkLoad機能は非常に優れた選択肢です。BulkLoad機能はデータの書き込み速度を大幅に向上させるだけでなく、Azure Data Lake Storage Gen 2(以下、ADLS2と称する)を利用して、安定かつ安全なデータストレージおよび転送環境を提供します。

ただし、BulkLoad機能を使用する際にはADLS2の設定と構成が関わってくるため、構成および使用のプロセスが複雑に感じられたり、疑問が生じたりすることがあります。このブログの目的は、管理者およびユーザーに対して、明確なステップバイステップの設定プロセスを提供し、構成の過程で見落とされがちなキーポイントを強調することで、設定時の参考になるようにすることです。

以下は本記事内容の一覧です。読者は以下のリンクをで興味のあるセクションに直接ジャンプすることができます。

2.Bulkload機能について

3.BULKLOAD機能を利用するためのAzure側で必要なサービスの作成
3-1.Azure Data Lake Storage (ADLS) Gen2のストレージアカウントの作成
3-2.ストレージアカウントのデータストレージコンテナの作成
3-3.ストレージアカウントの利用ユーザー権限の設定

3-4.データ書き込み用のSASコードの実行
3-5.Azureアプリの設定

4.SAS Viya側の設定とAzure Synapseへの接続
4-1.SAS Studioでの設定
4-2.Azure SynapseのSQLデータベースをSASライブラリとして定義
4-3.Azure Synapseへデータの書き込み

2.Bulkload機能について

なぜSAS ViyaがBulkload機能を使用してAzure Synapseに効率的にデータを書き込む際にADLS2サービスが必要なのか、そしてそのプロセスがどのように行われるのかを説明します。

Azure Synapse Analyticsは、柔軟性が高く、高いスループットのデータ転送を可能にするために、COPY INTOコマンドを提供しています。SAS ViyaがAzure Synapse Analyticsと接続するとき、この機能を利用してデータを効率的にインポートするために、SASのBulkload機能は最初にファイルをMicrosoft Azure Data Lake Storage Gen2(ADLS Gen2)ストレージアカウントにロードします。その後、SQL DWの"COPY INTO"コマンドを使用して、ADLS Gen2からデータを読み取り、それをDBMSテーブルにロードします。

SASはこの部分の機能を活用し、ADLS2サービスを介してAzure Synapse Analyticsへの効率的な読み書きを実現しています。そのため、ユーザーがBulkload機能を使用する際にはADLS2サービスも必要になります。

3.BULKLOAD機能を利用するためのAzure側で必要なサービスの作成

3-1.Azure Data Lake Storage (ADLS) Gen2のストレージアカウントの作成化

Azureポータル上で、ストレージアカウントを検索し、「作成」ボタンをクリックして、新規作成の画面を開きます。ここで二つの重要な設定をする必要があります。

一つは、「基本」ページのパフォーマンスの項目で「Premium」を選択し、「Premiumアカウントの種類」で「ブロックBLOB」を選択することです。

もう一つは「詳細設定」のページで、「階層型名前空間を有効にする」をチェックすることです。

残りの設定はデフォルトのままで、作成ボタンをクリックします。これで、ADLS2のストレージアカウントの作成は完了となりました(参考ドキュメント)。

3-2.ストレージアカウントのデータストレージコンテナの作成

作成したストレージアカウントを開いて、左側のメニューから「コンテナー」をクリックし、データストレージコンテナの作成画面を開きます。画面上部にある「+コンテナー」ボタンをクリックすると、右側に「新しいコンテナー」の画面が表示され、そこで名前を入力し、「作成」ボタンをクリックします。(参考ドキュメント)

3-3.ストレージアカウントの利用ユーザー権限の設定

ストレージアカウントの左側メニューから「アクセス制御(IAM)」を選択し、表示された画面の真ん中の「ロールの割り当ての追加」をクリックすると、ロールの割り当て画面が表示されます。ここで、SAS ViyaからAzure Synapseにデータをロードする際に利用するユーザーに対して、以下の二つロールの付与をそれぞれ実施します。

・ストレージBLOBデータ共同作成者
・ストレージキューデータ共同作成者

ここで「ストレージBLOBデータ共同作成者」のロール付与を例として挙げます。

まず「ロール」画面で「ストレージ BLOB データ共同作成者」で検索、そして選択し、「次へ」ボタンをクリックします。

そして、「メンバー」画面で、「+メンバーを選択する」ボタンをクリックし、右側に表示される画面上で利用者のユーザーIDで検索し、「レビューと割り当て」ボタンをクリックします。そして、同様な操作で、同じユーザーに対して「ストレージキューデータ共同作成者」ロールを割り当てます。

3-4.外部からストレージアカウントにアクセスするためのAzureアプリの作成

Azureポータル上で、「Microsoft Entra ID」と検索し、サービスを選択します。そして、左側メニューから「アプリの登録」をクリックすると、既に登録したアプリの一覧画面が表示されます。Azure Synapseと繋ぐための、新しいアプリを登録するために、上の「+新規登録」ボタンをクリックします。

Azureアプリの登録画面が表示されたら、「名前」のところにアプリ名を入力し、サポートされているアカウントの種類では「この組織ディレクトリのみに含まれるアカウント(SASのみ – シングルテナント)」をチェックします。最後に、登録ボタンをクリックし、完了となります。

3-5.Azureアプリの設定

作成したAzureアプリを開いて、まず画面の左側のメニューから、「認証」をクリックします。

次は表示された画面を一番下までスクロールし、詳細設定中の「パブリック クライアント フローを許可する」を「はい」にして、保存します。

次は、左側のメニューから「APIのアクセス許可」を選択します。 そして、画面の中の「+アクセス許可の追加」をクリックし、右側に表示された画面から、「Azure Data Lake」を選択し、その次に表示される画面内の「user_impersonation」をチェックし、「アクセス許可の追加」をクリックします。

最後に「管理者の同意を与えます」をクリックします。注意事項としては、Azureの権限が足りないと、ボタンはグレーアウトになるので、その場合は、利用されているAzure環境の管理者へ連絡し、権限を付与をしてもらう必要があります。

権限付与ができると、右側の状態の列に「xxxに付与されました」と表示されます。

これで、Azure側の設定と準備作業がすべて完了となります。

4.SAS Viya側の設定とAzure Synapseへの接続

4-1.SAS Studioでの設定

SAS Studioで「オプション」メニュー→Autoexec fileを開き、下記の内容を追加し、保存します。

options AZURETENANTID="xxx-xxx-xxx-xxx-xxx";  /* #1 */
#1:AZURETENANTIDには、ご利用のAzureアカウントのTenant IDを設定します。
確認方法としてはAzureポータルから<a href="#step5">「3-5.Azureアプリの設定」</a>で作ったAzureアプリを開き、「概要」ページでは「ディレクトリ(テナント)ID」と「アプリケーション(クライアント)ID」の2項目があります。「ディレクトリ(テナント)ID」はAZURETENANTIDの値として使用します。アプリケーション(クライアント)IDは次のステップで実際にSASコードを実行する際に使用します(<a href="https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-how-to-find-tenant" target="_blank" rel="noopener">参考ドキュメント</a>)。
 
<img class="alignnone size-middle wp-image-4098" src="https://blogs.sas.com/content/sasjapan/files/2023/11/pic12.png" alt="" width="720" height="257" />
 
<h3><a id="step4-2"></a><strong>4-2.Azure SynapseのSQLデータベースをSASライブラリとして定義</strong></h3>
以下のSASのコードでAzure SynapseをSASライブラリとして定義し、実行します
<pre lang="sas" escaped="true">libname synapse sqlsvr noprompt="uid=xxx;
   pwd=xxx; dsn=azure_synapse;" 
stringdates=yes
bulkload=YES 
BL_FILESYSTEM="{file_system}" /* #1 */
BL_ACCOUNTNAME="{account_name}"  /* #1 */
BL_APPLICATIONID="{application_id}" /* #2 */ 
BL_IDENTITY='Shared Access Signature'
BL_DNSSUFFIX="{dns_suffix}" /* #1 */
BL_SECRET="{secret}"; /* #3 */

#1:こちらの値は、Azure Data Lake Storage (ADLS) Gen2のストレージアカウントのURLから取得します(参考ドキュメント)。
フォーマット:https:// {account_name}.{dns_suffix}/{file_system}
例えば、ストレージアカウントの「エンドポイント」のページの「Data Lake Storage」の所に書いてあるURLはhttps://bulkaccount.dfs.core.windows.net/bulkの場合、#1の部分のSASコードは以下になります:

BL_FILESYSTEM="bulk" 
BL_ACCOUNTNAME="bulkaccount" 
BL_DNSSUFFIX="dfs.core.windows.net"

#2:「4-1.SAS Studioでの設定ステップ」で確認した「アプリケーション(クライアント)ID」の項目があります。それをBL_APPLICATIONIDに指定します。

#3:「3-1.Azure Data Lake Storage (ADLS) Gen2のストレージアカウントの作成」で作成したストレージアカウント画面を開き、左メニューから「Shared Access Signature」を選択し、右画面の「Allowed resource types」の項目をチェックし、有効期限を長めに設定した上で、一番下の「Generate SAS and connection string」をクリックします。

生成されたSASトークンをコピーし、BL_SECRETとして利用します。
BL_SECRET="?sp=rwl&st=2021-02-03T20:22:30Z&se=2021-12-31T20:22:00Z&sv=2019-12-12&sr=c&sig=xxxxxxxxxxx”

4-3.Azure Synapseへデータの書き込み

Azure SynapseをSASライブラリとして定義する部分のコードを実行したら、最後は任意のAzure Synapseへテーブルを書き込むためのSASコードを実行します。例として、以下のコードで説明します。

data synapse.cars;
set sashelp.cars;
run;

最初の一回目の実行は、下記のメッセージが表示されます。

ERROR: Authorization Pending user-interaction
ERROR: To sign in, use a web browser to open the page 
https://microsoft.com/devicelogin and enter the code <CODE> to authenticate.

上記のメッセージの指示通りに、https://microsoft.com/deviceloginのページにログオンした後、必要な認証が行われます。

これで認証のために必要な情報がファイル.sasadls_userid.jsonに保存されますので、二回目以降の実行には認証情報が不要になります。コードを実行したら、SAS Studioの左側のライブラリ画面上でテーブルが転送されたことが確認できます。

最後に、Azureポータル上でストレージアカウントを開けば、転送されたテーブルも確認できます。

これで、BulkloadでSAS ViyaからAzure Synapseへデータ転送するための作業がすべて完了になりました。

5.最後

以上、SAS ViyaとAzure Synapseを用いてデータ分析業務を高効率化する方法の紹介でした。この情報が、データ分析の効率化を目指す皆さんにとって、少しでもお役に立てれば幸いです。

Share

About Author


SAS Viya Business Promotion & OSS Innovation推進室 Analytical Consultant

半導体業界でデータ分析による異常予兆検知システムを開発した経験を持つ。現在、業務課題解決ためにAIプラットフォーム上にオープンソースなどを活用したアナリティカルソリューションの構築や提案を担当している。さらに、アナリティクスハッカソンなどのイベントの企画に従事している。

Leave A Reply

Back to Top