SAP Datasphereは、S/4HANAをはじめ、様々なシステムのデータを集約したデータ分析のための基盤を実現する DWH ソリューションです。そのため、様々なデータマネージメントシステムとの連携が求められており、幅広く利用されているRDBMSであるMicrosoft社のSQL Serverとの連携は非常に重要な機能要素となっています。
Datasphereのデータ連携の機能にはソースに応じて「仮想アクセス」、「リアルタイムアクセス」、「スナップショット」といった方式を提供しています。本ブログでは、Microsoft社のSQL Server(以下MSSS) データベースとSAP Datasphre (以下、Datasphere) との「リアルタイムアクセス」によるデータ連携の設定について解説します。
本ブログで想定する MSSS とDatasphere の連携のシステム構成図は下記の通りです。
図1. トリガーベースレプリケーションシステム構成
DP Agentは、ソースシステムからMSSSのテーブルトリガーを利用して収集した更新データを取得するためのエージェントソフトウエアです。DP Agent にはWindows 64Bit版、Linux x86 64Bit版、Linux Power版が提供されていますが、本ブログではWindows64Bit版を前提に解説いたします。
設定の流れは以下になります。
MSSS側の環境設定はこちらでは触れません。検証に使用できるデータベースサーバ、任意のデータベース(本ブログ内ではUSERDB)を準備いただき、任意のテーブル(EMPLIST)をデータベースオーナーで作成しておいてください。
DP Agent には、サポートされている Java runtime環境 (JRE) が必要です。SAP製 JVM はDP Agentのインストール パッケージにバンドルされていますが、サポートされている別の JRE を使用することもできます。サポートされている Java のバージョンについては、SAP PAM ( サーティフィケーション情報) をご参照下さい。
DP Agentは SAP Software Download Centerより、最新のSoftwareを入手してください。「HANA DP Agent 2.0」を条件に検索し、インストールするOSに適した最新のSupport Package、及びPatch を選択するようにして下さい(本ブログの執筆時点で SP07 Patch 30 (2.7.3) for HANA DP AGENT 2.0 が最新です)。
ダウンロードが済みましたら、任意のフォルダで解凍し、hdbsetup.exe を管理者で実行します。
図2. ダウンロード / 解凍したファイルと、インストーラ
インストールフォルダを指定し、以下の必須パラメータを指定します。
図3. DP Agentのインストール画面
入力した情報を確認の上、Installを実行します。Installが完了しましたら、エージェントの起動を確認します。Windowsの場合はOS標準の「サービス」ツールを起動します。DP Agentは SAP_HANA_SDI_Agent_Service_Daemon_”指定したDP_Agent名” という名称でサービス登録されます。こちらで Status が 「Running」となっていれば正常に起動していることが確認できます。
図4. Windowsのサービスによる、DP Agentのステイタス確認
Datasphereを起動します。
左メニューから「システム」>「設定」を選択します。オンプレミスエージェント のカテゴリに表示される「+」タイル(新しいデータプロビジョニングエージェントの作成)をクリックし、新規のDP Agentの登録を開始します。
図5. データプロビジョニングエージェントの追加
任意の新しいDP Agentの登録名(先のWindowsにインストールしたDP Agentの名前)を入力し、作成ボタンをクリックします。
図6. エージェント名の指定
エージェント設定の画面が開きますが、ここでは特に入力する必要はありません。こちらで表示される情報が以後の手順で必要になります。
注意事項!
下で表示されている画面の情報を、以降の手順(DPAgent Configuration Tool)で参照する必要があるので、この画面を閉じずにおいておくか、必ず画面の内容を記録しておいてください。誤って閉じた場合は、作成されたタイルをクリックすることで表示させることができますが、毎回パスワードが変更されるので、以降の入力と一致するように注意してください。
この Datasphere の画面をそのままに次の手順に進んでください。
図7. DPAgent Configuration Toolで参照する入力値
DP AgentをインストールしたホストでWindows コマンドプロンプトを「管理者として実行」します。
C:\usr\sap\dataprovagent\bin(デフォルトのインストールフォルダの場合)にてDP Agent設定ツール(CUI ツール)を実行します。以下のコマンドを実行してください。
agentcli.bat --configAgent
DPAgent Configuration Tool のログイン画面が表示されます。まず管理者用のパスワードを設定するために2を入力して「2. Create New Admin User」を選択、Admin User Nameはデフォルトの[Administrator]のまま(何も入力せず)Enterキーを押します。このAdministratorはWindowsの管理者ユーザとは関連はなく、DP Agent用の管理者ユーザになります。以降でパスワードの設定と確認を行ってください。
図8. DPAgent Configuration Tool へのログイン
設定が完了したら、「1. Login」を選択し、設定したパスワードでAdminstratorでログインします。DPAgent Configuration Tool のメニューから 「7. SAP HANA Connection」を選択し、次に「2.Connect to SAP Datasphere via JDBC」を選択します。
図9. DPAgent Configuration Tool による設定
以降、対話形式の設定となりますので、以下の入力値を与えてください。なお、※で示された値を「図 DPAgent Configuration Toolで参照する入力値」で示された画面から入手してください。なお、パスワード文字列はCut & Pastすることができますが、入力は表示されませんので、慎重に進めてください。
図10. DPAgent Configuration Tool 設定項目
「b. Back」メニューで 図9. DPAgent Configuration Toolのメニューまで戻り、「2. Start or Stop Agent」を選択し、「2. Stop Agent Using Service」を実行したのち、「1. Start Agent Using Service」を実行してDP Agentを再起動します。この仮定で再度ログインの画面になりますので、Administratorでログインして下さい。
図11. Start or Stop Agent による停止と起動(再起動)
図9. DPAgent Configuration Toolのメニューに戻り、「1. Agent Status」で、DP Agentの Status がRunningになっていることを確認します。
図12. DP Agentのステイタス画面
図7. DPAgent Configuration Toolで参照する入力値 のブラウザ ウィンドウに戻り、「閉じる」ボタンをクリックします。DP Agentと接続するために、DatasphereのIP許可リストに、DP AgentをインストールしたホストのIPアドレスを入力します。「IP許可リストタブ」>「信頼されたIP」を選択し、IPアドレスを追加して、保存します。
図13. DP Agentと接続するためのIP許可リスト
「データ統合」タブを選択すると、作成したデータプロビジョニングエージェントのタイルが表示されています。エージェント名の下に「CONNECTED」が表示されれば、Windows上のDP Agent との接続が確立されます(少し時間をおいてから、「エージェントをリフレッシュ」ボタンをクリックして下さい)。
図14. DP Agentの接続確認
SAP Datasphereから MSSS へ接続するためのJDBCドライバを入手します。こちらの詳細はMicrosoft社の指示に準じてください。対応するJDBCドライバは SAP PAM ( サーティフィケーション情報) をご参照下さい。本資料では mssql-jdbc-9.2.0.jre8.jar を使用しています。
入手したJDBCドライバを、C:\usr\sap\dataprovagent\lib(デフォルトのインストールフォルダの場合)に配置します。「図14. DP Agentの接続確認」の画面で、登録したDP Agentのタイルのメニューから「編集」を選択します。
図15. DP Agentの接続を編集
MssqlLogReaderAdapterを選択し「閉じる」をクリックします。
注意:「保存」ボタンはアクティブになりませんが、選択したエージェントアダプタは「閉じる」で保存されます。
図16. MSSS アダプタの有効化
「閉じる」ボタンを押して、しばらくすると、設定したDP Agent のタイルのMSSS の表示が強調され、有効化を確認する事ができます。
図17. MSSS アダプタの有効化確認
MSSS のトリガー ベースのレプリケーションを使用するためのアクセス許可と権限を付与します。必要な処理のテンプレートが<DPAgent_root> /Trigger/の下にmssql_trigger_based_init.sql として提供されています。以下にそれを引用したサンプルを掲載します。
メモ帳等のエディタにて、以下の箇所( ’ ’ で囲まれた部分)をご自身の環境に準じて編集し、MSSSで実行してください。なお、本サンプルでは最小限の権限設定を行うため、個別のテーブル(EMPLIST)を指定した権限設定となっております。汎用的な権限設定を行う場合は mssql_trigger_based_init.sql にあるOption#1の使用をご検討下さい。
sqlcmd -S 'SQL Serverホスト名',1433 -U 'データベース管理者' -P 'パスワード' --データベースオーナーでログイン
USE 'データベース名'; --複写するテーブルのデータベース名を代入
CREATE LOGIN SDI_USER WITH PASSWORD = 'パスワード'; --SDI_USER用の任意のパスワード代入
CREATE USER SDI_USER FOR LOGIN SDI_USER;
GO
GRANT CREATE TABLE TO SDI_USER; --レプリケーション用の設定、権限を、SDI_USERに付与
GO
CREATE SCHEMA SDI_USER; --レプリケーション用オブジェクト用スキーマ作成
GO
ALTER AUTHORIZATION ON SCHEMA::SDI_USER to SDI_USER; --スキーマにおけるすべてのコントロール権限の付与
GRANT SELECT ON dbo.EMPLIST TO SDI_USER; --レプリケーション対象のテーブルにのみ、SDI_USERに読み取り権限付与
GRANT ALTER ON dbo.EMPLIST TO SDI_USER; --レプリケーション対象のテーブルにのみ、CREATE DML TRIGGER 権限付与
GRANT CREATE PROCEDURE TO SDI_USER; --プロシージャの作成権限をSDI_USERに付与
GRANT ALTER ANY DATABASE DDL TRIGGER TO SDI_USER; -- DDL TRIGGER 権限をSDI_USERに付与
GO
USE [master];
GRANT VIEW SERVER STATE TO SDI_USER; -- レプリケーション処理時にトランザクションIDを取得するための設定
Go
図18. mssql_trigger_based_init.sqlをもととしたサンプル
以上で、設定は完了です。
ここまでの手順で設定した、MSSSへの接続を、Datasphereで利用してみましょう。
まずは、Datasphereの「接続」設定を行います。左メニューの「接続」を選択し、「作成」ボタンをクリックします。
図19. 新規の接続を作成
接続タイプの中から Microsoft SQL Serverのタイルをクリックします(右上にあるテキストボックスに「sql」と記入すると該当するタイルがフィルタできます)。
図20. 接続タイプの選択
MS SQL Serverに接続するために必要な情報を記入します。以下の項目は必須です。
図21. 接続の作成
次の画面の接続プロパティは必要に応じて設定します。
最後に設定した接続の名称(この例ではRealtimeREP_SQLServer2019)を任意に入力し「接続を作成」をクリックします。
設定が完了したら作成した接続がリストされます。正常に作成されました」のメッセージを確認して下さい(メッセージは自動的に消滅しますのでご注意ください)。
図22. 作成された接続の確認
Datasphereの左メニューから「データビルダアイコン」を選択します。
新しいグラフィックビュー タイルをクリックします
図23. 新しいグラフィックビューの作成
左ペインで「ソース」タブをクリックし、「接続」アイコンを選択すると、前の手順で作成した接続名がリストされます。
「dbo(スキーマ)」「Table」の順に展開し、レプリケーション対象のテーブルが表示されるのを確認します。このテーブルをワークスペースへDrag&Dropします。
図24. MSSSのテーブルの確認とビューの作成
ワークスペースにテーブルを配置すると、「テーブルのインポート」が表示されます。これはリモートデータソースであるMSSSのテーブルを、Datasphereの「仮想テーブル」として定義することを意味しており、テーブルデータ(レコード)をインポートするわけではありません。仮想テーブルに関してはこちらの「データ仮想化(フェデレーション)」をご参照下さい。この仮想テーブルの名前を指定し「インポートおよびデプロイ」を実行します。
図25. 仮想テーブルの名前の指定
ワークスペースに配置されると、これを参照するビューオブジェクトと自動的に連結されます。
配置した仮想テーブルをクリックしてコンテキストメニューから「データビューワ」を選択し、データが参照できるか確認します。このデータはリアルタイムにMSSSから取得したデータです。
図26. MSSSのテーブルデータのプレビュー
「保存」アイコンをクリックし、連結されたビューに名前をつけて保存します。ダイアログボックスに、任意のビュー名を入力します(ここではV_EMPLIST)。 続いて「デプロイ」アイコンをクリックし、有効化します。デプロイを開始したメッセージに続き、デプロイが完了したことを知らせるメッセージが確認できたら完了です。メッセージは自然消滅しますので注意してください。
図27. VIEWの保存とデプロイ
ここで作成されたビューは仮想テーブルとして利用する事ができますが、Datasphereの高速なパフォーマンスを利用するためにはデータをDatasphereに複製する必要があります。以下の手順でデータをMSSSから複製します。
Datasphereのデータ連携の機能には、「仮想テーブル」、「スナップショット」、「リアルタイムアクセス」があることは最初に触れましたが、ここで「スナップショット」と「リアルタイムアクセス」を選択する事ができます。前者はバッチによる周期的なデータの転送、後者はソース側の更新を契機にDatasphereのデータが同期されます。今回はトリガーベースのレプリケーションを利用しますので、「リアルタイムアクセス」を使ったデータの同期を行います。
左メニューから「データビルダ」を選択します。ここまでの手順で作成した仮想テーブル(タイプ:リモートテーブル)と、それを参照するビューがリストされています。このうち仮想テーブルの左端のチェックボックスにチェックを入れ、「編集」アイコンをクリックします。
図28. 仮想テーブルからリアルタイムアクセスへの属性変更
仮想テーブルの属性画面が表示されるので、「リモート」タブを選択します。「データアクセス」の項目には「リモート」が表示されており、これはデータの実体がDatasphereにはなく、リモートソースであるMSSSの仮想テーブルであることを示しています。「テーブルの複製」ボタンをクリックし、表示される「リアルタイムアクセスを有効化」を選択します。これにより仮想テーブルのデータをMSSSからDatasphereに複製し、実体化します。
図29. 仮想テーブルからリアルタイムアクセスへの変更
「…completed」のメッセージが表示されたらレプリケーションの設定が完了です(メッセージは自然消滅します)。
図30. リアルタイムアクセスの設定完了
リフレッシュアイコンをクリックします。「データアクセス」が「(複製済)リアルタイム」に、ステータスが「有効」になっていることが確認できればデータがDatasphereに複製されたことを示しています。
図31. リアルタイムアクセスのステイタス確認
SQL Serverを停止してもDatasphereでテーブルが参照できることも確認できます。また、MSSSを起動してデータを更新し、Datasphere側にも反映される(逐次レプリケーション)ことを確認してみて下さい。
以上で、MSSSのデータとDatasphereの「リアルタイムアクセス」によるデータ連携の設定は完了です。作成されたテーブルは、以降Datasphereのモデル作成に利用する事が出来、仮想テーブルより優れたパフォーマンスで処理する事が可能になります。