【前書き】
SAP Cloud Platform(以下 SAP CP)にはNeo版とCloud Foundry版(以下 CF)が存在しており、利用できる機能がそれぞれ異なります。
SAP CP NeoはSAPによって運用されているサーバ上で稼働しています。
SAP CP CFは Amazon Web Services (AWS) や Microsoft Azure、Google Cloud Platform(GCP)などのサードパーティデータセンタプロバイダによって運用されます。
NeoとCFでは、利用できる機能や製品バージョンが異なります。
詳しくは
サービスカタログをご覧ください。
例えば、IoTサービスはCFでのみ利用可能。
SAP HANAは、NeoではHANA1.0、CFではHANA2.0が利用可能です。
Neoを利用するか、あるいはCFを利用するかは、ビジネス要件やユースケースによって選択します。
場合によっては、NeoとCFの両方を組み合わせる必要がある場合もあります。
本記事では、NeoのHANA1.0とCFのHANA2.0を連携し、Neo側からHANA2.0でしか利用できないはずの機能を呼び出してみました。
【実現したかったこと】
本来私が実現したかったことは、Neoのテーブル内に存在していたデータを加工することでした。
具体的には、FFT(高速フーリエ変換)を行いたかったのですが、
FFTを行うためのPAL関数はHANA2.0でのみ利用可能であることがわかりました。
NeoのHANAをCFのHANA2.0と組み合わせることで実現しました。
【実現のためのステップ】
- CF HANAに空テーブルの作成
まず、CF HANAに空のテーブルを作成します。
- Neo HANAとCF HANA間で仮想テーブル(データベースリンク)を作成する
次に、Neo HANAとCF HANAの間でデータベースリンクを作成し、Neo HANA側に仮想テーブルを作成します。
仮想テーブルに対してinsertやupdate操作を行うと、CF側のテーブルも連動して更新されます。
ちなみに、SAP HANAのデータベースリンクは、SDI(Smart Data Integration)を利用することで実現できます。
- SQLを実行し、仮想テーブルへのデータinsert
仮想テーブルへinsertしたレコードが、CF側の実テーブルにも反映されます。
- FFT関数をラップしたストアドプロシージャの作成
FFT関数を呼び出す処理をラップしたプロシージャを、CF HANA側へ作成します。
- 仮想プロシージャの作成
仮想プロシージャを作成することで、FFT関数がNeo HANA内でも利用できるようになります。
- 仮想プロシージャの呼び出し
仮想プロシージャを実行し、FFT関数でのデータ加工が実現できました。
XS JOBでプロシージャ呼び出しをクーロン化し、定期実行する仕組みにすることもできます。
【全体アーキテクチャ】
前述の図では単純化のために省略していましたが、データベースリンクを実現するためにSDI(Smart Data Integration)を利用します。
SDIは、
- Data Provisioning Server
- Data Provisioning Agent
から構成されます。Delivery UnitをNeo HANAにインポートすることで、DP Server機能を有効化することができます。
DP Agentは、LinuxマシンまたはWindowsマシンにインストールすることになります。
全体アーキテクチャは下図のようになります。
以下、設定手順を残します。
【目次】
- 事前準備
- DeliveryUnitのインポート
- DPAgentの設定
- SDI_USERとSDI_DP_AGENTの作成
- DPAgentにHANAの接続設定
- Agentの登録
- HANAアダプターの登録
- HANAへ接続
- リモートソースの作成
- 仮想テーブルの作成
- 仮想プロシージャの作成
【環境構成】
クラウド環境 :Cloud Foundry環境、Neo環境の2つ環境
DB :HANA(Neo環境)とHANA Service(Cloud Foundry環境)
PC/サーバ :1台(※ 今回は、WindowsPCとした)
【バージョン】
WindowsPCのエディション :Windows 10 Enterprise 2016 LTSB
PCのプロセッサ :Intel(R)Core(TM)i5-7300U CPU @ 2.60GHz 2.71GHz
PCの実装メモリ(RAM) :8.00GB
Neo環境のHANAバージョン :1.00.122.23.1548298510 (fa/hana1sp12)
Cloud Foundry環境HAHAバージョン :4.10.5
【1. 事前準備】
SAP社の
ソフトウェアダウンロードページで、以下のzipファイルとsarファイルをダウンロードします。
・「HANAIMDP03P_11-70000027.ZIP」
・「IMDB_DPAGENT200_03P_53-70002517.SAR」
上記の「HANAIMDP03P_11-70000027.ZIP」には、「HANA_IM_DP_03_11.tgz」が含まれています。
検索ワードに、「HANA DP Agent」と「SDI」を入力すると比較的に簡単に探すことができます。
- 検索入力欄に「HANA DP Agent」を入力する。
- 「IMDB_DPAGENT200_03P_53-70002517.SAR」リンクを選択する。
(※ ご自身のPCにあったもの選択してください。)
- SAPのS User IDを入力して、「IMDB_DPAGENT200_03P_53-70002517.SAR」をダウンロードする。
- 検索入力欄に「SDI」を入力する。
- 「SAP HANA SDI, SAP HANA smart data integration, Maintenance Product」を選択する。
- 「SAP HANA SDI 1.0」を選択する。
- 「COMPRISED SOFTWARE COMPONENT VERSIONS」を選択する。
- 「HANA DP 1.0」を選択する。
- 「HANAIMDP03P_11-70000027.ZIP」をダウンロードする。
7ZIPファイルを解凍して。「HANA_IM_DP_03_11.tgz」得る。
また、後ほどsapcarコマンドを使用する為、まだsapcar.exeをダウンロードしていなければ、ダウンロードします。(※ 任意)
【2. DeliveryUnitのインポート】
HANAのDP Server機能を有効化するために、Delivery Unitというライブラリを導入する必要があります。
事前準備でダウンロードした「HANA_IM_DP_03_11.tgz」をHANA Studioのファイルインポート機能を使用して、Neo環境のHANAにインポートします。
- HANA Studioの左上にあるメニュー「ファイル」を開いて、「インポート」を選択します。
- 「インポート」ウィザードのから「Delivery Unit」を選択します。
次へに進むと、「Import Through Delivery Unit」ウィザードが開くので、ご自身で作成したHANAスキーマを選択します。
- 「Import Through Delivery Unit」ウィザードの上端に「ファイル選択」があります。
「クライアント」を選択して、ファイル参照ボタンを押下します。
- 事前準備でダウンロードした「HANA_IM_DP_03_11.tgz」を選択します。
- しばらく待つと、「Object import simulation」にオブジェクト/パッケージが表示されます。
最後に完了ボタンを押すとインポートされます。
【3. DPAgentの設定】
事前準備でダウンロードしたファイルを実行して、DPAgentを作成した後、Agentを起動します。
- 適当なフォルダを用意してダウンロードファイル「IMDB_DPAGENT200_03P_53-70002517.SAR」を格納します。
- 以下のsapcarコマンドを実行して、ファイルを展開します。
sapcar -xvf IMDB_DPAGENT200_03P_53-70002517.SAR
- 解凍したフォルダの中にある「hdbsetup.exe」を実行します。実行後、「SAP HANA Data Provisioning Agent」画面が開きます。
- 「SAP HANA Data Provisioning Agent」には、以下のStep1~Step5まであります。
Step1「Define dataprovagent Properties」
画面左下にある「Install new SAP HANA Data Provisioning Agent」フォルダアイコンを選択して、任意のフォルダを指定します。
Step2「Define Installation Properties」
「Agent Unique Name」にAgent名、「Domain\Username」と「Password for Agent service user」には、ご自身で使用しているWindowsPCのアカウントを入力します。
例)
Agent Unique Name :「dpagent_dev」
Domain\Username for Agent service :「QUNIE\xxxx」
Password for Agnet serive user :「****」
Step3「Review & Confirm」
内容を確認してinstallボタンを押下します。
Step4「Install Software」
インストールするまで待ちます。
Step5「Finish」
インストールが成功したことを確認して、「Finish」ボタンを押下します。
- 上記、Step1で指定した任意のフォルダに移動して、以下のコマンドを実行します。
例)
cd C:\usr\sap\dataprovagent\bin
agentcli --configAgent
- コンソール画面に「DPAgent Configuration Tool」が表示されます。
オプション1~10,q,bの中から「2. Start or Stop Agent」を選択します。
続いて、「Start or Stop Agent」のオプション1~3,q,bの中から「1. Start Agent」を選択します。
【4. SDI_USERとSDI_DP_AGENTの作成】
HANAの接続設定の「Agent Admin HANA USer」の入力時に、必要となる以下の2ユーザを予め作成します。
・「SDI_USER」
・「SDI_DP_AGENT」
- HANA StudioのHANAスキーマをログオンして、「セキュリティー」の「ユーザ」を選択します。
- 「ユーザ」を右クリックで選択し、新規作成して、以下の2ユーザを作成します。
・「SDI_USER」
・「SDI_DP_AGENT」
- 作成したユーザ「SDI_USER」に、以下のRoles,Priviledgesを設定します。
・Granted Roles
「sap.hana.xs.ide.roles::CatalogDeveloper」
「sap.hana.xs.ide.roles::EditorDeveloper」
「sap.hana.xs.ide.roles::SecurityAdmin」
・System Priviledges
「AGENT ADMIN」
「ADAPTER ADMIN」
「CREATE REMOTE SOURCE」
・Application Priviledges
「sap.hana.im.dp.admin::Administrator」
- 作成したユーザ「SDI_DP_AGENT」に、以下のRoles,Priviledgesを設定します。
・Application Priviledges
「sap.hana.im.dp.proxy::AgentMessaging」
- HANAワークベンチにワークベンチにアクセスして、「SDI_USER」と「SDI_DP_AGENT」の初期パスワードを変更します。
【5. DPAgentにHANAの接続設定】
Neo環境のHANAとDPAgentが接続できるように「DPAgent Configuration Tool」からHANAの接続情報を入力します。
- 「DPAgent Configuration Tool」のオプションの「6.SAP HANA Connection」を選択します。
続いて、「SAP HANA Connection」のオプション「1.Connect to SAP HANA on Cloud(HTTP/HTTPS)」を選択します。
- 以下のStepを実行して接続設定を行います。
Enter Use HTTPS[true]:Valid optionstrue|false
⇒true
Entry Host Name[xxxx.jp1.hana.ondemand.com]:
⇒[ご自身で作成したHANAホスト]
例)
xxxx.jp1.hana.ondemand.com
Enter Post Number[443]:
⇒443
Enter Agent Admin HANA User[SDI_USER]:
⇒SDI_USER
Enter Agent Admin HANA User Password: (*****)
⇒[ご自身で変更したパスワード]
Enter Agent Admin HANA User Password: (*****) (confirm)
⇒[ご自身で変更したパスワード]
Enter Use HTTP Proxy Server[false]: Valid options: true|false
⇒false
Enter Agent XS HANA User Name[SDI_DP_AGENT]:
⇒SDI_DP_AGENT
Enter Agent XS HANA User Password: (*****)
⇒[ご自身で変更したパスワード]
Enter Agent XS HANA User Password: (*****) (confirm)
⇒[ご自身で変更したパスワード]
【6. Agentの登録】
「DPAgent Configuration Tool」からDPAgentにHANAアダプターを登録します。
- 「DPAgent Configuration Tool」のオプションの「7.Agent Registration」を選択します。
続いて、「Agent Registration」のオプション「1.Register Agent」を選択します。
- 以下のStepを実行してAgentの登録します。
Enter Agent Name[dpagent_dev]:
⇒dpagent_prod
しばらく待つとAgentが登録されます。
【7. HANAアダプターの登録】
Neo環境のHANAとDPAgentが接続できるように「DPAgent Configuration Tool」からHANAアダプターを登録します。
- 「DPAgent Configuration Tool」のオプションの「8.Adapter Registration」を選択します。
続いて、「Adapter Registration」のオプション「1.Display Adapters」を選択します。
- 現在登録されているアダプターを確認します。HanaAdapterが「No」となっていることが確認できます。
- 「Adapter Registration」のオプション「2.Register Adapters」を選択します。続いて、「HanaAdapter」を入力します。
- もう一度、「1.Display Adapters」を選択して、HanaAdapterが「Yes」になっていることを確認します。
【8. HANAへ接続】
「SAP HANA Data Provisioning Agent Configuration」を起動して、Neo環境のHANAと接続します。
- 「SAP HANA Data Provisioning Agent Configuration」の「Connect to HANA」ボタンを押下します。
- 「Enter HANA server connection information」ウィザードにHANA接続情報を入力します。
HANA Hostname :[ご自身で作成したHANAホスト]
HANA port :443
HANA Agent Admin User :SDI_USER
HANA Agent Admin PAssword :[ご自身で変更したパスワード]
- ウィザードの下端にある「Connect」押して、AgentとNeo環境のHANAを接続します。
【9. リモートソースの作成】
Neo環境のHANAのRemote SourcesにCloud Foudry環境のHANA Serviceを指定して、Neo環境のHANA DBからCloud Foundry環境のHANA DBを参照できるようにします。
- はじめに、Cloud Foundry環境の「SAP HANA Service Dashboard」を開いて、「Endpoints」を確認します。
「Details」セクションの下端に「Endpoints」があります。
例)
Direct SQL Connectivity:[ご自身で作成したHANAホスト]:[ご自身で作成したHANAポート]
- HANA StudioでNeo環境のHANAスキーマを選択します。「Provisioning」を開いて、「Remote Sources」を選択します。
右クリックから「New Remote Source」を選び新規作成します。
- 先ほど、Cloud Founrdy環境のHANA Serviceで確認した「Endpoints」とプロパティ、SSL設定、アカウントを「Configrations」入力します。
Configrations
-Database
Host* :[ご自身で作成したHANAホスト]
Port Number* :[ご自身で作成したHANAポート]
JDBC Connection Properties :encrypt=true;validateCertificate=true
-Connections
Enable SSL encryption :true
Credentials
Credentials Mode* :Technical user
-Credential
User(Case Sensitive) :[ご自身で設定したHANAユーザ名]
User(Case Sensitive) :[ご自身で設定したHANAユーザのパスワード]
-Credential
User(Case Sensitive) :[ご自身で設定したHANAユーザ名]
- 「Source Name」を入力して保存します。
【10.仮想テーブルの作成】
作成したRemote Sourceを選択して、Cloud Foundry環境のHANA DBを参照して、Neo環境のHANA DBに仮想テーブルを作成します。
- 「Provisioning」->「Remote Sources」を選択して、先ほど作成したRemote Sourceを開きます。
Cloud Foundry環境のHANA DBがあることが確認できます。
- HANA DBのスキーマを開いてい、テーブルを選択します。右クリックで「Add as Virtual Table」を選択して仮想テーブルを作成します。
- 「Create Virtual Table」ウィザードで仮想テーブルの名前を付けます。仮想テーブルを入れるスキーマを選択して、「作成」ボタンを押します。
- 仮想テーブルが作成されていることを確認します。
【11. 仮想プロシージャの作成】
Neo環境のプロシージャからCloud Foundry環境のHAHAプロシージャを呼びたい場合、仮想プロシージャを作成することによって、呼び出すことが可能です。サンプルのDDLを以下に示します。
CREATE VIRTUAL PROCEDURE "[Your Schema]"."[Your Virtual Procedure]"(OUT param_0 TABLE (__DP_RETURN_CODE__ TINYINT)) CONFIGURATION '{
"__DP_UNIQUE_NAME__": "\"[Your Schema]\".\"VIBRATION_FFT\"",
"__DP_HAS_NESTED_PARAMETERS__": false,
"__DP_USER_DEFINED_PROPERTIES__": {},
"__DP_INPUT_PARAMETER_PROPERTIES_": [],
"__DP_RETURN_PARAMETER_PROPERTIES_": [],
"__DP_VIRTUAL_PROCEDURE__": true,
"__DP_HAS_INTERNAL_OUTPUT_PARMETER__": true,
"__DP_DEFAULT_OUTPUT_PARAMETER_INDEX__": 0
}' AT "[Your Virtual Procedure]"
作成した仮想プロシージャは、以下のSQL文で実行することができます。
CALL "[Your Schema]"."[Your Virtual Procedure]"(NULL);
【まとめ】
SDIを使用して仮想テーブルを作成することで、Neo環境のHANA DBのデータをCloud Foundry環境のHANA DBに登録することができるようになりました。また、仮想プロシージャを登録するとNeo環境のプロシージャからCloud Foundry環境のプロシージャを呼び出すことができました。