Skip to Content
Technical Articles

SDIを使用してCloud Foundry環境のHANA DBとNeo環境のHANA DBを接続する方法

【前書き】

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と組み合わせることで実現しました。


【実現のためのステップ】

  1. CF HANAに空テーブルの作成
    まず、CF HANAに空のテーブルを作成します。
  2. Neo HANAとCF HANA間で仮想テーブル(データベースリンク)を作成する
    次に、Neo HANAとCF HANAの間でデータベースリンクを作成し、Neo HANA側に仮想テーブルを作成します。
    仮想テーブルに対してinsertやupdate操作を行うと、CF側のテーブルも連動して更新されます。
    ちなみに、SAP HANAのデータベースリンクは、SDI(Smart Data Integration)を利用することで実現できます。
  3. SQLを実行し、仮想テーブルへのデータinsert
    仮想テーブルへinsertしたレコードが、CF側の実テーブルにも反映されます。
  4. FFT関数をラップしたストアドプロシージャの作成
    FFT関数を呼び出す処理をラップしたプロシージャを、CF HANA側へ作成します。
  5. 仮想プロシージャの作成
    仮想プロシージャを作成することで、FFT関数がNeo HANA内でも利用できるようになります。
  6. 仮想プロシージャの呼び出し
    仮想プロシージャを実行し、FFT関数でのデータ加工が実現できました。
    XS JOBでプロシージャ呼び出しをクーロン化し、定期実行する仕組みにすることもできます。

 


【全体アーキテクチャ】

前述の図では単純化のために省略していましたが、データベースリンクを実現するためにSDI(Smart Data Integration)を利用します。

SDIは、

  • Data Provisioning Server
  • Data Provisioning Agent

から構成されます。Delivery UnitをNeo HANAにインポートすることで、DP Server機能を有効化することができます。
DP Agentは、LinuxマシンまたはWindowsマシンにインストールすることになります。

全体アーキテクチャは下図のようになります。

以下、設定手順を残します。


【目次】

  1. 事前準備
  2. DeliveryUnitのインポート
  3. DPAgentの設定
  4. SDI_USERとSDI_DP_AGENTの作成
  5. DPAgentにHANAの接続設定
  6. Agentの登録
  7. HANAアダプターの登録
  8. HANAへ接続
  9. リモートソースの作成
  10. 仮想テーブルの作成
  11. 仮想プロシージャの作成


【環境構成】

クラウド環境 :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」を入力すると比較的に簡単に探すことができます。

  1. 検索入力欄に「HANA DP Agent」を入力する。
  2. 「IMDB_DPAGENT200_03P_53-70002517.SAR」リンクを選択する。
    (※ ご自身のPCにあったもの選択してください。)
  3. SAPのS User IDを入力して、「IMDB_DPAGENT200_03P_53-70002517.SAR」をダウンロードする。

 

  1. 検索入力欄に「SDI」を入力する。
  2. 「SAP HANA SDI, SAP HANA smart data integration, Maintenance Product」を選択する。
  3. 「SAP HANA SDI 1.0」を選択する。
  4. 「COMPRISED SOFTWARE COMPONENT VERSIONS」を選択する。
  5. 「HANA DP 1.0」を選択する。
  6. 「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にインポートします。

  1. HANA Studioの左上にあるメニュー「ファイル」を開いて、「インポート」を選択します。
  2. 「インポート」ウィザードのから「Delivery Unit」を選択します。
    次へに進むと、「Import Through Delivery Unit」ウィザードが開くので、ご自身で作成したHANAスキーマを選択します。

  3. 「Import Through Delivery Unit」ウィザードの上端に「ファイル選択」があります。
    「クライアント」を選択して、ファイル参照ボタンを押下します。
  4. 事前準備でダウンロードした「HANA_IM_DP_03_11.tgz」を選択します。
  5. しばらく待つと、「Object import simulation」にオブジェクト/パッケージが表示されます。
    最後に完了ボタンを押すとインポートされます。

 


【3. DPAgentの設定】

事前準備でダウンロードしたファイルを実行して、DPAgentを作成した後、Agentを起動します。

  1. 適当なフォルダを用意してダウンロードファイル「IMDB_DPAGENT200_03P_53-70002517.SAR」を格納します。
  2. 以下のsapcarコマンドを実行して、ファイルを展開します。
    sapcar -xvf IMDB_DPAGENT200_03P_53-70002517.SAR​

  3. 解凍したフォルダの中にある「hdbsetup.exe」を実行します。実行後、「SAP HANA Data Provisioning Agent」画面が開きます。
  4. 「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」ボタンを押下します。
  5. 上記、Step1で指定した任意のフォルダに移動して、以下のコマンドを実行します。
    例)

    cd C:\usr\sap\dataprovagent\bin
    agentcli --configAgent​


  6. コンソール画面に「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」

  1. HANA StudioのHANAスキーマをログオンして、「セキュリティー」の「ユーザ」を選択します。
  2. 「ユーザ」を右クリックで選択し、新規作成して、以下の2ユーザを作成します。
    ・「SDI_USER」
    ・「SDI_DP_AGENT」
  3. 作成したユーザ「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」


  4. 作成したユーザ「SDI_DP_AGENT」に、以下のRoles,Priviledgesを設定します。
    ・Application Priviledges
    「sap.hana.im.dp.proxy::AgentMessaging」
  5. HANAワークベンチにワークベンチにアクセスして、「SDI_USER」と「SDI_DP_AGENT」の初期パスワードを変更します。

 


【5. DPAgentにHANAの接続設定】

Neo環境のHANAとDPAgentが接続できるように「DPAgent Configuration Tool」からHANAの接続情報を入力します。

  1. 「DPAgent Configuration Tool」のオプションの「6.SAP HANA Connection」を選択します。
    続いて、「SAP HANA Connection」のオプション「1.Connect to SAP HANA on Cloud(HTTP/HTTPS)」を選択します。
  2.  以下の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アダプターを登録します。

  1. 「DPAgent Configuration Tool」のオプションの「7.Agent Registration」を選択します。
    続いて、「Agent Registration」のオプション「1.Register Agent」を選択します。

  2. 以下のStepを実行してAgentの登録します。
    Enter Agent Name[dpagent_dev]:
    ⇒dpagent_prod
    しばらく待つとAgentが登録されます。

 


【7. HANAアダプターの登録】

Neo環境のHANAとDPAgentが接続できるように「DPAgent Configuration Tool」からHANAアダプターを登録します。

  1. 「DPAgent Configuration Tool」のオプションの「8.Adapter Registration」を選択します。
    続いて、「Adapter Registration」のオプション「1.Display Adapters」を選択します。

  2. 現在登録されているアダプターを確認します。HanaAdapterが「No」となっていることが確認できます。
  3. 「Adapter Registration」のオプション「2.Register Adapters」を選択します。続いて、「HanaAdapter」を入力します。
  4. もう一度、「1.Display Adapters」を選択して、HanaAdapterが「Yes」になっていることを確認します。

 


【8. HANAへ接続】

「SAP HANA Data Provisioning Agent Configuration」を起動して、Neo環境のHANAと接続します。

  1. 「SAP HANA Data Provisioning Agent Configuration」の「Connect to HANA」ボタンを押下します。
  2. 「Enter HANA server connection information」ウィザードにHANA接続情報を入力します。
    HANA Hostname :[ご自身で作成したHANAホスト]
    HANA port :443
    HANA Agent Admin User :SDI_USER
    HANA Agent Admin PAssword :[ご自身で変更したパスワード]
  3. ウィザードの下端にある「Connect」押して、AgentとNeo環境のHANAを接続します。

 


【9. リモートソースの作成】

Neo環境のHANAのRemote SourcesにCloud Foudry環境のHANA Serviceを指定して、Neo環境のHANA DBからCloud Foundry環境のHANA DBを参照できるようにします。

  1. はじめに、Cloud Foundry環境の「SAP HANA Service Dashboard」を開いて、「Endpoints」を確認します。
    「Details」セクションの下端に「Endpoints」があります。
    例)
    Direct SQL Connectivity:[ご自身で作成したHANAホスト]:[ご自身で作成したHANAポート]
  2. HANA StudioでNeo環境のHANAスキーマを選択します。「Provisioning」を開いて、「Remote Sources」を選択します。
    右クリックから「New Remote Source」を選び新規作成します。
  3. 先ほど、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ユーザ名]

  4. 「Source Name」を入力して保存します。

 


【10.仮想テーブルの作成】

作成したRemote Sourceを選択して、Cloud Foundry環境のHANA DBを参照して、Neo環境のHANA DBに仮想テーブルを作成します。

  1. 「Provisioning」->「Remote Sources」を選択して、先ほど作成したRemote Sourceを開きます。
    Cloud Foundry環境のHANA DBがあることが確認できます。
  2. HANA DBのスキーマを開いてい、テーブルを選択します。右クリックで「Add as Virtual Table」を選択して仮想テーブルを作成します。
  3. 「Create Virtual Table」ウィザードで仮想テーブルの名前を付けます。仮想テーブルを入れるスキーマを選択して、「作成」ボタンを押します。
  4. 仮想テーブルが作成されていることを確認します。

 


【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環境のプロシージャを呼び出すことができました。

 

Be the first to leave a comment
You must be Logged on to comment or reply to a post.